2
0
mirror of https://github.com/xcat2/confluent.git synced 2026-09-21 16:39:32 +00:00

Fix remaining aiohmi async call paths

Await OEM sensor, NTP, retry, and firmware-update operations that otherwise returned or discarded coroutine objects. Return the initialized energy manager for FAPM systems and update stale utility entry points to use asynchronous Command factories.
This commit is contained in:
Markus Hilger
2026-07-11 20:07:20 +02:00
parent 6650a01a25
commit 2117d120d8
6 changed files with 38 additions and 27 deletions
@@ -74,7 +74,7 @@ async def run_command_with_retry(connection, data):
except pygexc.IpmiException as e:
if e.ipmicode != 0xa or not tries:
raise
connection.ipmi_session.pause(1)
await connection.ipmi_session.pause(1)
def _convert_syntax(raw):
@@ -198,7 +198,7 @@ class LenovoFirmwareConfig(object):
break
except KeyError:
pass
self.connection.ipmi_session.pause(5)
await self.connection.ipmi_session.pause(5)
filehandle = response['data'][3:7]
filehandle = struct.unpack("<I", filehandle)[0]
return filehandle
@@ -38,7 +38,7 @@ class EnergyManager(object):
'Node Power', 'Total Power')
self._mypowermeters = ('node power', 'total power', 'gpu power', 'riser 1 power', 'riser 2 power')
self._usefapm = True
return
return self
except pygexc.IpmiException:
pass
@@ -80,7 +80,7 @@ class EnergyManager(object):
break
except pygexc.IpmiException as ie:
if tries and ie.ipmicode == 0xc3:
ipmicmd.ipmi_session.pause(0.1)
await ipmicmd.ipmi_session.pause(0.1)
continue
raise
if rsp is None:
@@ -159,8 +159,14 @@ class Energy(object):
if __name__ == '__main__':
import asyncio
import os
import aiohmi.ipmi.command as cmd
import sys
c = cmd.Command(sys.argv[1], os.environ['BMCUSER'], os.environ['BMCPASS'])
EnergyManager(c).get_dc_energy(c)
async def main():
c = await cmd.Command.create(sys.argv[1], os.environ['BMCUSER'], os.environ['BMCPASS'])
manager = await EnergyManager.create(c)
print(await manager.get_dc_energy(c))
asyncio.run(main())
@@ -349,7 +349,7 @@ class OEMHandler(generic.OEMHandler):
elif await self.is_fpc():
return await self.smmhandler.get_ntp_enabled(self._fpc_variant)
elif self.has_tsma:
return self.tsmahandler.get_ntp_enabled()
return await self.tsmahandler.get_ntp_enabled()
return None
async def get_ntp_servers(self):
@@ -362,7 +362,7 @@ class OEMHandler(generic.OEMHandler):
if await self.is_fpc():
return await self.smmhandler.get_ntp_servers()
if self.has_tsma:
return self.tsmahandler.get_ntp_servers()
return await self.tsmahandler.get_ntp_servers()
return ()
async def set_ntp_enabled(self, enabled):
@@ -522,15 +522,16 @@ class OEMHandler(generic.OEMHandler):
async def get_sensor_data(self):
if await self.has_imm():
async for name in self.immhandler.get_oem_sensor_names(self.ipmicmd):
yield self.immhandler.get_oem_sensor_reading(name,
self.ipmicmd)
yield await self.immhandler.get_oem_sensor_reading(name,
self.ipmicmd)
elif await self.is_fpc():
for name in nextscale.get_sensor_names(self.ipmicmd,
self._fpc_variant):
yield nextscale.get_sensor_reading(name, self.ipmicmd,
self._fpc_variant)
yield await nextscale.get_sensor_reading(name, self.ipmicmd,
self._fpc_variant)
elif await self.has_ami():
self.get_ami_sensor_data()
async for reading in self.get_ami_sensor_data():
yield reading
async def get_sensor_descriptions(self):
if await self.has_imm():
@@ -548,13 +549,13 @@ class OEMHandler(generic.OEMHandler):
async def get_sensor_reading(self, sensorname):
if await self.has_imm():
return self.immhandler.get_oem_sensor_reading(sensorname,
self.ipmicmd)
return await self.immhandler.get_oem_sensor_reading(sensorname,
self.ipmicmd)
elif await self.is_fpc():
return nextscale.get_sensor_reading(sensorname, self.ipmicmd,
self._fpc_variant)
return await nextscale.get_sensor_reading(sensorname, self.ipmicmd,
self._fpc_variant)
elif await self.has_ami():
self.get_ami_sensor_reading(sensorname)
return await self.get_ami_sensor_reading(sensorname)
return ()
async def get_inventory_of_component(self, component):
@@ -1135,9 +1136,9 @@ class OEMHandler(generic.OEMHandler):
targshortname = _megarac_abbrev_image(imagename)
shortnames = await self._megarac_fetch_image_shortnames()
while targshortname not in shortnames:
self.ipmicmd.wait_for_rsp(1)
await self.ipmicmd.wait_for_rsp(1)
shortnames = await self._megarac_fetch_image_shortnames()
self.ipmicmd.ipmi_session.pause(10)
await self.ipmicmd.ipmi_session.pause(10)
try:
await self.ipmicmd.raw_command(netfn=0x32, command=0xa0, data=(1, 0))
await self.ipmicmd.ipmi_session.pause(5)
@@ -2365,7 +2365,7 @@ class XCCClient(IMMClient):
if verifystatus == 2:
raise Exception('Failed to verify firmware image')
if verifystatus != 1:
ipmisession.Session.pause(1)
await ipmisession.Session.pause(1)
if verifystatus not in (0, 1, 255):
errmsg = repr(rsp) if rsp else wc.lastjsonerror
raise Exception(
@@ -2435,7 +2435,7 @@ class XCCClient(IMMClient):
complete = False
while not complete:
await self._refresh_token()
ipmisession.Session.pause(3)
await ipmisession.Session.pause(3)
rsp = await wc.grab_json_response(
'/api/dataset/imm_firmware_progress')
progress({'phase': 'apply',
@@ -784,7 +784,7 @@ class SMMClient(object):
if progress:
progress({'phase': 'initializing', 'progress': initpct})
while bytearray(rsp['data'])[0] != 0:
ipmisession.Session.pause(3)
await ipmisession.Session.pause(3)
initpct += 3.0
if initpct > 99.0:
initpct = 99.0
@@ -1039,7 +1039,7 @@ class SMMClient(object):
complete = False
tries = 0
while not complete:
ipmisession.Session.pause(3)
await ipmisession.Session.pause(3)
wc.request('POST', '/data', 'get=fwProgress,fwUpdate')
try:
rsp = wc.getresponse()
+7 -3
View File
@@ -1586,6 +1586,10 @@ class Command(object):
return await oem.apply_license(filename, self, progress, data)
if __name__ == '__main__':
print(repr(
Command(sys.argv[1], os.environ['BMCUSER'], os.environ['BMCPASS'],
verifycallback=lambda x: True).get_power()))
async def main():
cmd = await Command.create(
sys.argv[1], os.environ['BMCUSER'], os.environ['BMCPASS'],
verifycallback=lambda x: True)
print(repr(await cmd.get_power()))
asyncio.run(main())