diff --git a/confluent_server/confluent/core.py b/confluent_server/confluent/core.py index 37edd367..c17debc5 100644 --- a/confluent_server/confluent/core.py +++ b/confluent_server/confluent/core.py @@ -81,9 +81,10 @@ except NameError: async def iterate_responses(responses): # normalize plugin behaviors - # some might have an async Generator - # some might be a traditional generator - # others might return an awaitable generator + # First, take care of whatever potentially nested levels of awaitables + # Then handle async generators, generators, then just general iterable types + while inspect.isawaitable(responses): + responses = await responses if inspect.isasyncgen(responses): async for rsp in responses: yield rsp @@ -92,14 +93,6 @@ async def iterate_responses(responses): for rsp in responses: yield rsp return - elif inspect.isawaitable(responses): - responses = await responses - if inspect.isasyncgen(responses): - async for rsp in responses: - yield rsp - return - if inspect.isawaitable(responses): - responses = await responses for rsp in responses: yield rsp diff --git a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py index 91f266f6..7a6ba666 100644 --- a/confluent_server/confluent/plugins/hardwaremanagement/redfish.py +++ b/confluent_server/confluent/plugins/hardwaremanagement/redfish.py @@ -532,21 +532,21 @@ class IpmiHandler: elif self.element[1:3] == ['management_controller', 'ntp']: return self.handle_ntp() elif self.element[1:4] == ['management_controller', 'extended', 'all']: - return self.handle_bmcconfig() + return await self.handle_bmcconfig() elif self.element[1:4] == ['management_controller', 'extended', 'advanced']: - return self.handle_bmcconfig(True) + return await self.handle_bmcconfig(True) elif self.element[1:4] == ['management_controller', 'extended', 'extra']: - return self.handle_bmcconfig(advanced=False, extended=True) + return await self.handle_bmcconfig(advanced=False, extended=True) elif self.element[1:4] == ['management_controller', 'extended', 'extra_advanced']: - return self.handle_bmcconfig(advanced=True, extended=True) + return await self.handle_bmcconfig(advanced=True, extended=True) elif self.element[1:3] == ['system', 'all']: - return self.handle_sysconfig() + return await self.handle_sysconfig() elif self.element[1:3] == ['system', 'advanced']: - return self.handle_sysconfig(True) + return await self.handle_sysconfig(True) elif self.element[1:3] == ['system', 'clear']: - return self.handle_sysconfigclear() + return await self.handle_sysconfigclear() elif self.element[1:3] == ['management_controller', 'clear']: - return self.handle_bmcconfigclear() + return await self.handle_bmcconfigclear() elif self.element[1:3] == ['management_controller', 'licenses']: return await self.handle_licenses() elif self.element[1:3] == ['management_controller', 'save_licenses']: diff --git a/confluent_server/confluent/syncfiles.py b/confluent_server/confluent/syncfiles.py index f9dadd6d..2c7edf96 100644 --- a/confluent_server/confluent/syncfiles.py +++ b/confluent_server/confluent/syncfiles.py @@ -191,7 +191,7 @@ async def sync_list_to_node(sl, node, suffixes, peerip=None): for ent in sl.appendoncemap: stage_ent(sl.appendoncemap, ent, os.path.join(targdir, suffixes['appendonce']), True) - sshutil.prep_ssh_key('/etc/confluent/ssh/automation') + await sshutil.prep_ssh_key('/etc/confluent/ssh/automation') targip = node if peerip: targip = peerip