better/compute
API

rollouts

Rollouts take a registered bcd release to the nodes of the tenant's pools in waves, within each pool's disruption budget. A controller settles nodes as they report the new version, pauses the rollout when a wave's failure ratio exceeds its limit, and soaks between waves. Every method decides `compute:fleet:admin` on the fleet scope. See [Rollouts](/docs/guides/rollouts).

Rollouts take a registered bcd release to the nodes of the tenant's pools in waves, within each pool's disruption budget. A controller settles nodes as they report the new version, pauses the rollout when a wave's failure ratio exceeds its limit, and soaks between waves. Every method decides compute:fleet:admin on the fleet scope. See Rollouts.

All 6 methods are served by this release.

MethodKindAuthorizationPhaseStatus
createmutationcompute:fleet:admin @ compute-fleetv0.4registered
listreadcompute:fleet:admin @ compute-fleetv0.4registered
getreadcompute:fleet:admin @ compute-fleetv0.4registered
pausemutationcompute:fleet:admin @ compute-fleetv0.4registered
resumemutationcompute:fleet:admin @ compute-fleetv0.4registered
abortmutationcompute:fleet:admin @ compute-fleetv0.4registered

create

POST /api/compute/rollouts/create

Plans a rollout of a registered release to every node that runs bcd in the tenant's pools, or in poolIds, and starts it; returns the rollout in running.

  • Plan. Nodes are shuffled by a hash of the rollout id and assigned to waves, cumulative percentages that must increase and end at 100 (default 1, 10, 50, 100). The other gates default to maxFailureRatio 0.05, soakSeconds 600 and upgradeTimeoutSeconds 900. Nodes that already report the version start as succeeded.

  • Idempotency. idempotencyKey is optional. With a key, the rollout id derives from the tenant, the caller and the key: a repeat for the same version returns the existing rollout, and another version under the key is CONFLICT.

  • Errors. NOT_FOUND when the version is not registered or a listed pool is not an unarchived pool of the tenant. INVALID_STATE when no node in scope runs bcd yet. CONFLICT with details.rolloutId when a node in scope is in another running or paused rollout. INVALID_INPUT for gates out of range.

  • Events. rollout.started; the controller later publishes rollout.wave, rollout.paused and rollout.completed.

  • Kind: mutation

  • Authorization: compute:fleet:admin @ compute-fleet

  • Module: rollout

  • Phase: v0.4 (registered)

Input

FieldTypeRequiredConstraints
tenantIdstringyesat most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$
versionstringyesmatches ^v?\d+\.\d+\.\d+([-+][0-9A-Za-z.-]+)?$
poolIdslist of string1-1000 items
waveslist of number1-10 items; default [1,10,50,100]
maxFailureRationumber0-1; default 0.05
soakSecondsnumber0-604800; default 600
upgradeTimeoutSecondsnumber60-86400; default 900
idempotencyKeystringat most 128 characters; matches ^[A-Za-z0-9._~:/+=-]{1,128}$

list

POST /api/compute/rollouts/list

Returns the tenant's 100 most recent rollouts, newest first, each with its node counts by state.

  • Kind: read
  • Authorization: compute:fleet:admin @ compute-fleet
  • Module: rollout
  • Phase: v0.4 (registered)

Input

FieldTypeRequiredConstraints
tenantIdstringyesat most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$

get

POST /api/compute/rollouts/get

Returns one rollout of the tenant with nodeList, each node's wave, state, previous version, timings and error, in rollout order.

A rollout of another tenant, or none, is NOT_FOUND.

  • Kind: read
  • Authorization: compute:fleet:admin @ compute-fleet
  • Module: rollout
  • Phase: v0.4 (registered)

Input

FieldTypeRequiredConstraints
tenantIdstringyesat most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$
rolloutIdstringyesat most 60 characters; matches ^rollout_[0-9a-hjkmnp-tv-z]{26,52}$

pause

POST /api/compute/rollouts/pause

Stops a running or paused rollout from starting more nodes and records reason (default "paused by an operator"); returns the rollout in paused.

Nodes already upgrading still settle. A completed or aborted rollout is INVALID_STATE. Publishes rollout.paused.

  • Kind: mutation
  • Authorization: compute:fleet:admin @ compute-fleet
  • Module: rollout
  • Phase: v0.4 (registered)

Input

FieldTypeRequiredConstraints
tenantIdstringyesat most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$
rolloutIdstringyesat most 60 characters; matches ^rollout_[0-9a-hjkmnp-tv-z]{26,52}$
reasonstringat most 500 characters

resume

POST /api/compute/rollouts/resume

Sets a running or paused rollout back to running, clears its reason and wakes the controller; returns the rollout.

A rollout paused by the failure gate resumes the same way. A completed or aborted rollout is INVALID_STATE. Publishes rollout.resumed.

  • Kind: mutation
  • Authorization: compute:fleet:admin @ compute-fleet
  • Module: rollout
  • Phase: v0.4 (registered)

Input

FieldTypeRequiredConstraints
tenantIdstringyesat most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$
rolloutIdstringyesat most 60 characters; matches ^rollout_[0-9a-hjkmnp-tv-z]{26,52}$

abort

POST /api/compute/rollouts/abort

Ends a running or paused rollout: nodes not yet started are skipped, and with rollback: true upgrades not yet confirmed go back to the version they ran before; returns the rollout in aborted.

  • With rollback, nodes still upgrading whose previous version is a registered release move to rolling-back, and the controller settles them. Nodes that succeeded keep the release: once a node confirmed it, bcd refuses every older binary, the one in its other slot included. Undo a bad release by publishing a newer one (a higher sequence) and rolling it out. Without rollback, nodes still upgrading are marked failed.

  • reason defaults to "aborted by an operator". A completed or aborted rollout is INVALID_STATE. Publishes rollout.aborted.

  • Kind: mutation

  • Authorization: compute:fleet:admin @ compute-fleet

  • Module: rollout

  • Phase: v0.4 (registered)

Input

FieldTypeRequiredConstraints
tenantIdstringyesat most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$
rolloutIdstringyesat most 60 characters; matches ^rollout_[0-9a-hjkmnp-tv-z]{26,52}$
reasonstringat most 500 characters
rollbackbooleandefault false

Was this page helpful?

Better Compute is created by Sean Filimon

Last updated

On this page