Core Building Blocks
- Fleet Manager API provides the main control plane and serves data from Fleet Manager’s own database
- Workflow Agent synchronises workflow intent and Temporal status back into Fleet Manager
- NetBox Agent synchronises inventory and site data from NetBox
- Temporal Workers run durable workflow and activity logic
- PostgreSQL stores Fleet Manager’s queryable state and API-facing data model
Why Fleet Manager Uses Agents
Fleet Manager does not want API endpoints to fan out directly to external systems for every request. The main architectural reason is query shape and scale. For example, showing a page of jobs should not require one list call plus one live status call per job against Temporal. Instead:- agents poll or otherwise reconcile external systems in the background
- Fleet Manager stores the synchronised state in its own database
- the API serves operators from that local state
Workflow Model
Fleet Manager’s long-running orchestration is centred on Temporal. That choice was driven by the need for:- durable workflows that survive restarts
- retryable and heartbeated activities for unreliable infrastructure
- cancellation and manual-intervention points
- long-running execution for multi-stage enrolment and burn-in jobs
Hub and Satellite Topology
Fleet Manager is deployed as a hub plus one or more satellites.- The hub hosts the API and presents a single global view of the fleet
- Each satellite runs site-local workflow workers and other components close to the hardware and credentials they need
- Satellites use their own vault selection, PKI material, and deployment-specific configuration
External Systems
A typical deployment integrates with:- NetBox as the inventory source of truth
- OpenStack services such as Ironic, Nova, and Placement
- DHCP infrastructure used during provisioning
- 1Password and related secret-management workflows
- SLURM for hardware-test execution
- Prometheus and Grafana for metrics and logs
Development Implications
Some architectural rules follow directly from this design:- long-running work should not happen inside API requests
- external I/O belongs in activities or agents, not in Temporal workflow definitions
- Fleet Manager’s API layer should depend on its own typed models rather than ad hoc external payloads
- site-specific configuration belongs with the deployment, not in code-time branching