Rollouts
A rollout deploys a distribution set across many targets in stages, advancing from one group to the next only when success thresholds are met — so a bad update is caught on a small group before it reaches the whole fleet.
How it works
- You create a rollout from a FIQL target filter, a distribution set, and a number of groups. Matching targets are split evenly across the groups at creation time.
- Each group has a success threshold and an error threshold (percentages).
- Starting the rollout schedules the first group only — its targets get the DS assigned.
- A background evaluator watches each running group:
- When the error threshold is reached, the group and rollout pause.
- When the success threshold is reached, the group finishes and the next group is scheduled.
- When the last group finishes, the rollout is finished.
Creating a rollout
curl -u admin:pw -X POST localhost:8088/rest/v1/rollouts \
-H 'Content-Type: application/json' \
-d '{
"name": "fleet-1.1",
"distributionSetId": 1,
"targetFilterQuery": "controllerId==device-*",
"amountGroups": 3,
"successCondition": {"condition":"THRESHOLD","expression":"90"},
"errorCondition": {"condition":"THRESHOLD","expression":"20"}
}'
amountGroupssplits matching targets into that many groups.successCondition.expression/errorCondition.expressionare percentages (0–100). IferrorConditionis omitted, the error threshold never trips.typeis the action type every action the rollout creates inherits —forced(default),soft,timeforcedordownloadonly— withforcetimealongside it fortimeforced. A staged download-then-install is therefore adownloadonlyrollout followed by aforcedone over the same filter. An unknown type is rejected with400.
The rollout starts in ready.
Lifecycle operations
curl -u admin:pw -X POST localhost:8088/rest/v1/rollouts/1/start
curl -u admin:pw -X POST localhost:8088/rest/v1/rollouts/1/pause
curl -u admin:pw -X POST localhost:8088/rest/v1/rollouts/1/resume
curl -u admin:pw -X DELETE localhost:8088/rest/v1/rollouts/1
- start —
ready→running; schedules the first group. - pause —
running→paused; the evaluator ignores paused rollouts. - resume —
paused→running; re-evaluates immediately. - delete — cancels any active actions in the rollout and removes it.
Inspecting groups
# deploy groups with per-group status and target counts
curl -u admin:pw localhost:8088/rest/v1/rollouts/1/deploygroups
# one group
curl -u admin:pw localhost:8088/rest/v1/rollouts/1/deploygroups/5
# the controllerIds in a group
curl -u admin:pw localhost:8088/rest/v1/rollouts/1/deploygroups/5/targets
Tracking progress
Rollouts and groups both carry totalTargetsPerStatus, hawkBit’s breakdown of
their targets by deployment outcome:
{
"id": 1, "name": "fleet-1.1", "status": "running", "totalTargets": 9,
"totalTargetsPerStatus": {
"notstarted": 0, "scheduled": 3, "running": 3,
"error": 1, "finished": 2, "cancelled": 0
}
}
notstarted— the rollout has not been started, so nothing is deployed yet.scheduled— the group is waiting its turn; raptor creates actions only when a group is scheduled, so these targets have no action yet.running— an action is in flight (includingcancelingand, with the confirmation flow on,wait_for_confirmation).finished/error/cancelled— the action’s terminal state.
A rollout’s counts are the sum of its groups’. The web console renders both as progress bars — see the Web Console guide.
Evaluator cadence
The background evaluator runs every rollout_eval_interval_secs seconds
(default 5). Lower it for snappier progression in testing, raise it to reduce
load on large fleets. See the
Configuration Reference.
Note: hawkBit’s rollout approval workflow and dynamic rollouts (groups that keep absorbing newly-matching targets) are not yet implemented. Group membership is a static snapshot taken at creation time.