feat: Authentik login + switchable GPU prod target

Add OIDC auth for Command Center and runtime GPU endpoint selection
pointed at atc-gpu-prod (10.0.10.106), matching what is currently deployed.
This commit is contained in:
mo
2026-07-21 23:20:24 +00:00
parent f36c8906bc
commit 9008fbd512
31 changed files with 4667 additions and 139 deletions
+28 -6
View File
@@ -17,6 +17,14 @@ from database_inventory import collect_database_inventory
from node_registry import NODE_REGISTRY
DOCKHAND_URL = os.getenv("DOCKHAND_URL", "http://10.0.21.45:8082")
DOCKHAND_API_TOKEN = os.getenv("DOCKHAND_API_TOKEN", "")
def _dockhand_headers() -> dict[str, str]:
if DOCKHAND_API_TOKEN:
return {"Authorization": f"Bearer {DOCKHAND_API_TOKEN}"}
return {}
HDFS_NN_URL = os.getenv("HDFS_NN_URL", "http://10.0.21.61:9870")
LAKEHOUSE_HOST = os.getenv("LAKEHOUSE_HOST", "10.0.21.50")
AIRFLOW_URL = os.getenv("AIRFLOW_URL", "http://10.0.21.55:8080")
@@ -24,7 +32,12 @@ KAFKA_UI_URL = os.getenv("KAFKA_UI_URL", "http://10.0.21.36:9000")
KAFKA_CONNECT_URL = os.getenv("KAFKA_CONNECT_URL", f"http://{LAKEHOUSE_HOST}:8083")
TRINO_URL = os.getenv("TRINO_URL", f"http://{LAKEHOUSE_HOST}:8089")
SPARK_UI_URL = os.getenv("SPARK_UI_URL", f"http://{LAKEHOUSE_HOST}:8080")
GPU_URL = os.getenv("GPU_URL", "http://10.0.20.106:9000")
try:
from gpu_config import get_gpu_urls as _get_gpu_urls
except Exception:
_get_gpu_urls = None # type: ignore
GPU_URL = os.getenv("GPU_URL", "http://10.0.10.106:9000")
OBJECTSCALE_URL = os.getenv("OBJECTSCALE_URL", "http://10.0.20.111:9020")
YARN_URL = os.getenv("YARN_URL", "http://10.0.21.62:8088")
@@ -110,7 +123,7 @@ async def dockhand_containers(
await _log(log, "cmd", "fetch", f"$ GET {url}")
t0 = time.monotonic()
try:
r = await client.get(f"{DOCKHAND_URL}/api/containers", params={"env": env_id}, timeout=8.0)
r = await client.get(f"{DOCKHAND_URL}/api/containers", params={"env": env_id}, headers=_dockhand_headers(), timeout=8.0)
ms = int((time.monotonic() - t0) * 1000)
r.raise_for_status()
data = r.json()
@@ -407,11 +420,20 @@ async def collect_objectscale(client: httpx.AsyncClient, log: TerminalLogFn | No
async def collect_gpu_metrics(client: httpx.AsyncClient, log: TerminalLogFn | None = None) -> dict[str, Any]:
await _log(log, "info", "fetch", "▸ GPU Lab metrics")
base = {"ok": False, "host": GPU_URL, "ui_url": GPU_URL}
gpu_url = GPU_URL
host = GPU_URL
if _get_gpu_urls is not None:
try:
u = _get_gpu_urls()
gpu_url = u["gpu_url"]
host = u["host"]
except Exception:
pass
await _log(log, "info", "fetch", f"▸ GPU Lab metrics @ {host}")
base = {"ok": False, "host": host, "ui_url": gpu_url}
try:
metrics_url = f"{GPU_URL}/api/gpu/metrics"
model_url = f"{GPU_URL}/api/active-model"
metrics_url = f"{gpu_url}/api/gpu/metrics"
model_url = f"{gpu_url}/api/active-model"
await _log(log, "cmd", "fetch", f"$ GET {metrics_url}")
await _log(log, "cmd", "fetch", f"$ GET {model_url}")
t0 = time.monotonic()