2
0
mirror of https://opendev.org/x/pyghmi synced 2026-01-11 18:52:33 +00:00

Support non-PCI adapter firmware inventory

There are non-PCI adapters that are modeled as 'adapter',
but without corresponding adapter data.

The inventory data is more limited, but we can at least report current
firmware.

Change-Id: I42d17befe1f95fde3b88304418743f1ac456eedd
This commit is contained in:
Jarrod Johnson
2023-01-24 10:18:09 -05:00
parent 7b5e641635
commit 25a04fd87b
2 changed files with 33 additions and 0 deletions

View File

@@ -550,6 +550,7 @@ class IMMClient(object):
return []
def fetch_agentless_firmware(self):
skipkeys = set([])
cd = self.get_cached_data('lenovo_cached_adapters_fu')
if cd:
adapterdata, fwu = cd
@@ -606,11 +607,22 @@ class IMMClient(object):
yield '{0} {1}'.format(aname, fname), bdata
for fwi in fwu.get('items', []):
if fwi.get('key', -1) == adata.get('key', -2):
skipkeys.add(fwi['key'])
if fwi.get('fw_status', 0) == 2:
bdata = {}
if 'fw_version_pend' in fwi:
bdata['version'] = fwi['fw_version_pend']
yield '{0} Pending Update'.format(aname), bdata
for fwi in fwu.get('items', []):
if fwi.get('key', -1) > 0 and fwi['key'] not in skipkeys:
bdata = {}
bdata['version'] = fwi['fw_version']
yield fwi['adapterName'], bdata
if fwi.get('fw_status', 0) == 2:
bdata = {}
if 'fw_version_pend' in fwi:
bdata['version'] = fwi['fw_version_pend']
yield '{0} Pending Update'.format(fwi['adapterName']), bdata
for disk in self.disk_inventory():
yield disk
self.weblogout()

View File

@@ -493,8 +493,11 @@ class OEMHandler(generic.OEMHandler):
return {'height': u_height, 'slot': slot}
def _get_agentless_firmware(self, components):
skipkeys = set([])
adata = self.wc.grab_json_response(
'/api/dataset/imm_adapters?params=pci_GetAdapters')
fdata = self.wc.grab_json_response(
'/api/function/adapter_update?params=pci_GetAdapterListAndFW')
anames = set()
for adata in adata.get('items', []):
baseaname = adata['adapterName']
@@ -527,6 +530,24 @@ class OEMHandler(generic.OEMHandler):
except ValueError:
pass
yield '{0} {1}'.format(aname, fname), bdata
for fwi in fdata.get('items', []):
if fwi.get('key', -1) == adata.get('key', -2):
skipkeys.add(fwi['key'])
if fwi.get('fw_status', 0) == 2:
bdata = {}
if 'fw_version_pend' in fwi:
bdata['version'] = fwi['fw_version_pend']
yield '{0} Pending Update'.format(aname), bdata
for fwi in fdata.get('items', []):
if fwi.get('key', -1) > 0 and fwi['key'] not in skipkeys:
bdata = {}
bdata['version'] = fwi['fw_version']
yield fwi['adapterName'], bdata
if fwi.get('fw_status', 0) == 2:
bdata = {}
if 'fw_version_pend' in fwi:
bdata['version'] = fwi['fw_version_pend']
yield '{0} Pending Update'.format(fwi['adapterName']), bdata
def _get_disk_firmware_single(self, diskent, prefix=''):
bdata = {}