Using the console

This page is for whoever actually ships the update. It assumes no command line, no API and no knowledge of how any of it works underneath. If you can read a table and press a button, you can do everything here.

Good to know

Nothing you press is irreversible in one click. Anything that reaches a device asks you to confirm and tells you how many machines it will touch first. Anything that halts, freezes or rolls back can be undone. The only thing you cannot take back is an artifact you deleted.

A tour of the console

The list down the left side is everything there is. It is grouped, and it hides what the server does not support or what your account may not see — so if a screen below is missing for you, that is why.

The Qawk console dashboard: cards showing devices by status, channels and what is updating right now.
The Dashboard: 140 devices, 43 of them updating, one in error, the four channels and what is running in each. The cards are yours — drag them, resize them, add and remove them from the tray — and it is saved per account.

The screens you will use

ScreenWhat it is forYou are here when…
DashboardThe state of everything, in cards you arrange yourself.you want to know if anything is wrong.
In progressEvery update happening right now, with download bars.you pressed go and want to watch.
TargetsEvery device. Search, filter, and pick the columns you care about.you are looking for one machine.
FleetsThe channels — dev, beta, prod — and the pipeline between them.you are shipping a release. This is the main screen.
CentresEvery centre and which channel it is in.a site should move from beta to prod.
OrchestratorSystems, their manifests, and deployments over them.machines that work together need updating.
Distribution setsThe things you can actually give a device.a new build needs uploading.
ModulesThe pieces a distribution set is made of, and their files.you are assembling a new set.

The rest

Filters are saved searches, which can also auto-assign a set to whatever matches them. Tags label devices and sets by hand. Rollouts are hawkBit's own staged deployments — a separate tool from Fleets, useful for a one-off campaign that does not fit your channels. Configuration, Users and roles and the Audit log are the server's settings and who did what. My account is your password and your API tokens.

Things that are true on every screen

Ship an update, step by step

This is the whole job, from a file on your disk to a fleet running it. Follow it in order the first time.

  1. Put the software in.
    Modules → new module. Give it a name and a version, choose its type (os, application), and upload the file. Qawk checks the file's hash against what you declared before it accepts it — if that check fails, the upload was corrupted and you want to know now, not on a device.
  2. Bundle it into something you can give out.
    Distribution sets → new set. Name and version it (app, 1.2.0), and add the modules. A set that is missing a module its type says is mandatory is incomplete, and Qawk will refuse to assign it — deliberately. Fix it before you go on.
  3. Give it to the first channel.
    Fleets → the channel with no upstream, usually dev → release. Pick the set. If that channel has systems in it, pick a manifest too — that is how the machines that work together get their matching versions. Press it, and the release starts.
  4. Watch it land.
    The channel's card fills as devices take it. The numbers under it are the ones that matter: how many run it, how many are working on it, how many failed. Open the drawer to see which.
  5. Promote it onward.
    On the next channel, press promote. Before anything happens, Qawk shows you the gate: a list with a ✓ or a ✗ against each condition. If every line is ✓, promote. If one is ✗, it tells you exactly what is missing — usually "it has not been in beta long enough".
  6. Get it approved, if the channel asks.
    A channel can require a second person. The release then waits instead of going out, and appears under the bell for everyone who may approve. The person who asked cannot approve it — that is the point of asking.
  7. Let it finish.
    A release is complete when the standalone devices run the set and the orchestrator has finished with the systems. Until both are true, the channel says so, and the next gate will not open.
The Fleets screen showing the dev, beta and prod pipeline as cards, each with its release, progress bar and buttons.
Fleets is where you spend your time. Here dev has finished (20 of 20), beta is part way through its first wave of 25%, and prod is awaiting approval — so the release sits in the queue at the top of the screen until somebody other than the person who asked presses approve. The arrows between the cards are the pipeline.

The other way: straight at some devices

Sometimes you do not want the pipeline — one machine, one set, now. Targets → tick the devices → deploy. You can also deploy to everything matching a query, and the dialog shows you a live count of how many devices that is before you commit. Press check the devices first and it will tell you which of them cannot take the set and why.

Note

Mode: forced or soft. Forced means install it now. Soft means the device may choose its moment. There is also download only (get the bytes now, install later) and a maintenance window (download any time, install only inside these hours).

The In progress screen listing devices currently updating, with download progress bars.
In progress — everything under way at once: a set assigned by hand to 40 machines, and an orchestrator deployment 7 systems of 8 through, with one rolling back. Real devices also show how far each download has got; the simulated ones here download nothing, which is why that column reads zero.

Reading what you see

Device status

SaysMeansDo
in syncIt runs what it was given.Nothing.
pendingIt has been given something and is working on it.Wait.
errorThe last update failed on the device.Open it and read what it reported.
registeredIt has called in but has never been given anything.Nothing, usually — a channel rule will pick it up.
unknownIt has never called in.Check the device can reach the server at all.

Release status

SaysMeans
activeGoing out now.
waiting for approvalSomeone else has to say yes.
haltedQawk stopped it — too many devices failed. Nothing more will be sent until a person resumes it.
completedEverything that should have it, has it.
deniedSomeone said no. It never went out.
supersededA newer release replaced it.

System status, on the Orchestrator screen

SaysMeans
pendingIts turn has not come.
runningIts components are updating, in the manifest's order.
succeededEvery component is on the manifest's set.
rolling backSomething in it failed; every device it updated is being put back.
rolled backIt is back on what it ran before.
skippedIt was never started — the deployment was aborted, too many others had failed, or it left the channel first.

