mirror of
https://github.com/xcat2/confluent.git
synced 2026-09-21 16:39:32 +00:00
Fix hardware management async dispatch
This commit is contained in:
@@ -163,7 +163,7 @@ class PDUClient(object):
|
||||
self.wc.grab_response('/logout_wait.htm')
|
||||
|
||||
async def get_outlet(self, outlet):
|
||||
rsp = await self.wc.grab_response('/setting_admin4.xml')
|
||||
rsp = self.wc.grab_response('/setting_admin4.xml')
|
||||
xd = fromstring(rsp[0])
|
||||
for ch in xd:
|
||||
if 'relay' not in ch.tag:
|
||||
@@ -177,7 +177,7 @@ class PDUClient(object):
|
||||
outlet = int(outlet)
|
||||
ident = self.map_outlets[outlet]
|
||||
sitem = '/SetParm?item={}?content={}'.format(ident, state)
|
||||
await self.wc.grab_response(sitem)
|
||||
self.wc.grab_response(sitem)
|
||||
|
||||
async def retrieve(nodes, element, configmanager, inputdata):
|
||||
if 'outlets' not in element:
|
||||
|
||||
@@ -554,16 +554,16 @@ class IpmiHandler:
|
||||
if (self.error == 'timeout' or
|
||||
'Insufficient resources' in self.error):
|
||||
self.error = self.error.replace(' reported in RAKP4', '')
|
||||
self.output.put(msg.ConfluentTargetTimeout(
|
||||
await self.output.put(msg.ConfluentTargetTimeout(
|
||||
self.node, self.error))
|
||||
return
|
||||
elif 'Invalid Session ID' in self.error:
|
||||
self.output.put(msg.ConfluentTargetTimeout(
|
||||
await self.output.put(msg.ConfluentTargetTimeout(
|
||||
self.node, 'Temporary Login Error'))
|
||||
return
|
||||
elif ('Unauthorized' in self.error or
|
||||
'Incorrect password' in self.error):
|
||||
self.output.put(
|
||||
await self.output.put(
|
||||
msg.ConfluentTargetInvalidCredentials(self.node))
|
||||
return
|
||||
else:
|
||||
@@ -708,7 +708,7 @@ class IpmiHandler:
|
||||
if tmpvarbind.endswith('3183.1.1'):
|
||||
varbinddata = inputdata[tmpvarbind]
|
||||
varbinddata = hex2bin(varbinddata)
|
||||
event = self.ipmicmd.decode_pet(specifictrap, varbinddata)
|
||||
event = await self.ipmicmd.decode_pet(specifictrap, varbinddata)
|
||||
self.pyghmi_event_to_confluent(event)
|
||||
await self.output.put(msg.EventCollection((event,), name=self.node))
|
||||
|
||||
@@ -1007,7 +1007,7 @@ class IpmiHandler:
|
||||
if activeupdates:
|
||||
await self.output.put(msg.KeyValueData({'status': 'active'}, self.node))
|
||||
else:
|
||||
status = self.ipmicmd.get_update_status()
|
||||
status = await self.ipmicmd.get_update_status()
|
||||
await self.output.put(msg.KeyValueData({'status': status}, self.node))
|
||||
|
||||
async def handle_inventory(self):
|
||||
@@ -1025,12 +1025,12 @@ class IpmiHandler:
|
||||
|
||||
async def list_leds(self):
|
||||
await self.output.put(msg.ChildCollection('all'))
|
||||
for category, info in self.ipmicmd.get_leds():
|
||||
async for category, info in self.ipmicmd.get_leds():
|
||||
await self.output.put(msg.ChildCollection(simplify_name(category)))
|
||||
|
||||
async def read_leds(self, component):
|
||||
led_categories = []
|
||||
for category, info in self.ipmicmd.get_leds():
|
||||
async for category, info in self.ipmicmd.get_leds():
|
||||
if component == 'all' or component == simplify_name(category):
|
||||
led_categories.append({category: info})
|
||||
await self.output.put(msg.LEDStatus(led_categories, self.node))
|
||||
@@ -1054,7 +1054,7 @@ class IpmiHandler:
|
||||
await self.make_inventory_map()
|
||||
compname = self.invmap.get(component, None)
|
||||
if compname is None:
|
||||
self.output.put(msg.ConfluentTargetNotFound())
|
||||
await self.output.put(msg.ConfluentTargetNotFound())
|
||||
return
|
||||
invdata = await self.ipmicmd.get_inventory_of_component(compname)
|
||||
if invdata is None:
|
||||
@@ -1118,7 +1118,7 @@ class IpmiHandler:
|
||||
if len(storelem) < 2 or storelem[0] != 'volumes':
|
||||
raise exc.InvalidArgumentException('Must target a specific volume')
|
||||
volname = storelem[-1]
|
||||
curr = self.ipmicmd.get_storage_configuration()
|
||||
curr = await self.ipmicmd.get_storage_configuration()
|
||||
volumes = []
|
||||
volsfound = False
|
||||
toremove = storage.ConfigSpec(arrays=[storage.Array(volumes=volumes)])
|
||||
@@ -1131,7 +1131,7 @@ class IpmiHandler:
|
||||
await self.output.put(msg.ConfluentTargetNotFound(
|
||||
self.node, "No volume named '{0}' found".format(volname)))
|
||||
return
|
||||
self.ipmicmd.remove_storage_configuration(toremove)
|
||||
await self.ipmicmd.remove_storage_configuration(toremove)
|
||||
await self.output.put(msg.DeletedResource(volname))
|
||||
|
||||
async def _create_storage(self, storelem):
|
||||
@@ -1139,7 +1139,7 @@ class IpmiHandler:
|
||||
raise exc.InvalidArgumentException('Can only create volumes')
|
||||
vols = []
|
||||
thedisks = None
|
||||
currcfg = self.ipmicmd.get_storage_configuration()
|
||||
currcfg = await self.ipmicmd.get_storage_configuration()
|
||||
currnames = []
|
||||
for arr in currcfg.arrays:
|
||||
arrname = '{0}-{1}'.format(*arr.id)
|
||||
@@ -1345,7 +1345,7 @@ class IpmiHandler:
|
||||
|
||||
async def list_sensors(self):
|
||||
try:
|
||||
sensors = await self.ipmicmd.get_sensor_descriptions()
|
||||
sensors = [sensor async for sensor in self.ipmicmd.get_sensor_descriptions()]
|
||||
except pygexc.IpmiException:
|
||||
await self.output.put(msg.ConfluentTargetTimeout(self.node))
|
||||
return
|
||||
@@ -1760,4 +1760,3 @@ def delete(nodes, element, configmanager, inputdata):
|
||||
element, type='ffdc')
|
||||
return perform_requests(
|
||||
'delete', nodes, element, configmanager, inputdata, 'delete')
|
||||
|
||||
|
||||
@@ -71,9 +71,10 @@ async def readpdu(pdu, outletmap, configmanager, rspq):
|
||||
for outlet in outletmap:
|
||||
node, pgroup = outletmap[outlet]
|
||||
try:
|
||||
for rsp in core.handle_path(
|
||||
responses = await core.handle_path(
|
||||
'/nodes/{0}/power/outlets/{1}'.format(pdu, outlet),
|
||||
'retrieve', configmanager):
|
||||
'retrieve', configmanager)
|
||||
async for rsp in core.iterate_responses(responses):
|
||||
await rspq.put(msg.KeyValueData({pgroup: rsp.kvpairs['state']['value']}, node))
|
||||
except exc.TargetEndpointBadCredentials:
|
||||
await rspq.put(msg.ConfluentTargetInvalidCredentials(pdu))
|
||||
@@ -137,8 +138,9 @@ async def updatepdu(pdu, outletmap, configmanager, inputdata, rspq):
|
||||
try:
|
||||
for outlet in outletmap:
|
||||
node, pgroup = outletmap[outlet]
|
||||
for rsp in core.handle_path('/nodes/{0}/power/outlets/{1}'.format(pdu, outlet),
|
||||
'update', configmanager, inputdata={'state': inputdata.powerstate(node)}):
|
||||
responses = await core.handle_path('/nodes/{0}/power/outlets/{1}'.format(pdu, outlet),
|
||||
'update', configmanager, inputdata={'state': inputdata.powerstate(node)})
|
||||
async for rsp in core.iterate_responses(responses):
|
||||
await rspq.put(msg.KeyValueData({pgroup: rsp.kvpairs['state']['value']}, node))
|
||||
finally:
|
||||
await rspq.put(TaskDone())
|
||||
|
||||
@@ -399,7 +399,7 @@ class IpmiHandler:
|
||||
tenant = cfg.tenant
|
||||
if (node, tenant) not in persistent_ipmicmds:
|
||||
try:
|
||||
await persistent_ipmicmds[(node, tenant)].close_confluent()
|
||||
persistent_ipmicmds[(node, tenant)].close_confluent()
|
||||
except KeyError: # was no previous session
|
||||
pass
|
||||
try:
|
||||
@@ -830,7 +830,7 @@ class IpmiHandler:
|
||||
|
||||
async def make_sensor_map(self, sensors=None):
|
||||
if sensors is None:
|
||||
sensors = await self.ipmicmd.get_sensor_descriptions()
|
||||
sensors = self.ipmicmd.get_sensor_descriptions()
|
||||
async for sensor in sensors:
|
||||
resourcename = sensor['name']
|
||||
self.sensormap[simplify_name(resourcename)] = resourcename
|
||||
@@ -1075,7 +1075,7 @@ class IpmiHandler:
|
||||
volsfound = True
|
||||
volumes.append(vol)
|
||||
if not volsfound:
|
||||
self.output.put(msg.ConfluentTargetNotFound(
|
||||
await self.output.put(msg.ConfluentTargetNotFound(
|
||||
self.node, "No volume named '{0}' found".format(volname)))
|
||||
return
|
||||
await self.ipmicmd.remove_storage_configuration(toremove)
|
||||
@@ -1128,14 +1128,14 @@ class IpmiHandler:
|
||||
vol.status, arrname))
|
||||
return
|
||||
else:
|
||||
self._show_storage(storelem[:1] + [vol['name']])
|
||||
await self._show_storage(storelem[:1] + [vol['name']])
|
||||
|
||||
async def _update_storage(self, storelem):
|
||||
if storelem[0] == 'disks':
|
||||
if len(storelem) == 1:
|
||||
raise exc.InvalidArgumentException('Must target a disk')
|
||||
self.set_disk(storelem[-1],
|
||||
self.inputdata.inputbynode[self.node])
|
||||
await self.set_disk(storelem[-1],
|
||||
self.inputdata.inputbynode[self.node])
|
||||
await self._show_storage(storelem)
|
||||
|
||||
async def _show_storage(self, storelem):
|
||||
@@ -1292,7 +1292,7 @@ class IpmiHandler:
|
||||
|
||||
async def list_sensors(self):
|
||||
try:
|
||||
sensors = await self.ipmicmd.get_sensor_descriptions()
|
||||
sensors = [sensor async for sensor in self.ipmicmd.get_sensor_descriptions()]
|
||||
except pygexc.IpmiException:
|
||||
await self.output.put(msg.ConfluentTargetTimeout(self.node))
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user