cbd0adca91
Stateful FastAPI lab with contract packs, Compose/Helm, Docker Hub release targets, and Pulumi coverage across all Engine series (GET/POST/PUT/DELETE/HEAD).
38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
"""Mount oVirt Engine API + SSO onto the FastAPI application."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from fastapi import FastAPI
|
|
|
|
from app.ovirt.contract_loader import ensure_loaded
|
|
from app.ovirt.errors import OVirtError, ovirt_error_handler
|
|
from app.ovirt.registry import register_ovirt_contract_routes
|
|
from app.ovirt.routes import engine, sso
|
|
|
|
|
|
def mount_ovirt_routes(app: FastAPI, *, series: str = "4.5") -> None:
|
|
"""Register Engine REST API, SSO, and load the active series pack.
|
|
|
|
Contract operations are registered as individual OpenAPI routes.
|
|
Catch-all handlers remain as a hidden fallback.
|
|
"""
|
|
|
|
app.add_exception_handler(OVirtError, ovirt_error_handler)
|
|
app.include_router(sso.router)
|
|
|
|
rt = ensure_loaded(series)
|
|
try:
|
|
summary = rt.reload(series)
|
|
except FileNotFoundError:
|
|
summary = {"operation_count": 0, "series": series}
|
|
registered = 0
|
|
if rt.pack is not None:
|
|
registered = register_ovirt_contract_routes(app, rt.pack)
|
|
|
|
# Fallback catch-all after specific contract routes (first match wins).
|
|
app.include_router(engine.router)
|
|
|
|
app.state.ovirt_series = series
|
|
app.state.ovirt_schema_ops = registered or summary.get("operation_count", 0)
|
|
app.state.runtime_version = f"ovirt-{series}"
|