- Kind: Observation
- Version: 1
- Fleet Manager owner: Fleet Manager squad, #fleet-manager-chat (individual claimant pending)
- Counterpart owner: unassigned, Infrastructure Engineering (IaaS substrate); whether one owner covers all deployments or one per deployment set is to be confirmed with them
- Last reviewed: 2026-09-09
What flows
The per-satelliteopenstack-agent (src/fleet_manager/agents/openstack/, ADR-0036) polls Ironic nodes every
60 s and mirrors provision and power state into device conditions (ProvisioningHealthy, MaintenanceClear,
Enrolled, InValidationPool, InstanceAllocated, CustomerAllocated, CustomerReady) from which the hub
derives operational_status (ADR-0024). It sweeps assigned nodes every 5 min to rerun Ironic reconciliation and detect orphaned Nova
instances, and resyncs impairment state every 15 min, writing and removing the
Placement CUSTOM_CUSTOMER_READY trait for quarantine and release.
Workflows call the same services through src/fleet_manager/core/clients/openstack/: enrolment, cleaning and
inspection against Ironic; instance create for image-node and SLURM adoption against Nova; the Ironic-direct
deploy path (ADR-0042) for standalone-Ironic sites. Application-credential access rules are the contract in
OpenStack Application Credentials.
What breaks if this changes
An Ironic API change or a missing access rule fails enrolment, cleaning and deploy workflows at runtime. A Placement outage leaves quarantine and release half-applied.Enforcement
- Principal:
ironic-agent-<site>andtemporal-worker-<site>. - Mechanism: towards Fleet Manager, FM OAuth clients (private-key JWT) in the hub chart satellite roster;
towards OpenStack, the per-site application credentials in
clouds.yamlheld in the site 1Password vault (see OpenStack Application Credentials). A Keystone 401 or a credential rotation is the OpenStack side, not the Fleet Manager client. - Satellite roster client
ironic-agent-<site>(scopesdevice:update,device-condition:create,operations:read|write) andtemporal-worker-<site>indeployment/charts/hub/values.yaml. - Access rules: the application-credentials page above; the PR checklist in
AGENTS.mdrequires it to move with any new Ironic, Nova or Placement call. - Settings:
src/fleet_manager/settings/agents/openstack.py.
Gaps
- No written notice period from Infrastructure Engineering for OpenStack upgrades.
- Standalone-Ironic sites have no Nova, so the Placement trait path does not apply there; the file does not yet describe that variant per site.
Change log
- 2026-09-09 v1: created; describes present behaviour.