mirror of
https://opendev.org/x/pyghmi
synced 2026-01-11 10:42:32 +00:00
Implement fixup of firmware inventory
Redfish raw firmware inventory is given a facelift for the sake of being more user friendly. Change-Id: If6e1fa326c8b3d43c9e49e67b062c9b544f2f010
This commit is contained in:
@@ -963,7 +963,7 @@ class Command(object):
|
||||
|
||||
def get_firmware(self, components=()):
|
||||
try:
|
||||
for firminfo in self.oem.get_firmware_inventory(components):
|
||||
for firminfo in self.oem.get_firmware_inventory(components, self):
|
||||
yield firminfo
|
||||
except exc.BypassGenericBehavior:
|
||||
return
|
||||
|
||||
@@ -522,7 +522,7 @@ class OEMHandler(object):
|
||||
def get_description(self):
|
||||
return {}
|
||||
|
||||
def get_firmware_inventory(self, components):
|
||||
def get_firmware_inventory(self, components, fishclient):
|
||||
return []
|
||||
|
||||
def set_credentials(self, username, password):
|
||||
|
||||
@@ -674,7 +674,7 @@ class OEMHandler(generic.OEMHandler):
|
||||
for diskent in adp.get('aimDisks', ()):
|
||||
yield self._get_disk_firmware_single(diskent)
|
||||
|
||||
def get_firmware_inventory(self, components):
|
||||
def get_firmware_inventory(self, components, fishclient):
|
||||
sysinf = self.wc.grab_json_response('/api/dataset/sys_info')
|
||||
for item in sysinf.get('items', {}):
|
||||
for firm in item.get('firmware', []):
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
import pyghmi.redfish.oem.generic as generic
|
||||
import pyghmi.exceptions as pygexc
|
||||
|
||||
|
||||
class OEMHandler(generic.OEMHandler):
|
||||
|
||||
@@ -91,4 +93,39 @@ class OEMHandler(generic.OEMHandler):
|
||||
currsettings[setting] = val
|
||||
return currsettings, reginfo
|
||||
|
||||
def get_firmware_inventory(self, components, fishclient):
|
||||
fwlist = fishclient._do_web_request(fishclient._fwinventory)
|
||||
rawfwurls = [x['@odata.id'] for x in fwlist.get('Members', [])]
|
||||
fwurls = []
|
||||
for fwurl in rawfwurls:
|
||||
if fwurl.startswith('/redfish/v1/UpdateService/FirmwareInventory/Bundle.'):
|
||||
continue # skip Bundle information for now
|
||||
fwurls.append(fwurl)
|
||||
self._fwnamemap = {}
|
||||
for res in fishclient._do_bulk_requests(fwurls):
|
||||
redres = res[0]
|
||||
if redres.get('Name', '').startswith('Firmware:'):
|
||||
redres['Name'] = redres['Name'].replace('Firmware:', '')
|
||||
if redres['Name'].startswith('Firmware-PSoC') and 'Drive_Backplane' in redres["@odata.id"]:
|
||||
redres['Name'] = 'Drive Backplane'
|
||||
if redres['Name'].startswith('DEVICE-'):
|
||||
redres['Name'] = redres['Name'].replace('DEVICE-', '')
|
||||
if redres['Name'].startswith('POWER-PSU'):
|
||||
redres['Name'] = redres['Name'].replace('POWER-', '')
|
||||
swid = redres.get('SoftwareId', '')
|
||||
buildid = ''
|
||||
version = redres.get('Version', None)
|
||||
if swid.startswith('FPGA-') or swid.startswith('UEFI-') or swid.startswith('BMC-'):
|
||||
buildid = swid.split('-')[1] + version.split('-')[0]
|
||||
version = '-'.join(version.split('-')[1:])
|
||||
if version:
|
||||
redres['Version'] = version
|
||||
cres = fishclient._extract_fwinfo(res)
|
||||
if cres[0] is None:
|
||||
continue
|
||||
if buildid:
|
||||
cres[1]['build'] = buildid
|
||||
yield cres
|
||||
raise pygexc.BypassGenericBehavior()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user