2
0
mirror of https://opendev.org/x/pyghmi synced 2025-04-13 16:57:46 +00:00

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
This commit is contained in:
Jarrod Johnson 2018-10-12 10:01:49 -04:00
parent c0acd75fe1
commit d3fbe9c06c

View File

@ -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.