- Kind: Observation
- Version: 2
- Fleet Manager owner: Fleet Manager squad, #fleet-manager-chat (individual claimant pending)
- Counterpart owner: unassigned, HPC (Infrastructure and Systems Engineering)
- Last reviewed: 2026-09-16
What flows
The per-satelliteslurm-agent (src/fleet_manager/agents/slurm/, ADR-0036) polls the SLURM REST API every
60 s and the Fleet Manager device list every 5 min, resyncing every 15 min, and writes the SlurmMember and
SlurmSchedulable conditions. Fleet Manager workflows adopt, release, drain and resume nodes through the same
API and submit burn-in jobs as sbatch.
A second path runs the other way. Fleet Manager is the authority for the per-site, per-device-role SLURM
provisioning configuration (SlurmBootstrapConfig, ADR-0035): the Glance image, Nova flavor, SLURM features, GRES
and base64 cloud-init user-data a compute node is built from. HPC operations write it through
POST and PATCH /api/v1/sites/{site_id}/slurm-bootstrap-configs/ with the slurm-bootstrap-config:create|update
scopes; no agent holds those scopes, so the writer is a person or HPC tooling on a user login. The satellite Temporal
worker reads it lazily at adoption time (src/fleet_manager/core/clients/slurm_bootstrap_config.py,
src/fleet_manager/core/domain/slurm_adoption.py) and passes image, flavor and user-data to the Nova create or
in-place rebuild that turns a device into a SLURM node; burn-in tests then run on nodes built from that
configuration. A row with a null image or flavor fails adoption for that role.
What breaks if this changes
If the SLURM API or node naming changes, devices showvalidation while the scheduler cannot see them (the
gap ADR-0024 was written for), burn-in dispatch fails, and drain and resume workflows stall. A stale
bootstrap configuration breaks adoption for every node at that site.
Enforcement
- Principal:
slurm-agent-<site>andtemporal-worker-<site>towards Fleet Manager; HPC user logins for the bootstrap configuration writes. - Mechanism: towards Fleet Manager, FM OAuth client (private-key JWT) in the hub chart satellite roster; towards
SLURM, the SLURM REST JWT read from the 1Password item named by
jwt_op_item(src/fleet_manager/settings/clients/slurm.py). - Satellite roster client
slurm-agent-<site>(device:update,device-condition:create) andtemporal-worker-<site>(slurm-bootstrap-config:read) indeployment/charts/hub/values.yaml; the create and update scopes are held by HPC users, not by any roster client. - Settings:
src/fleet_manager/settings/agents/slurm.py; workflows undersrc/fleet_manager/temporal/.
Gaps
- Burn-in test authoring and thresholds are moving to FOE; the SLURM cluster itself is operated by HPC. Who answers for a SLURM-side change that breaks Fleet Manager dispatch is not written down.
Change log
- 2026-09-16 v2: added the SLURM bootstrap configuration path (HPC writes, Temporal worker reads at adoption).
- 2026-09-09 v1: created; describes present behaviour.