52bf0279Request lifecycle operation#
Private controller API. Call this route through the user’s Unix socket, locally or over SSH. It is not exposed on the server’s public origin.
| Property | Value |
|---|---|
| Service | fleetd |
| Operation | operate |
| Method | POST |
| Path | /api/operations |
| Authentication | public |
| Success status | 202 |
| Response data | Unpaginated value |
| Request format | json |
| Maximum request body | 1048576 bytes (service default) |
| Permission codes | None declared |
Listed permission codes are alternatives, not token scopes. The service also checks access to the requested records and rejects stale revisions or controller generations.
HTTP 202 means the request was accepted for processing. Check the operation’s status to find out whether it completed.
Path parameters#
empty object; unknown fields rejected
Validation#
check.emptyReferenced definitions:
Query parameters#
custom validation:
none
; see function below
Query parameters are URL text. The validation function below specifies their format, defaults and combinations. Pagination applies only to operations that use it.
Additional checks#
The following checks apply in addition to the field limits.
Constraint on value:
export function none(input: unknown) {
const parsed = listQuery([])(input);
return parsed.ok ? success({}) : parsed;
}Validation#
noneReferenced definitions:
Request body#
object; fields below; unknown fields rejected; constraint: Only an explicit software update supplies its installed release directory (
operationInput
)
| Field path | Representation and constraints |
|---|---|
operationId | lowercase opaque UUID |
target | object; fields below; unknown fields rejected (
target
) |
target.kind | fleet or agent or daemon |
target.fleetId | lowercase opaque UUID; optional property |
target.instanceKey | lowercase name; pattern [a-z][a-z0-9-]{0,39}; optional property |
action | enroll or start or stop or reset or update |
expectedRevision | exact JSON integer; 0…9007199254740991 |
releaseDirectory | string; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; constraint: Release directory must be an absolute normalized path (
releaseDirectory
); optional property |
Additional checks#
The following checks apply in addition to the field limits.
Constraint on object:
value => (value.action === 'update') === (value.releaseDirectory !== undefined)Constraint on releaseDirectory:
value => value.startsWith('/') && !value.includes('\\')
&& value.split('/').slice(1).every(segment => segment && segment !== '.' && segment !== '..')Validation#
operationInputReferenced definitions:
Response data#
object; fields below; unknown fields rejected; constraint: Only an explicit software update supplies its installed release directory (
operationView
)
| Field path | Representation and constraints |
|---|---|
operationId | lowercase opaque UUID |
target | object; fields below; unknown fields rejected (
target
) |
target.kind | fleet or agent or daemon |
target.fleetId | lowercase opaque UUID; optional property |
target.instanceKey | lowercase name; pattern [a-z][a-z0-9-]{0,39}; optional property |
action | enroll or start or stop or reset or update |
expectedRevision | exact JSON integer; 0…9007199254740991 |
releaseDirectory | string; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; constraint: Release directory must be an absolute normalized path (
releaseDirectory
); optional property |
receiptPending | custom validation; see function below; optional property |
status | accepted or running or awaiting-approval or succeeded or failed |
createdAt | exact JSON integer; 0…9007199254740991 |
completedAt | exact JSON integer; 0…9007199254740991; JSON null permitted |
approval | object; fields below; unknown fields rejected; JSON null permitted |
approval.url | string; 1–2048 UTF-16 units; well-formed Unicode; no C0/DEL controls |
approval.code | string; 12–12 UTF-16 units; well-formed Unicode; no C0/DEL controls |
errors | array; 0–100 entries; item: object; fields below; unknown fields rejected |
errors[].instanceKey | lowercase name; pattern [a-z][a-z0-9-]{0,39}; JSON null permitted |
errors[].code | string; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls |
errors[].message | string; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls |
Additional checks#
The following checks apply in addition to the field limits.
Constraint on object:
value => (value.action === 'update') === (value.releaseDirectory !== undefined)Constraint on releaseDirectory:
value => value.startsWith('/') && !value.includes('\\')
&& value.split('/').slice(1).every(segment => segment && segment !== '.' && segment !== '..')Constraint on receiptPending:
input => input === true ? success(true) : failure('invalid', 'Only unacknowledged controller requests are pinned')Validation#
operationViewReferenced definitions:
Response envelope#
A successful JSON response contains data and meta. Replace the data placeholder below with the response fields described above. Errors contain error instead of data.
{
"data": "<value matching the response-data validator>",
"meta": {
"requestId": "00000000-0000-0000-0000-000000000001"
}
}