Sideplane rollouts stage one provider/model target across a set of existing nodes. They reuse the signed config-apply job path; the rollout system does not write config files directly and does not restart services from the server.
A rollout selects nodes in exactly one of two ways:
selector: exact label matches such asrole=canary,zone=lab.nodeIds: explicit node IDs.
Selectors and explicit node IDs are mutually exclusive. Labels are operator-managed metadata on node records, not sidecar-reported facts. They use the same validation as node labels, and selector matching is exact key/value matching across all supplied labels.
Rollouts create sequential batches from the resolved node list. batchSize
defaults to 1, which makes the first node a canary. The rollout engine is a
pure state stepper: it advances one snapshot at a time using an injected clock,
dispatcher, and health reader. The server orchestrator persists the updated
state and dispatches jobs; it does not run live writes itself.
Each node in the active batch receives a normal signed config-apply job. The
job payload carries the rollout target provider/model, runtime type, profile,
and dry-run/live mode. live defaults to false. Live rollouts still require
the usual signing key setup and sidecar --allow-live-apply gate.
After dispatching a batch, Sideplane waits up to healthTimeout for every
node in that batch. The default timeout is five minutes.
- Dry-run rollout health means the config-apply job succeeded.
- Live rollout health means the config-apply job succeeded and the latest heartbeat shows no provider/model drift for that node.
If every node is healthy, the next batch starts. If any node fails, times out, or is offline, the rollout pauses with a reason and the failing node IDs. No later batch is dispatched while paused.
Rollout states are:
pending -> running -> paused -> completed
| -> aborted
| -> failed
Operators can pause, resume, or abort a rollout. Resume re-dispatches unfinished nodes as needed and then continues batch progression. Abort is terminal.
Automatic rollback of a failed rollout batch is intentionally out of scope.
Rollouts pause on failure so the operator can inspect job results, review
backups with sideplane backups list, and create an explicit rollback job when
that is the safest recovery path.
Primary endpoints:
POST /api/rolloutsGET /api/rolloutsGET /api/rollouts/{rolloutId}POST /api/rollouts/{rolloutId}/actions
CLI commands:
sideplane rollout createsideplane rollout listsideplane rollout statussideplane rollout pausesideplane rollout resumesideplane rollout abort