Allow connection to ws console over IPv6

This commit is contained in:
grossmj 2023-08-02 18:29:01 +10:00
parent 1d59afa9fb
commit 11f51b3809

View File

@ -20,6 +20,7 @@ API routes for nodes.
import aiohttp import aiohttp
import asyncio import asyncio
import ipaddress
from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect, Request, Response, status from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect, Request, Response, status
from fastapi.encoders import jsonable_encoder from fastapi.encoders import jsonable_encoder
@ -399,8 +400,18 @@ async def ws_console(websocket: WebSocket, node: Node = Depends(dep_node)) -> No
log.info( log.info(
f"New client {websocket.client.host}:{websocket.client.port} has connected to controller console WebSocket" f"New client {websocket.client.host}:{websocket.client.port} has connected to controller console WebSocket"
) )
compute_host = compute.host
try:
# handle IPv6 address
ip = ipaddress.ip_address(compute_host)
if isinstance(ip, ipaddress.IPv6Address):
compute_host = '[' + compute_host + ']'
except ValueError:
pass
ws_console_compute_url = ( ws_console_compute_url = (
f"ws://{compute.host}:{compute.port}/v3/compute/projects/" f"ws://{compute_host}:{compute.port}/v3/compute/projects/"
f"{node.project.id}/{node.node_type}/nodes/{node.id}/console/ws" f"{node.project.id}/{node.node_type}/nodes/{node.id}/console/ws"
) )