fix(routes): added undocumented responses
This commit is contained in:
@@ -25,7 +25,15 @@ from .swarm_updates import swarm_updates_router
|
|||||||
from .swarm_mgmt import swarm_mgmt_router
|
from .swarm_mgmt import swarm_mgmt_router
|
||||||
from .system import system_router
|
from .system import system_router
|
||||||
|
|
||||||
api_router = APIRouter()
|
api_router = APIRouter(
|
||||||
|
# Every route under /api/v1 is auth-guarded (either by an explicit
|
||||||
|
# require_* Depends or by the global auth middleware). Document 401/403
|
||||||
|
# here so the OpenAPI schema reflects reality for contract tests.
|
||||||
|
responses={
|
||||||
|
401: {"description": "Missing or invalid credentials"},
|
||||||
|
403: {"description": "Authenticated but not authorized"},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
# Authentication
|
# Authentication
|
||||||
api_router.include_router(login_router)
|
api_router.include_router(login_router)
|
||||||
|
|||||||
@@ -18,7 +18,17 @@ from .api_check_hosts import router as check_hosts_router
|
|||||||
from .api_heartbeat import router as heartbeat_router
|
from .api_heartbeat import router as heartbeat_router
|
||||||
from .api_list_deckies import router as list_deckies_router
|
from .api_list_deckies import router as list_deckies_router
|
||||||
|
|
||||||
swarm_router = APIRouter(prefix="/swarm")
|
swarm_router = APIRouter(
|
||||||
|
prefix="/swarm",
|
||||||
|
# Error responses that every swarm route can surface. Route-level
|
||||||
|
# `responses=` entries still override/extend these for route-specific
|
||||||
|
# codes (e.g. 409 on /enroll).
|
||||||
|
responses={
|
||||||
|
400: {"description": "Malformed request"},
|
||||||
|
403: {"description": "Peer cert missing or fingerprint mismatch"},
|
||||||
|
404: {"description": "Referenced host does not exist"},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
# Hosts
|
# Hosts
|
||||||
swarm_router.include_router(enroll_host_router)
|
swarm_router.include_router(enroll_host_router)
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ router = APIRouter()
|
|||||||
"/hosts/{uuid}",
|
"/hosts/{uuid}",
|
||||||
status_code=status.HTTP_204_NO_CONTENT,
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
tags=["Swarm Hosts"],
|
tags=["Swarm Hosts"],
|
||||||
|
responses={404: {"description": "No host with this UUID is enrolled"}},
|
||||||
)
|
)
|
||||||
async def api_decommission_host(
|
async def api_decommission_host(
|
||||||
uuid: str,
|
uuid: str,
|
||||||
|
|||||||
@@ -135,7 +135,15 @@ async def dispatch_decnet_config(
|
|||||||
return SwarmDeployResponse(results=list(results))
|
return SwarmDeployResponse(results=list(results))
|
||||||
|
|
||||||
|
|
||||||
@router.post("/deploy", response_model=SwarmDeployResponse, tags=["Swarm Deployments"])
|
@router.post(
|
||||||
|
"/deploy",
|
||||||
|
response_model=SwarmDeployResponse,
|
||||||
|
tags=["Swarm Deployments"],
|
||||||
|
responses={
|
||||||
|
400: {"description": "Deployment mode must be 'swarm'"},
|
||||||
|
404: {"description": "A referenced host_uuid is not enrolled"},
|
||||||
|
},
|
||||||
|
)
|
||||||
async def api_deploy_swarm(
|
async def api_deploy_swarm(
|
||||||
req: SwarmDeployRequest,
|
req: SwarmDeployRequest,
|
||||||
repo: BaseRepository = Depends(get_repo),
|
repo: BaseRepository = Depends(get_repo),
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ router = APIRouter()
|
|||||||
response_model=SwarmEnrolledBundle,
|
response_model=SwarmEnrolledBundle,
|
||||||
status_code=status.HTTP_201_CREATED,
|
status_code=status.HTTP_201_CREATED,
|
||||||
tags=["Swarm Hosts"],
|
tags=["Swarm Hosts"],
|
||||||
|
responses={409: {"description": "A worker with this name is already enrolled"}},
|
||||||
)
|
)
|
||||||
async def api_enroll_host(
|
async def api_enroll_host(
|
||||||
req: SwarmEnrollRequest,
|
req: SwarmEnrollRequest,
|
||||||
|
|||||||
@@ -10,7 +10,12 @@ from decnet.web.db.models import SwarmHostView
|
|||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get("/hosts/{uuid}", response_model=SwarmHostView, tags=["Swarm Hosts"])
|
@router.get(
|
||||||
|
"/hosts/{uuid}",
|
||||||
|
response_model=SwarmHostView,
|
||||||
|
tags=["Swarm Hosts"],
|
||||||
|
responses={404: {"description": "No host with this UUID is enrolled"}},
|
||||||
|
)
|
||||||
async def api_get_host(
|
async def api_get_host(
|
||||||
uuid: str,
|
uuid: str,
|
||||||
repo: BaseRepository = Depends(get_repo),
|
repo: BaseRepository = Depends(get_repo),
|
||||||
|
|||||||
@@ -96,7 +96,15 @@ async def _verify_peer_matches_host(
|
|||||||
return host
|
return host
|
||||||
|
|
||||||
|
|
||||||
@router.post("/heartbeat", status_code=204, tags=["Swarm Health"])
|
@router.post(
|
||||||
|
"/heartbeat",
|
||||||
|
status_code=204,
|
||||||
|
tags=["Swarm Health"],
|
||||||
|
responses={
|
||||||
|
403: {"description": "Peer cert missing, or its fingerprint does not match the host's pinned cert"},
|
||||||
|
404: {"description": "host_uuid is not enrolled"},
|
||||||
|
},
|
||||||
|
)
|
||||||
async def heartbeat(
|
async def heartbeat(
|
||||||
req: HeartbeatRequest,
|
req: HeartbeatRequest,
|
||||||
request: Request,
|
request: Request,
|
||||||
|
|||||||
@@ -21,7 +21,12 @@ log = get_logger("swarm.teardown")
|
|||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.post("/teardown", response_model=SwarmDeployResponse, tags=["Swarm Deployments"])
|
@router.post(
|
||||||
|
"/teardown",
|
||||||
|
response_model=SwarmDeployResponse,
|
||||||
|
tags=["Swarm Deployments"],
|
||||||
|
responses={404: {"description": "A targeted host does not exist"}},
|
||||||
|
)
|
||||||
async def api_teardown_swarm(
|
async def api_teardown_swarm(
|
||||||
req: SwarmTeardownRequest,
|
req: SwarmTeardownRequest,
|
||||||
repo: BaseRepository = Depends(get_repo),
|
repo: BaseRepository = Depends(get_repo),
|
||||||
|
|||||||
Reference in New Issue
Block a user