52bf0279Observe 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 | operation |
| Method | GET |
| Path | /api/operations/{operationId} |
| Authentication | public |
| Success status | 200 |
| 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.
Path parameters#
object; fields below; unknown fields rejected
| Field path | Representation and constraints |
|---|---|
operationId | lowercase opaque UUID |
Validation#
check.object({ operationId: check.identifier })Referenced 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#
empty object; unknown fields rejected
Validation#
check.emptyReferenced 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"
}
}