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:
@@ -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()
|
||||
|
||||
@@ -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())
|
||||
|
||||
Reference in New Issue
Block a user