2
0
mirror of https://opendev.org/x/pyghmi synced 2026-04-04 00:56:27 +00:00

Merge "Support Kent"

This commit is contained in:
Zuul
2021-09-13 12:36:14 +00:00
committed by Gerrit Code Review
2 changed files with 56 additions and 20 deletions

View File

@@ -124,6 +124,13 @@ led_status = {
0xFF: "On"
}
ami_leds = {
"BMC_HEARTBEAT": 0x00,
"BMC_UID": 0x01,
"SYSTEM_FAULT": 0x02,
"HDD_FAULT": 0x03
}
asrock_leds = {
"SYSTEM_EVENT": 0x00,
"BMC_UID": 0x01,
@@ -146,6 +153,11 @@ asrock_led_status = {
0x01: "On"
}
ami_led_status = {
0x00: "Off",
0x01: "On"
}
led_status_default = "Blink"
mac_format = '{0:02x}:{1:02x}:{2:02x}:{3:02x}:{4:02x}:{5:02x}'
categorie_items = ["cpu", "dimm", "firmware", "bios_version"]
@@ -313,7 +325,7 @@ class OEMHandler(generic.OEMHandler):
return super(OEMHandler, self).reseat_bay(bay)
def get_ntp_enabled(self):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
ntpres = self.ipmicmd.xraw_command(netfn=0x32, command=0xa7)
return ntpres['data'][0] == '\x01'
elif self.is_fpc:
@@ -323,7 +335,7 @@ class OEMHandler(generic.OEMHandler):
return None
def get_ntp_servers(self):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
srvs = []
ntpres = self.ipmicmd.xraw_command(netfn=0x32, command=0xa7)
srvs.append(ntpres['data'][1:129].rstrip('\x00'))
@@ -336,7 +348,7 @@ class OEMHandler(generic.OEMHandler):
return None
def set_ntp_enabled(self, enabled):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
if enabled:
self.ipmicmd.xraw_command(
netfn=0x32, command=0xa8, data=(3, 1), timeout=15)
@@ -352,7 +364,7 @@ class OEMHandler(generic.OEMHandler):
return None
def set_ntp_server(self, server, index=0):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
if not (0 <= index <= 1):
raise pygexc.InvalidParameterValue("Index must be 0 or 1")
cmddata = bytearray((1 + index, ))
@@ -457,7 +469,7 @@ class OEMHandler(generic.OEMHandler):
return False
def get_oem_inventory_descriptions(self):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
# Thinkserver with TSM
if not self.oem_inventory_info:
self._collect_tsm_inventory()
@@ -469,7 +481,7 @@ class OEMHandler(generic.OEMHandler):
return ()
def get_oem_inventory(self):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
self._collect_tsm_inventory()
for compname in self.oem_inventory_info:
yield (compname, self.oem_inventory_info[compname])
@@ -511,7 +523,7 @@ class OEMHandler(generic.OEMHandler):
return ()
def get_inventory_of_component(self, component):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
self._collect_tsm_inventory()
return self.oem_inventory_info.get(component, None)
if self.has_imm:
@@ -615,7 +627,11 @@ class OEMHandler(generic.OEMHandler):
led_set_status = led_status
asrock = self.has_asrock
if asrock:
if self.has_ami:
cmd = 0x05
led_set = ami_leds
led_set_status = ami_led_status
elif asrock:
cmd = 0x50
# because rs160 has different led info with ts460
if self.isTS460:
@@ -774,8 +790,28 @@ class OEMHandler(generic.OEMHandler):
self._hasimm = (rdata[1] & 1 == 1) or (rdata[1] & 16 == 16)
return self._hasimm
@property
def has_ami(self):
"""True if this particular server is AMI based lenovo server
"""
if(self.oemid['manufacturer_id'] == 19046
and self.oemid['product_id'] == 13616):
try:
rsp = self.ipmicmd.xraw_command(netfn=0x3a, command=0x80)
except pygexc.IpmiException as ie:
if ie.ipmicode == 193:
return False
raise
rdata = bytearray(rsp['data'][:])
if rdata[0] in range(5):
return True
else:
return False
return False
def get_oem_firmware(self, bmcver, components):
if self.has_tsm or self.has_asrock:
if self.has_tsm or self.has_ami or self.has_asrock:
command = firmware.get_categories()["firmware"]
fw_cmd = self.get_cmd_type("firmware", command)
rsp = self.ipmicmd.xraw_command(**fw_cmd)

View File

@@ -388,11 +388,11 @@ generic_type_offsets = {
'desc': 'Redundant',
'severity': const.Health.Ok,
'deassertion_desc': 'Redundant lost',
'deassertion_severity': const.Health.Ok,
'deassertion_severity': const.Health.Critical,
},
1: {
'desc': 'Not redundant', # redundancy lost
'severity': const.Health.Warning,
'severity': const.Health.Critical,
'deassertion_desc': 'Redundancy restored',
'deassertion_severity': const.Health.Ok,
},
@@ -404,7 +404,7 @@ generic_type_offsets = {
},
3: {
'desc': 'Not redundant', # down to non redundant
'severity': const.Health.Ok,
'severity': const.Health.Warning,
'deassertion_desc': 'Redundancy restored',
'deassertion_severity': const.Health.Ok,
},
@@ -603,7 +603,7 @@ sensor_type_offsets = {
},
8: {
'desc': 'Disabled',
'severity': const.Health.Warning,
'severity': const.Health.Ok,
'deassertion_desc': 'Enabled',
'deassertion_severity': const.Health.Ok,
},
@@ -761,13 +761,13 @@ sensor_type_offsets = {
},
4: {
'desc': 'Device disabled',
'severity': const.Health.Warning,
'severity': const.Health.Ok,
'deassertion_desc': 'Device enabled',
'deassertion_severity': const.Health.Ok,
},
5: {
'desc': 'Correctable memory error logging limit reached',
'severity': const.Health.Critical,
'severity': const.Health.Warning,
'deassertion_desc': 'Correctable memory error logging restored',
'deassertion_severity': const.Health.Ok,
},
@@ -905,7 +905,7 @@ sensor_type_offsets = {
},
4: {
'desc': 'Event log full',
'severity': const.Health.Warning,
'severity': const.Health.Ok,
'deassertion_desc': 'Event log no longer full',
'deassertion_severity': const.Health.Ok,
},
@@ -963,7 +963,7 @@ sensor_type_offsets = {
0x13: { # critical interrupt
0: {
'desc': 'Front panel diagnostic interrupt',
'severity': const.Health.Ok,
'severity': const.Health.Critical,
'deassertion_desc': 'Front panel diagnostic interrupt deasserted',
'deassertion_severity': const.Health.Ok,
},
@@ -1442,19 +1442,19 @@ sensor_type_offsets = {
},
0x1: {
'desc': 'Watchdog hard reset',
'severity': const.Health.Failed,
'severity': const.Health.Ok,
'deassertion_desc': 'Watchdog hard reset deasserted',
'deassertion_severity': const.Health.Ok,
},
0x2: {
'desc': 'Watchdog power down',
'severity': const.Health.Failed,
'severity': const.Health.Ok,
'deassertion_desc': 'Watchdog power down deasserted',
'deassertion_severity': const.Health.Ok,
},
0x3: {
'desc': 'Watchdog power cycle',
'severity': const.Health.Failed,
'severity': const.Health.Ok,
'deassertion_desc': 'Watchdog power cycle deasserted',
'deassertion_severity': const.Health.Ok,
},