merge testing->tomerge/main #7

Open
anti wants to merge 242 commits from testing into tomerge/main
12 changed files with 64 additions and 3 deletions
Showing only changes of commit 8a2876fe86 - Show all commits

View File

@@ -15,6 +15,7 @@ router = APIRouter()
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
404: {"description": "Attacker not found"},
422: {"description": "Query parameter validation error (limit/offset out of range or invalid)"},
},
)
@_traced("api.get_attacker_commands")

View File

@@ -11,7 +11,12 @@ router = APIRouter()
@router.post(
"/deckies/{decky_name}/mutate",
tags=["Fleet Management"],
responses={401: {"description": "Could not validate credentials"}, 403: {"description": "Insufficient permissions"}, 404: {"description": "Decky not found"}}
responses={
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
404: {"description": "Decky not found"},
422: {"description": "Path parameter validation error (decky_name must match ^[a-z0-9\\-]{1,64}$)"},
}
)
@_traced("api.mutate_decky")
async def api_mutate_decky(

View File

@@ -29,7 +29,11 @@ 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"}},
responses={
400: {"description": "Bad Request (malformed JSON body)"},
409: {"description": "A worker with this name is already enrolled"},
422: {"description": "Request body validation error"},
},
)
async def api_enroll_host(
req: SwarmEnrollRequest,

View File

@@ -101,8 +101,10 @@ async def _verify_peer_matches_host(
status_code=204,
tags=["Swarm Health"],
responses={
400: {"description": "Bad Request (malformed JSON body)"},
403: {"description": "Peer cert missing, or its fingerprint does not match the host's pinned cert"},
404: {"description": "host_uuid is not enrolled"},
422: {"description": "Request body validation error"},
},
)
async def heartbeat(

View File

@@ -25,7 +25,11 @@ router = APIRouter()
"/teardown",
response_model=SwarmDeployResponse,
tags=["Swarm Deployments"],
responses={404: {"description": "A targeted host does not exist"}},
responses={
400: {"description": "Bad Request (malformed JSON body)"},
404: {"description": "A targeted host does not exist"},
422: {"description": "Request body validation error"},
},
)
async def api_teardown_swarm(
req: SwarmTeardownRequest,

View File

@@ -24,6 +24,12 @@ router = APIRouter()
"/hosts/{uuid}",
status_code=status.HTTP_204_NO_CONTENT,
tags=["Swarm Management"],
responses={
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
404: {"description": "Host not found"},
422: {"description": "Path parameter validation error"},
},
)
async def decommission_host(
uuid: str,

View File

@@ -322,6 +322,13 @@ def _render_bootstrap(
response_model=EnrollBundleResponse,
status_code=status.HTTP_201_CREATED,
tags=["Swarm Management"],
responses={
400: {"description": "Bad Request (malformed JSON body)"},
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
409: {"description": "A worker with this name is already enrolled"},
422: {"description": "Request body validation error"},
},
)
async def create_enroll_bundle(
req: EnrollBundleRequest,

View File

@@ -115,6 +115,13 @@ async def _run_teardown(
response_model=TeardownHostResponse,
status_code=status.HTTP_202_ACCEPTED,
tags=["Swarm Management"],
responses={
400: {"description": "Bad Request (malformed JSON body)"},
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
404: {"description": "Host not found"},
422: {"description": "Request body or path parameter validation error"},
},
)
async def teardown_host(
uuid: str,

View File

@@ -64,6 +64,10 @@ async def _probe_host(host: dict[str, Any]) -> HostReleaseInfo:
"/hosts",
response_model=HostReleasesResponse,
tags=["Swarm Updates"],
responses={
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
},
)
async def api_list_host_releases(
admin: dict = Depends(require_admin),

View File

@@ -128,6 +128,13 @@ def _is_expected_connection_drop(exc: BaseException) -> bool:
"/push",
response_model=PushUpdateResponse,
tags=["Swarm Updates"],
responses={
400: {"description": "Bad Request (malformed JSON body or conflicting host_uuids/all flags)"},
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
404: {"description": "No matching target hosts or no updater-capable hosts enrolled"},
422: {"description": "Request body validation error"},
},
)
async def api_push_update(
req: PushUpdateRequest,

View File

@@ -68,6 +68,13 @@ async def _push_self_one(host: dict[str, Any], tarball: bytes, sha: str) -> Push
"/push-self",
response_model=PushUpdateResponse,
tags=["Swarm Updates"],
responses={
400: {"description": "Bad Request (malformed JSON body or conflicting host_uuids/all flags)"},
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
404: {"description": "No matching target hosts or no updater-capable hosts enrolled"},
422: {"description": "Request body validation error"},
},
)
async def api_push_update_self(
req: PushUpdateRequest,

View File

@@ -23,6 +23,13 @@ router = APIRouter()
"/rollback",
response_model=RollbackResponse,
tags=["Swarm Updates"],
responses={
400: {"description": "Bad Request (malformed JSON body or host has no updater bundle)"},
401: {"description": "Could not validate credentials"},
403: {"description": "Insufficient permissions"},
404: {"description": "Unknown host, or no previous release slot on the worker"},
422: {"description": "Request body validation error"},
},
)
async def api_rollback_host(
req: RollbackRequest,