Request 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.

PropertyValue
Servicefleetd
Operationoperate
MethodPOST
Path/api/operations
Authenticationpublic
Success status202
Response dataUnpaginated value
Request formatjson
Maximum request body1048576 bytes (service default)
Permission codesNone 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.empty

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#

none

Referenced definitions:

Request body#

object; fields below; unknown fields rejected; constraint: Only an explicit software update supplies its installed release directory ( operationInput )

Field pathRepresentation and constraints
operationIdlowercase opaque UUID
targetobject; fields below; unknown fields rejected ( target )
target.kindfleet or agent or daemon
target.fleetIdlowercase opaque UUID; optional property
target.instanceKeylowercase name; pattern [a-z][a-z0-9-]{0,39}; optional property
actionenroll or start or stop or reset or update
expectedRevisionexact JSON integer; 0…9007199254740991
releaseDirectorystring; 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#

operationInput

Referenced definitions:

Response data#

object; fields below; unknown fields rejected; constraint: Only an explicit software update supplies its installed release directory ( operationView )

Field pathRepresentation and constraints
operationIdlowercase opaque UUID
targetobject; fields below; unknown fields rejected ( target )
target.kindfleet or agent or daemon
target.fleetIdlowercase opaque UUID; optional property
target.instanceKeylowercase name; pattern [a-z][a-z0-9-]{0,39}; optional property
actionenroll or start or stop or reset or update
expectedRevisionexact JSON integer; 0…9007199254740991
releaseDirectorystring; 1–4096 UTF-16 units; well-formed Unicode; no C0/DEL controls; constraint: Release directory must be an absolute normalized path ( releaseDirectory ); optional property
receiptPendingcustom validation; see function below; optional property
statusaccepted or running or awaiting-approval or succeeded or failed
createdAtexact JSON integer; 0…9007199254740991
completedAtexact JSON integer; 0…9007199254740991; JSON null permitted
approvalobject; fields below; unknown fields rejected; JSON null permitted
approval.urlstring; 1–2048 UTF-16 units; well-formed Unicode; no C0/DEL controls
approval.codestring; 12–12 UTF-16 units; well-formed Unicode; no C0/DEL controls
errorsarray; 0–100 entries; item: object; fields below; unknown fields rejected
errors[].instanceKeylowercase name; pattern [a-z][a-z0-9-]{0,39}; JSON null permitted
errors[].codestring; 1–100 UTF-16 units; well-formed Unicode; no C0/DEL controls
errors[].messagestring; 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#

operationView

Referenced 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"
  }
}