From 29915acaebc108825d8460391efc7b610fcec2d3 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 19 Mar 2025 15:31:51 -0400 Subject: [PATCH] Provide API to query update readyness --- confluent_server/confluent/core.py | 4 ++++ .../confluent/plugins/hardwaremanagement/ipmi.py | 10 ++++++++++ .../confluent/plugins/hardwaremanagement/redfish.py | 10 ++++++++++ 3 files changed, 24 insertions(+) diff --git a/confluent_server/confluent/core.py b/confluent_server/confluent/core.py index 14cea46a..59615f64 100644 --- a/confluent_server/confluent/core.py +++ b/confluent_server/confluent/core.py @@ -490,6 +490,10 @@ def _init_core(): 'pluginattrs': ['hardwaremanagement.method'], 'default': 'ipmi', }), + 'updatestatus': PluginCollection({ + 'pluginattrs': ['hardwaremanagement.method'], + 'default': 'ipmi', + }), 'updates': { 'active': PluginCollection({ 'pluginattrs': ['hardwaremanagement.method'], diff --git a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py index e5219352..16b59152 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/ipmi.py @@ -572,6 +572,8 @@ class IpmiHandler(object): self.handle_configuration() elif self.element[:3] == ['inventory', 'firmware', 'updates']: self.handle_update() + elif self.element[:3] == ['inventory', 'firmware', 'updatestatus']: + self.handle_update_status() elif self.element[0] == 'inventory': self.handle_inventory() elif self.element == ['media', 'attach']: @@ -978,6 +980,14 @@ class IpmiHandler(object): if errorneeded: self.output.put(errorneeded) + def handle_update_status(self): + activeupdates = firmwaremanager.list_updates([self.node], None, []) + if activeupdates: + self.output.put(msg.KeyValueData({'status': 'active'}, self.node)) + else: + status = self.ipmicmd.get_update_status() + self.output.put(msg.KeyValueData({'status': status}, self.node)) + def handle_inventory(self): if self.element[1] == 'firmware': if len(self.element) == 3: diff --git a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py index 6901c39b..39fb3df3 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py @@ -431,6 +431,8 @@ class IpmiHandler(object): self.handle_configuration() elif self.element[:3] == ['inventory', 'firmware', 'updates']: self.handle_update() + elif self.element[:3] == ['inventory', 'firmware', 'updatestatus']: + self.handle_update_status() elif self.element[0] == 'inventory': self.handle_inventory() elif self.element == ['media', 'attach']: @@ -835,6 +837,14 @@ class IpmiHandler(object): if errorneeded: self.output.put(errorneeded) + def handle_update_status(self): + activeupdates = firmwaremanager.list_updates([self.node], None, []) + if activeupdates: + self.output.put(msg.KeyValueData({'status': 'active'}, self.node)) + else: + status = self.ipmicmd.get_update_status() + self.output.put(msg.KeyValueData({'status': status}, self.node)) + def handle_inventory(self): if self.element[1] == 'firmware': if len(self.element) == 3: