2
0
mirror of https://opendev.org/x/pyghmi synced 2026-06-19 18:11:00 +00:00

Handle inventory for systemless redfish endpoint

If an endpoint has no system, use chassis for data.

Further, for SMM3, do some fixup on 'Model' versus 'SKU'.

Change-Id: Ibf8d72381057d43f9ad59469078fd4899330c74f
This commit is contained in:
Jarrod Johnson
2025-02-04 11:55:16 -05:00
parent 5bb678229c
commit 1bf95406b5
2 changed files with 47 additions and 12 deletions
+32 -12
View File
@@ -688,15 +688,30 @@ class OEMHandler(object):
for adp in self._get_adp_inventory(True, withids):
yield adp
def _get_node_info(self):
nodeinfo = self._varsysinfo
if not nodeinfo:
overview = self._do_web_request('/redfish/v1/')
chassismembs = overview.get('Chassis', {}).get('@odata.id', None)
if not chassismembs:
return nodeinfo
chassislist = self._do_web_request(chassismembs)
chassismembs = chassislist.get('Members', [])
if len(chassismembs) == 1:
chassisurl = chassismembs[0]['@odata.id']
nodeinfo = self._do_web_request(chassisurl)
return nodeinfo
def get_inventory_of_component(self, component):
if component.lower() == 'system':
nodeinfo = self._get_node_info()
sysinfo = {
'UUID': self._varsysinfo.get('UUID', ''),
'Serial Number': self._varsysinfo.get('SerialNumber', ''),
'Manufacturer': self._varsysinfo.get('Manufacturer', ''),
'Product name': self._varsysinfo.get('Model', ''),
'Model': self._varsysinfo.get(
'SKU', self._varsysinfo.get('PartNumber', '')),
'UUID': nodeinfo.get('UUID', ''),
'Serial Number': nodeinfo.get('SerialNumber', ''),
'Manufacturer': nodeinfo.get('Manufacturer', ''),
'Product name': nodeinfo.get('Model', ''),
'Model': nodeinfo.get(
'SKU', nodeinfo.get('PartNumber', '')),
}
if sysinfo['UUID'] and '-' not in sysinfo['UUID']:
sysinfo['UUID'] = '-'.join((
@@ -711,13 +726,14 @@ class OEMHandler(object):
return invpair[1]
def get_inventory(self, withids=False):
nodeinfo = self._get_node_info()
sysinfo = {
'UUID': self._varsysinfo.get('UUID', ''),
'Serial Number': self._varsysinfo.get('SerialNumber', ''),
'Manufacturer': self._varsysinfo.get('Manufacturer', ''),
'Product name': self._varsysinfo.get('Model', ''),
'Model': self._varsysinfo.get(
'SKU', self._varsysinfo.get('PartNumber', '')),
'UUID': nodeinfo.get('UUID', ''),
'Serial Number': nodeinfo.get('SerialNumber', ''),
'Manufacturer': nodeinfo.get('Manufacturer', ''),
'Product name': nodeinfo.get('Model', ''),
'Model': nodeinfo.get(
'SKU', nodeinfo.get('PartNumber', '')),
}
if sysinfo['UUID'] and '-' not in sysinfo['UUID']:
sysinfo['UUID'] = '-'.join((
@@ -926,6 +942,8 @@ class OEMHandler(object):
def _get_cpu_data(self, expand='.'):
cpurl = self._varsysinfo.get('Processors', {}).get('@odata.id', None)
if not cpurl:
return {}
return self._get_expanded_data(cpurl, expand)
@@ -966,6 +984,8 @@ class OEMHandler(object):
def _get_mem_data(self, expand='.'):
memurl = self._varsysinfo.get('Memory', {}).get('@odata.id', None)
if not memurl:
return {}
return self._get_expanded_data(memurl, expand)
def _get_expanded_data(self, url, expand='.'):
+15
View File
@@ -53,6 +53,21 @@ class OEMHandler(generic.OEMHandler):
health = healthlookup.get(health, pygconst.Health.Critical)
return {'health': health}
def _get_node_info(self):
nodeinfo = self._varsysinfo
if not nodeinfo:
overview = self._do_web_request('/redfish/v1/')
chassismembs = overview.get('Chassis', {}).get('@odata.id', None)
if not chassismembs:
return nodeinfo
chassislist = self._do_web_request(chassismembs)
chassismembs = chassislist.get('Members', [])
if len(chassismembs) == 1:
chassisurl = chassismembs[0]['@odata.id']
nodeinfo = self._do_web_request(chassisurl)
nodeinfo['SKU'] = nodeinfo['Model']
nodeinfo['Model'] = 'N1380 Enclosure'
return nodeinfo
def reseat_bay(self, bay):
bayid = _baytolabel(bay)