diff --git a/pyghmi/ipmi/command.py b/pyghmi/ipmi/command.py index 4ca5f181..506d4db9 100644 --- a/pyghmi/ipmi/command.py +++ b/pyghmi/ipmi/command.py @@ -376,6 +376,22 @@ class Command(object): for fruid in self._sdr.fru: yield self._sdr.fru[fruid].fru_name + def get_inventory_of_component(self, component): + """Retrieve inventory of a component + + Retrieve detailed inventory information for only the requested + component. + """ + self.oem_init() + if component == 'System': + return self._oem.process_fru(fru.FRU(ipmicmd=self).info) + if self._sdr is None: + self._sdr = sdr.SDR(self) + for fruid in self._sdr.fru: + if self._sdr.fru[fruid].fru_name == component: + return self._oem.process_fru(fru.FRU( + ipmicmd=self, fruid=fruid, sdr=self._sdr.fru[fruid]).info) + def get_inventory(self): """Retrieve inventory of system diff --git a/pyghmi/ipmi/oem/generic.py b/pyghmi/ipmi/oem/generic.py index 43f4d834..9603517d 100644 --- a/pyghmi/ipmi/oem/generic.py +++ b/pyghmi/ipmi/oem/generic.py @@ -40,5 +40,7 @@ class OEMHandler(object): ordered lists that their expectations are not broken by an update """ # In the generic case, just pass through + if fru is None: + return fru fru['oem_parser'] = None return fru diff --git a/pyghmi/ipmi/oem/lenovo.py b/pyghmi/ipmi/oem/lenovo.py index f2389abf..296d8c9e 100644 --- a/pyghmi/ipmi/oem/lenovo.py +++ b/pyghmi/ipmi/oem/lenovo.py @@ -24,6 +24,8 @@ class OEMHandler(generic.OEMHandler): self.oemid = oemid def process_fru(self, fru): + if fru is None: + return fru if (self.oemid['manufacturer_id'] == 19046 and self.oemid['device_id'] == 32): fru['oem_parser'] = 'lenovo'