2
0
mirror of https://github.com/xcat2/confluent.git synced 2026-04-12 20:01:30 +00:00

Fix openbmc console method with async

This commit is contained in:
Jarrod Johnson
2026-02-25 16:14:51 -05:00
parent 2f2afd970a
commit 36898ba570
2 changed files with 1 additions and 68 deletions

View File

@@ -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,

View File

@@ -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(