Initial release of the oVirt/RHV Engine API simulator.
Stateful FastAPI lab with contract packs, Compose/Helm, Docker Hub release targets, and Pulumi coverage across all Engine series (GET/POST/PUT/DELETE/HEAD).
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
"""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}"
|
||||
Reference in New Issue
Block a user