diff --git a/confluent_server/aiohmi/ipmi/oem/lenovo/handler.py b/confluent_server/aiohmi/ipmi/oem/lenovo/handler.py index d8833ed4..2999ebdf 100755 --- a/confluent_server/aiohmi/ipmi/oem/lenovo/handler.py +++ b/confluent_server/aiohmi/ipmi/oem/lenovo/handler.py @@ -360,7 +360,7 @@ class OEMHandler(generic.OEMHandler): srvs.append(ntpres['data'][129:257].rstrip('\x00')) return srvs if await self.is_fpc(): - return self.smmhandler.get_ntp_servers() + return await self.smmhandler.get_ntp_servers() if self.has_tsma: return await self.tsmahandler.get_ntp_servers() return () @@ -375,7 +375,7 @@ class OEMHandler(generic.OEMHandler): netfn=0x32, command=0xa8, data=(3, 0), timeout=15) return True if await self.is_fpc(): - self.smmhandler.set_ntp_enabled(enabled) + await self.smmhandler.set_ntp_enabled(enabled) return True if self.has_tsma: await self.tsmahandler.set_ntp_enabled(enabled) @@ -393,7 +393,7 @@ class OEMHandler(generic.OEMHandler): if not 0 <= index <= 2: raise pygexc.InvalidParameterValue( 'SMM supports indexes 0 through 2') - self.smmhandler.set_ntp_server(server, index) + await self.smmhandler.set_ntp_server(server, index) return True elif self.has_tsma: if not (0 <= index <= 1): @@ -940,7 +940,7 @@ class OEMHandler(generic.OEMHandler): name += rsp['data'][:] return name.rstrip('\x00') elif await self.is_fpc(): - return self.smmhandler.get_domain() + return await self.smmhandler.get_domain() async def set_oem_domain_name(self, name): if await self.has_tsm(): @@ -959,20 +959,20 @@ class OEMHandler(generic.OEMHandler): await self._restart_dns() return elif await self.is_fpc(): - self.smmhandler.set_domain(name) + await self.smmhandler.set_domain(name) async def set_hostname(self, hostname): if await self.has_xcc(): return await self.immhandler.set_hostname(hostname) elif await self.is_fpc(): - return self.smmhandler.set_hostname(hostname) + return await self.smmhandler.set_hostname(hostname) return await super(OEMHandler, self).set_hostname(hostname) async def get_hostname(self): if await self.has_xcc(): return await self.immhandler.get_hostname() elif await self.is_fpc(): - return self.smmhandler.get_hostname() + return await self.smmhandler.get_hostname() return await super(OEMHandler, self).get_hostname() """ Gets a remote console launcher for a Lenovo ThinkServer. diff --git a/confluent_server/aiohmi/ipmi/oem/lenovo/nextscale.py b/confluent_server/aiohmi/ipmi/oem/lenovo/nextscale.py index 0c89e825..be51f335 100644 --- a/confluent_server/aiohmi/ipmi/oem/lenovo/nextscale.py +++ b/confluent_server/aiohmi/ipmi/oem/lenovo/nextscale.py @@ -887,90 +887,84 @@ class SMMClient(object): wc.set_header('ST2', wc.st2) return wc - def set_hostname(self, hostname): - wc = self.wc - wc.request('POST', '/data', 'set=hostname:' + hostname) - rsp = wc.getresponse() - if rsp.status != 200: - raise Exception(rsp.read()) - rsp.read() - self.logout() + async def set_hostname(self, hostname): + wc = await self.wc() + rsp, status, _ = await wc.grab_response_with_status('/data', 'set=hostname:' + hostname) + if status != 200: + raise Exception(rsp) + await self.logout() - def get_hostname(self): - currinfo = self.get_netinfo() - self.logout() + async def get_hostname(self): + currinfo = await self.get_netinfo() + await self.logout() for data in currinfo.find('netConfig').findall('hostname'): return data.text - def get_netinfo(self): - wc = self.wc - wc.request('POST', '/data', 'get=hostname') - rsp = wc.getresponse() - data = rsp.read() - if rsp.status == 400: - wc.request('POST', '/data?get=hostname', '') - rsp = wc.getresponse() - data = rsp.read() - if rsp.status != 200: + async def get_netinfo(self): + wc = await self.wc() + data, status, _ = await wc.grab_response_with_status('/data', 'get=hostname') + if status == 400: + data, status, _ = await wc.grab_response_with_status('/data?get=hostname', '') + if status != 200: raise Exception(data) currinfo = fromstring(data) return currinfo - def set_domain(self, domain): - wc = self.wc - wc.request('POST', '/data', 'set=dnsDomain:' + domain) - rsp = wc.getresponse() - if rsp.status != 200: - raise Exception(rsp.read()) - rsp.read() - self.logout() + async def set_domain(self, domain): + wc = await self.wc() + rsp, status, _ = await wc.grab_response_with_status('/data', 'set=dnsDomain:' + domain) + if status != 200: + raise Exception(rsp) + await self.logout() - def get_domain(self): - currinfo = self.get_netinfo() - self.logout() + async def get_domain(self): + currinfo = await self.get_netinfo() + await self.logout() for data in currinfo.find('netConfig').findall('dnsDomain'): return data.text - def get_ntp_enabled(self, variant): - wc = self.wc - wc.request('POST', '/data', 'get=ntpOpMode') - rsp = wc.getresponse() - info = fromstring(rsp.read()) - self.logout() + async def get_ntp_enabled(self, variant): + wc = await self.wc() + rsp, status, _ = await wc.grab_response_with_status('/data', 'get=ntpOpMode') + if status != 200: + raise Exception(rsp) + info = fromstring(rsp) + await self.logout() for data in info.findall('ntpOpMode'): return data.text == '1' - def set_ntp_enabled(self, enabled): - wc = self.wc - wc.request('POST', '/data', 'set=ntpOpMode:{0}'.format( + async def set_ntp_enabled(self, enabled): + wc = await self.wc() + result, status, _ = await wc.grab_response_with_status('/data', 'set=ntpOpMode:{0}'.format( 1 if enabled else 0)) - rsp = wc.getresponse() - result = rsp.read() + if status != 200: + raise Exception(result) if not isinstance(result, str): result = result.decode('utf8') - self.logout() + await self.logout() if 'ok' not in result: raise Exception("Unrecognized result: " + result) - def set_ntp_server(self, server, index): - wc = self.wc - wc.request('POST', '/data', 'set=ntpServer{0}:{1}'.format( + async def set_ntp_server(self, server, index): + wc = await self.wc() + result, status, _ = await wc.grab_response_with_status('/data', 'set=ntpServer{0}:{1}'.format( index + 1, server)) - rsp = wc.getresponse() - result = rsp.read() + if status != 200: + raise Exception(result) if not isinstance(result, str): result = result.decode('utf8') if 'ok' not in result: raise Exception("Unrecognized result: " + result) - self.logout() + await self.logout() return True - def get_ntp_servers(self): - wc = self.wc - wc.request( - 'POST', '/data', 'get=ntpServer1,ntpServer2,ntpServer3') - rsp = wc.getresponse() - result = fromstring(rsp.read()) + async def get_ntp_servers(self): + wc = await self.wc() + rsp, status, _ = await wc.grab_response_with_status( + '/data', 'get=ntpServer1,ntpServer2,ntpServer3') + if status != 200: + raise Exception(rsp) + result = fromstring(rsp) srvs = [] for data in result.findall('ntpServer1'): srvs.append(data.text) @@ -978,7 +972,7 @@ class SMMClient(object): srvs.append(data.text) for data in result.findall('ntpServer3'): srvs.append(data.text) - self.logout() + await self.logout() return srvs async def update_firmware(self, filename, data=None, progress=None, bank=None): @@ -1095,12 +1089,14 @@ class SMMClient(object): b' \x00\xff').decode('utf8')) return psui - def logout(self): - wc = self.wc - wc.request('POST', '/data/logout', None) - rsp = wc.getresponse() - rsp.read() + async def logout(self): + wc = self._wc self._wc = None + if wc is None: + return + rsp, status, _ = await wc.grab_response_with_status('/data/logout', None, method='POST') + if status != 200: + raise Exception(rsp) async def wc(self): if (not self._wc or (self._wc.vintage