fix(routes): added undocumented responses

This commit is contained in:
2026-04-20 01:23:07 -04:00
parent 4abfac1a98
commit 5b70a34c94
8 changed files with 52 additions and 6 deletions

View File

@@ -18,7 +18,17 @@ from .api_check_hosts import router as check_hosts_router
from .api_heartbeat import router as heartbeat_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
swarm_router.include_router(enroll_host_router)

View File

@@ -26,6 +26,7 @@ router = APIRouter()
"/hosts/{uuid}",
status_code=status.HTTP_204_NO_CONTENT,
tags=["Swarm Hosts"],
responses={404: {"description": "No host with this UUID is enrolled"}},
)
async def api_decommission_host(
uuid: str,

View File

@@ -135,7 +135,15 @@ async def dispatch_decnet_config(
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(
req: SwarmDeployRequest,
repo: BaseRepository = Depends(get_repo),

View File

@@ -29,6 +29,7 @@ router = APIRouter()
response_model=SwarmEnrolledBundle,
status_code=status.HTTP_201_CREATED,
tags=["Swarm Hosts"],
responses={409: {"description": "A worker with this name is already enrolled"}},
)
async def api_enroll_host(
req: SwarmEnrollRequest,

View File

@@ -10,7 +10,12 @@ from decnet.web.db.models import SwarmHostView
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(
uuid: str,
repo: BaseRepository = Depends(get_repo),

View File

@@ -96,7 +96,15 @@ async def _verify_peer_matches_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(
req: HeartbeatRequest,
request: Request,

View File

@@ -21,7 +21,12 @@ log = get_logger("swarm.teardown")
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(
req: SwarmTeardownRequest,
repo: BaseRepository = Depends(get_repo),