Return the current controller hostname/IP from any compute

This commit is contained in:
grossmj committed 2021-10-21 21:38:36 +10:30
1 parent dddfe7c531
commit bb15b13a9d
18 files changed
+215 -198

No files matched your search

@@ -56,6 +56,8 @@ compute_api = FastAPI(
version="v3",
)
compute_api.state.controller_host = None
@compute_api.exception_handler(ComputeError)
async def controller_error_handler(request: Request, exc: ComputeError):
@@ -21,7 +21,7 @@ API routes for capabilities
import sys
import psutil
from fastapi import APIRouter
from fastapi import APIRouter, Request
from gns3server.version import __version__
from gns3server.compute import MODULES
@@ -32,12 +32,15 @@ router = APIRouter()
@router.get("/capabilities", response_model=schemas.Capabilities)
def get_capabilities() -> dict:
def get_capabilities(request: Request) -> dict:
node_types = []
for module in MODULES:
node_types.extend(module.node_types())
# record the controller hostname or IP address
request.app.state.controller_host = request.client.host
return {
"version": __version__,
"platform": sys.platform,
+15 -4
View File
@@ -18,8 +18,9 @@ import asyncio
import signal
import os
from fastapi import APIRouter, Depends, Response, status
from fastapi import APIRouter, Depends, Request, Response, status
from fastapi.encoders import jsonable_encoder
from fastapi.routing import Mount
from typing import List
from gns3server.config import Config
@@ -41,13 +42,24 @@ router = APIRouter()
"/version",
response_model=schemas.Version,
)
def get_version() -> dict:
def get_version(request: Request) -> dict:
"""
Return the server version number.
"""
# retrieve the controller host information from the mounted
# compute subapp
controller_host = None
for route in request.app.routes:
if isinstance(route, Mount) and route.name == "compute":
controller_host = route.app.state.controller_host
local_server = Config.instance().settings.Server.local
return {"version": __version__, "local": local_server}
return {
"controller_host": controller_host,
"version": __version__,
"local": local_server
}
@router.post(
@@ -61,7 +73,6 @@ def check_version(version: schemas.Version) -> dict:
Check if version is the same as the server.
"""
print(version.version)
if version.version != __version__:
raise ControllerError(f"Client version {version.version} is not the same as server version {__version__}")
return {"version": __version__}
+1 -1
View File
@@ -78,7 +78,7 @@ def get_application() -> FastAPI:
application.add_event_handler("shutdown", tasks.create_shutdown_handler(application))
application.include_router(index.router, tags=["Index"])
application.include_router(controller.router, prefix="/v3")
application.mount("/v3/compute", compute_api)
application.mount("/v3/compute", compute_api, name="compute")
return application