From 959c71cf73917b83cac54e968d3f4af67c2125fc Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Thu, 21 May 2026 10:17:08 -0400 Subject: [PATCH] More enhancements for generic MegaRAC Tolerate more behaviors in generic MegaRAC systems Change-Id: I29ce81a70cfc031cee6f9861b90907a3498a79ed --- pyghmi/redfish/oem/ami/megarac.py | 37 +++++++++++++++++++++++++++++++ pyghmi/redfish/oem/generic.py | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/pyghmi/redfish/oem/ami/megarac.py b/pyghmi/redfish/oem/ami/megarac.py index 37a31009..95168058 100644 --- a/pyghmi/redfish/oem/ami/megarac.py +++ b/pyghmi/redfish/oem/ami/megarac.py @@ -13,6 +13,9 @@ # limitations under the License. import pyghmi.redfish.oem.generic as generic +import pyghmi.util.webclient as webclient +from urllib.parse import urlencode + class OEMHandler(generic.OEMHandler): @@ -28,3 +31,37 @@ class OEMHandler(generic.OEMHandler): sysurl = system['@odata.id'] break self._varsysurl = sysurl + self._wc = None + self.bmc = webclient.thehost + self._certverify = webclient._certverify + + + @property + def wc(self): + self.fwid = None + if self._wc: + rsp, status = self._wc.grab_json_response_with_status( + '/api/chassis-status') + if status == 200: + return self._wc + authdata = { + 'username': self.username, + 'password': self.password, + } + wc = webclient.SecureHTTPConnection(self.bmc, 443, + verifycallback=self._certverify, + timeout=180) + wc.set_header('Content-Type', 'application/x-www-form-urlencoded') + rsp, status = wc.grab_json_response_with_status( + '/api/session', urlencode(authdata)) + + if status < 200 or status >= 300: + raise Exception('Error establishing web session') + print(repr(rsp)) + if 'CSRFToken' in rsp: + self.csrftok = rsp['CSRFToken'] + wc.set_header('X-CSRFTOKEN', self.csrftok) + self._wc = wc + return wc + + diff --git a/pyghmi/redfish/oem/generic.py b/pyghmi/redfish/oem/generic.py index 5c18ac0f..a0df51d5 100644 --- a/pyghmi/redfish/oem/generic.py +++ b/pyghmi/redfish/oem/generic.py @@ -658,7 +658,7 @@ class OEMHandler(object): procfound = True summary['badreadings'].append(SensorReading(cinfo)) if not procfound: - procinfo = fishclient.sysinfo['ProcessorSummary'] + procinfo = fishclient.sysinfo.get('ProcessorSummary', {}) procinfo['Name'] = 'Processors' summary['badreadings'].append(SensorReading(procinfo)) memsumstatus = fishclient.sysinfo.get(