Files
harmony/docs/guides/fleet-tasks-upgrades.md
Jean-Gabriel Gill-Couture 5e3b0522e0
Some checks failed
Run Check Script / check (pull_request) Failing after 13s
docs(fleet): add operator and device guide
2026-07-27 10:34:31 -04:00

3.0 KiB

Fleet tasks and upgrades

Fleet has two distinct upgrade paths. TaskRun invokes the fixed operating system upgrade executor. Setting Device.spec.agentUpgrade invokes the agent binary upgrade protocol.

System upgrade task

Create a namespaced TaskRun:

apiVersion: fleet.nationtech.io/v1alpha1
kind: TaskRun
metadata:
  name: upgrade-device-1
spec:
  allowedGroups: [production]
  targetSelector:
    matchLabels:
      device-id: device-1
  deadlineSeconds: 21600
  systemUpgradeV1: {}

Task placement uses the same group source as deployments. The public production composition does not configure that source, so a task has no targets until a private composition supplies group membership.

The operator freezes the matching target set. Each device must advertise the AptFullUpgradeV1 updater capability. The root updater then runs its compiled sequence: package preflight, apt-get update, noninteractive full upgrade, dpkg audit, reboot, and post-boot verification. Callers cannot supply package names, repositories, commands, or reboot arguments.

If a matched target has canary=true, only canaries are released first. Every canary must complete before the remaining frozen targets are released. A failed or timed-out canary stops further release. Completed upgrades are not rolled back.

The deadline prevents an expired intent from starting and determines when the operator fails a run. It does not interrupt apt or dpkg after the updater has accepted the attempt. An interrupted package transaction can enter repair-required; repair then requires direct device access.

The executor exists in the agent and updater, but validation on a disposable Debian VM and Raspberry Pi OS device remains listed as work in the current design. Treat it as unproven on physical production devices until that run is recorded.

Inspect progress with:

kubectl -n <namespace> get taskruns
kubectl -n <namespace> get taskrun <name> -o yaml
journalctl -u harmony-fleet-updater

Recurring schedules and dashboard task history are not implemented.

Agent upgrade

An agent upgrade target contains a version, architecture, artifact URL, maximum size, and SHA-256 digest. The operator writes a per-device attempt when desired and reported versions differ.

The root updater downloads and verifies the candidate, runs its self-test and probe, stops the old agent, switches the active symlink, and starts the new agent. Readiness commits the change. Failure before commit restores the previous agent executable; rollback-failed requires root repair.

This rollback covers only the executable. Configuration, local databases, and formats changed by the candidate must remain readable by the previous release. The root updater does not update itself. Devices installed before OCI artifact support need FleetDeviceSetupScore run once before their first oci:// upgrade.

See Fleet agent upgrades for the protocol, timeouts, journal states, and repair conditions.