From 514ec63d1bde5f6f1280776f6f8dd4d32df5e45c Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Tue, 5 Aug 2025 14:52:45 -0400 Subject: [PATCH] Fix BMC change handling in XCC3 Change-Id: I32e6fea282172690df3f529844ae71ec4a2f466e --- pyghmi/redfish/oem/generic.py | 6 +++++- pyghmi/redfish/oem/lenovo/xcc3.py | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pyghmi/redfish/oem/generic.py b/pyghmi/redfish/oem/generic.py index 3e162214..2fdb5ee6 100644 --- a/pyghmi/redfish/oem/generic.py +++ b/pyghmi/redfish/oem/generic.py @@ -1191,17 +1191,21 @@ class OEMHandler(object): wc.stdheaders['X-Auth-Token'] = self.xauthtoken self.webclient.stdheaders['X-Auth-Token'] = self.xauthtoken - def _do_web_request(self, url, payload=None, method=None, cache=True): + def _do_web_request(self, url, payload=None, method=None, cache=True, etag=None): res = None if cache and payload is None and method is None: res = self._get_cache(url) if res: return res wc = self.webclient.dupe() + if etag: + wc.stdheaders['If-Match'] = etag res = wc.grab_json_response_with_status(url, payload, method=method) if res[1] == 401 and 'X-Auth-Token' in self.webclient.stdheaders: wc.set_basic_credentials(self.username, self.password) self._get_session_token(wc) + if etag: + wc.stdheaders['If-Match'] = etag res = wc.grab_json_response_with_status(url, payload, method=method) if res[1] < 200 or res[1] >= 300: diff --git a/pyghmi/redfish/oem/lenovo/xcc3.py b/pyghmi/redfish/oem/lenovo/xcc3.py index 238a199d..b2556ad3 100644 --- a/pyghmi/redfish/oem/lenovo/xcc3.py +++ b/pyghmi/redfish/oem/lenovo/xcc3.py @@ -950,8 +950,10 @@ class OEMHandler(generic.OEMHandler): acctattribs = {} usbsettings = {} bmchangeset = {} + rawchangeset = {} for key in changeset: if isinstance(changeset[key], str): + rawchangeset[key] = changeset[key] changeset[key] = {'value': changeset[key]} currval = changeset[key].get('value', None) if key == 'password_complexity': @@ -967,7 +969,10 @@ class OEMHandler(generic.OEMHandler): elif currval and 'enabled'.startswith(currval): currval = 'True' else: - currval = int(currval) + try: + currval = int(currval) + except ValueError: + pass if key.lower() in self.oemacctmap: if 'Oem' not in acctattribs: acctattribs['Oem'] = {'Lenovo': {}} @@ -984,7 +989,7 @@ class OEMHandler(generic.OEMHandler): 'usb_forwarded_ports'): usbsettings[key] = currval else: - bmchangeset[key.replace('bmc.', '')] = changeset[key] + bmchangeset[key.replace('bmc.', '')] = rawchangeset[key] if acctattribs: self._do_web_request( '/redfish/v1/AccountService', acctattribs, method='PATCH')