From d3fbe9c06c5c59acff1abb35589e0b0d036d4611 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Fri, 12 Oct 2018 10:01:49 -0400 Subject: [PATCH] Prefer more specific IMM/XCC check over FPC check There exists one set of FPCs and IMMs that share id. Compensate by using the more direct IMM query first, then falling back to the fpc id based. Change-Id: Ibbaea1ffce6e5903523a8467280d168bb080daee --- pyghmi/ipmi/oem/lenovo/handler.py | 40 +++++++++++++++++-------------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/pyghmi/ipmi/oem/lenovo/handler.py b/pyghmi/ipmi/oem/lenovo/handler.py index 57b64747..f13545e8 100755 --- a/pyghmi/ipmi/oem/lenovo/handler.py +++ b/pyghmi/ipmi/oem/lenovo/handler.py @@ -330,6 +330,10 @@ class OEMHandler(generic.OEMHandler): def is_fpc(self): """True if the target is a Lenovo nextscale fan power controller """ + if self.has_imm or self.has_xcc: + return None + if self._fpc_variant is not None: + return self._fpc_variant fpc_ids = ((19046, 32, 1063), (20301, 32, 462)) smm_id = (19046, 32, 1180) currid = (self.oemid['manufacturer_id'], self.oemid['device_id'], @@ -381,29 +385,29 @@ class OEMHandler(generic.OEMHandler): yield inv def get_sensor_data(self): - if self.is_fpc: - for name in nextscale.get_sensor_names(self._fpc_variant): - yield nextscale.get_sensor_reading(name, self.ipmicmd, - self._fpc_variant) - elif self.has_imm: + if self.has_imm: for name in self.immhandler.get_oem_sensor_names(self.ipmicmd): yield self.immhandler.get_oem_sensor_reading(name, self.ipmicmd) + elif self.is_fpc: + for name in nextscale.get_sensor_names(self._fpc_variant): + yield nextscale.get_sensor_reading(name, self.ipmicmd, + self._fpc_variant) def get_sensor_descriptions(self): - if self.is_fpc: - return nextscale.get_sensor_descriptions(self._fpc_variant) - elif self.has_imm: + if self.has_imm: return self.immhandler.get_oem_sensor_descriptions(self.ipmicmd) + elif self.is_fpc: + return nextscale.get_sensor_descriptions(self._fpc_variant) return () def get_sensor_reading(self, sensorname): - if self.is_fpc: - return nextscale.get_sensor_reading(sensorname, self.ipmicmd, - self._fpc_variant) - elif self.has_imm: + if self.has_imm: return self.immhandler.get_oem_sensor_reading(sensorname, self.ipmicmd) + elif self.is_fpc: + return nextscale.get_sensor_reading(sensorname, self.ipmicmd, + self._fpc_variant) return () def get_inventory_of_component(self, component): @@ -679,17 +683,17 @@ class OEMHandler(generic.OEMHandler): self.smmhandler.set_domain(name) def set_hostname(self, hostname): - if self.is_fpc: - return self.smmhandler.set_hostname(hostname) - elif self.has_xcc: + if self.has_xcc: return self.immhandler.set_hostname(hostname) + elif self.is_fpc: + return self.smmhandler.set_hostname(hostname) return super(OEMHandler, self).set_hostname(hostname) def get_hostname(self): - if self.is_fpc: - return self.smmhandler.get_hostname() - elif self.has_xcc: + if self.has_xcc: return self.immhandler.get_hostname() + elif self.is_fpc: + return self.smmhandler.get_hostname() return super(OEMHandler, self).get_hostname() """ Gets a remote console launcher for a Lenovo ThinkServer.