Bars and colours

A bar that is filling is progress against a total. A bar with a calm moving band means devices are working and there is nothing to count yet — it is not stuck, it is waiting on machines. Green is done, amber is in progress, red is failed, and grey is not started.

When something goes wrong

The release halted by itself

This is the system working. Too many devices failed, so Qawk stopped sending it to more. Open the channel, read which devices failed and what they reported. Then either fix the build and release a new version, or — if the failures were not the build's fault — press resume. Resuming marks the failures already seen as seen: only new ones can halt it again, so you will not have to press it twice for the same problem.

The gate will not open

Read the report. Every line is a condition and it says the actual numbers against the required ones. The common ones:

If you have to go anyway, force the gate. It requires permission and a written reason, and the reason is kept in the release's history and the audit log for ever. That is by design: forcing a gate is allowed, forgetting that you did is not.

A system deployment drawer: three systems succeeded, one shows 'rolled back' in red with its reason and a 'take again' button.
Seven systems updated; device-07 failed and went back on its own. Its reason says which order failed and how many devices went back, and take again is the way forward once you know why.

A system rolled back

One device of it failed, so all of them went back to what they ran before. Open the deployment and the system's row tells you which component failed and at which order. The other systems carried on — one bad machine does not stop the fleet. If more systems failed than the deployment allows, no new system is started and the whole thing stops.

I cannot move this device into that channel

Its centre is in a different channel, and the centre would take it back within seconds. Either move the whole centre (Centres → tick → move), or, for one machine going to a trade show, lend it to a temporary channel — it remembers where it came from and can be sent home.

I need everything to stop, now

Freeze the channel. Fleets → the channel → freeze, with a reason. No release reaches it until you lift it. You can set a start and an end, so "no updates during league nights" can be arranged in advance. The reason is shown to anyone who tries to release into it, so nobody has to ask why.

A fleet to practise on

You should not learn what the halt button does on the night a release goes wrong. qawk-sim gives you as many devices as you like, in whatever shape you like, that behave like real ones — and fail when you tell them to. Nothing in this section touches hardware.

If you started the demo, you already have about 270 of them. To point some at a server of your own:

# 40 devices in a channel called lab
demo/simulate.sh --url http://localhost:8080 --token <gateway token> --fleet lab:40

# the same, spread over two centres -- so you can move a place, not a list
demo/simulate.sh --url http://localhost:8080 --token <gateway token> -- -fleet lab:40:centers=1-2

demo/simulate.sh --list     # what is running
demo/simulate.sh --stop     # stop them all

Against the demo you can leave --token out — the script reads it from demo/.gateway-token.

Five experiments worth doing

To see…Do thisThen watch
A release filling a channel --fleet dev:20 --fleet beta:40, then release a set into dev. Fleets — the bar fills, the counts move. In progress — the individual devices.
A release halting on failures Release a set whose module name contains broken. The simulated devices fail anything so named. The channel goes halted within a minute, saying how many failed against the threshold. Then press resume and watch it not halt again for the same devices.
A fleet that is not perfect demo/simulate.sh --fleet prod:200 -- -fail-rate 0.1 — one deployment in ten fails at random. What a real rollout looks like, and whether your error threshold is set somewhere sane.
Waves Set the channel's wave percent to 25 with 200 devices, then release. Four waves instead of one flood. Set -install-min 30s to make each wave last long enough to see.
A centre moving between channels -- -fleet lab:40:centers=1-2, then Centres → tick c01 → move. Its devices follow within a minute and take the new channel's release. Watch on channel catch up with devices.
A whole system rolling back --systems 16, then in the extra arguments:
-- -fail-where device=device-07,device_type=device3,set=2.0
Deploy manifest device-system-2.0 in Orchestrator. Fifteen systems succeed; device-07 fails at one component and the whole of it goes back to what it ran before.

A fleet shaped like yours

Simulated devices report the same attributes real ones do, so channels rules, centres and system types pick them up exactly as they would the real thing:

# three channels and a name to tell this run from others
demo/simulate.sh --name shop --url http://localhost:8080 --token <token> \
  --fleet dev:20 --fleet beta:40 --fleet prod:500

# 16 systems -- a device1 with two device2 and a device3 -- across four centres
demo/simulate.sh --name centres --url http://localhost:8080 --token <token> --systems 16

Each device is named <name>-<group>-<n> (shop-prod-017), so a run is easy to find and easy to stop: demo/simulate.sh --stop shop. Watch what they are doing with docker logs -f qawk-sim-shop.

Note

They download nothing. A simulated device waits a random time and reports finished — so you can run five hundred of them on a laptop. It does answer a deployment outside its maintenance window the way SWUpdate does, and a download-only one as downloaded, so those behaviours are real.

Good to know

Do it on a scratch server. Simulated devices register themselves and create data. Point them at the demo, or at a server you are happy to throw away — never at the one updating real machines.

Everything after -- goes to qawk-sim unchanged. Full list: docker run --rm --entrypoint qawk-sim qawk:local -help, and Connecting devices.

Making it yours

Running the console yourself

The console is a page and a small proxy. It keeps no credentials: your browser's own sign-in is passed through, and closing the tab signs you out.

python3 console/serve.py --port 8090 --hawkbit http://localhost:8080

It works against a stock hawkBit 1.1.0 too — point it there and it shows the hawkBit part and hides the rest.