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,94 @@
|
||||
"""OpenAPI tag resolution for Engine API and simulator routes."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
_COLLECTION_LABELS: dict[str, str] = {
|
||||
"vms": "VMs",
|
||||
"disks": "Disks",
|
||||
"hosts": "Hosts",
|
||||
"clusters": "Clusters",
|
||||
"datacenters": "Data Centers",
|
||||
"networks": "Networks",
|
||||
"vnicprofiles": "vNIC Profiles",
|
||||
"storagedomains": "Storage Domains",
|
||||
"storageconnections": "Storage Connections",
|
||||
"templates": "Templates",
|
||||
"users": "Users",
|
||||
"groups": "Groups",
|
||||
"roles": "Roles",
|
||||
"permissions": "Permissions",
|
||||
"domains": "Domains",
|
||||
"events": "Events",
|
||||
"jobs": "Jobs",
|
||||
"tags": "Tags",
|
||||
"bookmarks": "Bookmarks",
|
||||
"affinitylabels": "Affinity Labels",
|
||||
"instancetypes": "Instance Types",
|
||||
"macpools": "MAC Pools",
|
||||
"schedulingpolicies": "Scheduling Policies",
|
||||
"schedulingpolicyunits": "Scheduling Policy Units",
|
||||
"clusterlevels": "Cluster Levels",
|
||||
"icons": "Icons",
|
||||
"operatingsystems": "Operating Systems",
|
||||
"networkfilters": "Network Filters",
|
||||
"vmpools": "VM Pools",
|
||||
"katelloerrata": "Katello Errata",
|
||||
"externalhostproviders": "External Host Providers",
|
||||
"openstacknetworkproviders": "OpenStack Network Providers",
|
||||
"openstackimageproviders": "OpenStack Image Providers",
|
||||
"openstackvolumeproviders": "OpenStack Volume Providers",
|
||||
"imagetransfers": "Image Transfers",
|
||||
"options": "Options",
|
||||
}
|
||||
|
||||
|
||||
def contract_openapi_tag(path: str) -> str:
|
||||
"""Map an Engine API path to a Swagger UI category."""
|
||||
|
||||
parts = [part for part in path.strip("/").split("/") if part]
|
||||
if parts[:2] == ["ovirt-engine", "api"]:
|
||||
parts = parts[2:]
|
||||
if parts and parts[0] in {"v3", "v4"}:
|
||||
parts = parts[1:]
|
||||
if not parts:
|
||||
return "engine"
|
||||
root = parts[0]
|
||||
return _COLLECTION_LABELS.get(root, root.replace("-", " ").title())
|
||||
|
||||
|
||||
def contract_openapi_tags(path: str, renderer: str | None = None) -> list[str]:
|
||||
"""Return OpenAPI tags for a contract route.
|
||||
|
||||
``renderer`` is accepted for call-site compatibility; Engine API has a
|
||||
single representation surface.
|
||||
"""
|
||||
|
||||
del renderer
|
||||
return [contract_openapi_tag(path)]
|
||||
|
||||
|
||||
def openapi_tag_metadata() -> list[dict[str, str]]:
|
||||
"""Descriptions shown in Swagger UI for each tag group."""
|
||||
|
||||
tags: list[dict[str, str]] = [
|
||||
{
|
||||
"name": "engine",
|
||||
"description": "oVirt Engine REST API root under `/ovirt-engine/api`.",
|
||||
},
|
||||
{
|
||||
"name": "sso",
|
||||
"description": "Engine SSO OAuth2 token endpoints.",
|
||||
},
|
||||
{
|
||||
"name": "Simulator",
|
||||
"description": "Health checks, compatibility reports, and the web console.",
|
||||
},
|
||||
]
|
||||
for label in sorted(set(_COLLECTION_LABELS.values())):
|
||||
tags.append(
|
||||
{
|
||||
"name": label,
|
||||
"description": f"Engine {label} collection under `/ovirt-engine/api`.",
|
||||
}
|
||||
)
|
||||
return tags
|
||||
Reference in New Issue
Block a user