From 36898ba570f103e977fcd3d0e69d93b61d22c0e9 Mon Sep 17 00:00:00 2001 From: Jarrod Johnson Date: Wed, 25 Feb 2026 16:14:51 -0500 Subject: [PATCH] Fix openbmc console method with async --- confluent_server/confluent/consoleserver.py | 2 +- .../confluent/plugins/console/openbmc.py | 67 ------------------- 2 files changed, 1 insertion(+), 68 deletions(-) diff --git a/confluent_server/confluent/consoleserver.py b/confluent_server/confluent/consoleserver.py index a689fb62..9400ac91 100644 --- a/confluent_server/confluent/consoleserver.py +++ b/confluent_server/confluent/consoleserver.py @@ -392,7 +392,7 @@ class ConsoleHandler(object): self.resize(width=self.initsize[0], height=self.initsize[1]) await self._console.connect(self.get_console_output) except exc.TargetEndpointBadCredentials: - self.clearbuffer() + await self.clearbuffer() self.error = 'badcredentials' self.connectstate = 'unconnected' await self._send_rcpts({'connectstate': self.connectstate, diff --git a/confluent_server/confluent/plugins/console/openbmc.py b/confluent_server/confluent/plugins/console/openbmc.py index a4ee9002..bf0c0076 100644 --- a/confluent_server/confluent/plugins/console/openbmc.py +++ b/confluent_server/confluent/plugins/console/openbmc.py @@ -30,13 +30,6 @@ import aiohmi.redfish.command as rcmd import aiohmi.util.webclient as webclient import aiohttp -try: - raise Exception('TODO: Migrate to aiohttp websocket') - websocket = eventlet.import_patched('websocket') - wso = websocket.WebSocket -except Exception: - wso = object - class CustomVerifier(aiohttp.Fingerprint): def __init__(self, verifycallback): self._certverify = verifycallback @@ -74,54 +67,6 @@ _configattributes = ('secret.hardwaremanagementuser', 'secret.hardwaremanagementpassword', 'hardwaremanagement.manager') -class WrappedWebSocket(wso): - - def set_verify_callback(self, callback): - self._certverify = callback - - def connect(self, url, **options): - add_tls = url.startswith('wss://') - if add_tls: - hostname, port, resource, _ = websocket._url.parse_url(url) - if hostname[0] != '[' and ':' in hostname: - hostname = '[{0}]'.format(hostname) - if resource[0] != '/': - resource = '/{0}'.format(resource) - url = 'ws://{0}:443{1}'.format(hostname,resource) - else: - return super(WrappedWebSocket, self).connect(url, **options) - self.sock_opt.timeout = options.get('timeout', self.sock_opt.timeout) - self.sock, addrs = websocket._http.connect(url, self.sock_opt, websocket._http.proxy_info(**options), - options.pop('socket', None)) - self.sock = ssl.wrap_socket(self.sock, cert_reqs=ssl.CERT_NONE) - # The above is supersedeed by the _certverify, which provides - # known-hosts style cert validaiton - bincert = self.sock.getpeercert(binary_form=True) - if not self._certverify(bincert): - raise pygexc.UnrecognizedCertificate('Unknown certificate', bincert) - try: - try: - self.handshake_response = websocket._handshake.handshake(self.sock, *addrs, **options) - except TypeError: - self.handshake_response = websocket._handshake.handshake(self.sock, url, *addrs, **options) - if self.handshake_response.status in websocket._handshake.SUPPORTED_REDIRECT_STATUSES: - options['redirect_limit'] = options.pop('redirect_limit', 3) - 1 - if options['redirect_limit'] < 0: - raise Exception('Redirect limit hit') - url = self.handshake_response.headers['location'] - self.sock.close() - return self.connect(url, **options) - self.connected = True - except: - if self.sock: - self.sock.close() - self.sock = None - raise - - - - - class OpenBmcConsole(conapi.Console): @@ -157,18 +102,6 @@ class OpenBmcConsole(conapi.Console): except asyncio.CancelledError: pass - def recvdata(self): - while self.connected: - try: - pendingdata = self.ws.recv() - except websocket.WebSocketConnectionClosedException: - pendingdata = '' - if pendingdata == '': - self.datacallback(conapi.ConsoleEvent.Disconnect) - return - self.datacallback(pendingdata) - - async def connect(self, callback): self.datacallback = callback kv = util.TLSCertVerifier(