Deployment Scenarios¶
Ironic can be deployed in several different ways depending on what you need from it. The scenarios below cover the most common patterns, though they are not exhaustive — your environment may not map cleanly to any one of them, and that is fine. Think of these as starting points, not a checklist.
Scenarios at a Glance¶
Scenario |
Scale |
Multi-tenancy |
User-facing API |
|---|---|---|---|
1 to hundreds of nodes |
No |
Ironic API |
|
Small to large |
Yes (owner/lessee) |
Ironic API |
|
1 node to multiple datacenters |
Yes (native) |
Nova Compute API |
Note
The Full OpenStack scenario comes in two variants depending on whether end users also get direct access to the Ironic API. Deployments are also free to mix and match pieces of these scenarios.
Standalone¶
This is Ironic without any other OpenStack services. You manage and provision hardware through the Ironic API directly — no Keystone, no Neutron, no Glance. This makes sense when you need to provision machines without building out an OpenStack cloud, or when you are writing automation that drives Ironic directly.
The hard constraint is that there is no multi-tenancy. One set of
credentials controls everything. Authentication is handled either by disabling
it entirely (noauth) or using HTTP Basic auth. Standalone can also skip
the full message queue and use JSON-RPC instead, which removes a significant
operational dependency. See Configuration for both.
For networking, a flat network is sufficient to get started. If you want
switch-level automation without Neutron, the
ironic-networking service handles
that without pulling in the rest of OpenStack.
A standalone deployment can run one or more conductors. A single conductor is enough to get started and comfortably handles a smaller fleet; adding conductors is how you scale out and gain high availability, rather than growing any one of them. See Performance and Tuning Ironic for sizing and performance guidance. When multi-tenancy becomes a requirement, the OpenStack scenarios below are the right path.
Two projects build on top of Ironic in this mode and are worth knowing about:
Bifrost — Ansible playbooks that automate deployment onto a set of known hardware. If you are already comfortable with Ansible, this is the fastest path to a working standalone setup. It can optionally deploy Keystone as well, if you want authentication without building out a full OpenStack cloud.
Metal3 — A Kubernetes operator that manages bare metal nodes using Ironic. The right choice if your workloads run on Kubernetes and you want bare metal nodes to participate in that model.
Both are single-tenant by nature. When you find yourself wanting to give different teams different levels of access — or wanting to integrate with a broader platform — that is the signal to move to the next scenario.
OpenStack without Nova¶
This is Ironic integrated with Keystone, Glance, and Neutron, but without Nova. Users still provision nodes directly through the Ironic API, but now with real credentials tied to Keystone projects. That opens up multi-tenancy and gives you the full OpenStack access control model.
Multi-tenancy works through the owner and lessee model on nodes. A node can be assigned to a project as an owner (full administrative control over that node) or as a lessee (temporary, limited access). A system administrator sets the owner field; the owner operates from there. See Node Multi-Tenancy for how to configure this, and Secure RBAC for the full RBAC model.
Glance stores the images you deploy onto nodes. Neutron handles IPAM and, with the right ML2 plugin — networking-generic-switch is a common choice — can automate switch port configuration as part of the provisioning lifecycle. If your environment uses OVN, see Use of OVN Networking for what is supported and the current caveats. See Networking with the Bare Metal service for the full picture on which network interface options are available and what each one requires.
This configuration scales from a handful of nodes up to a large deployment. It can be installed with any standard OpenStack deployment tool — Kolla-Ansible, OpenStack-Ansible, and OpenStack Helm all work here. See Integration with other OpenStack services for the OpenStack service integration setup.
If you need users to provision bare metal without knowing or caring which specific node they get, read on.
Full OpenStack¶
This adds Nova and Placement to the previous scenario. Users request bare metal through the Nova Compute API using flavors — Nova handles scheduling and Placement tracks resource availability. Nova flavors map to Ironic resource classes, which Placement uses to match workloads to available hardware. See Configure the Compute service to use the Bare Metal service for the Nova integration and Create flavors for use with the Bare Metal service for flavor setup.
This is the right choice when you want a unified API for both virtual and physical resources, or when Nova’s scheduling model should decide which hardware a workload lands on. The scale range is wide: a single node running everything is a valid starting point, while at the other end multiple data centers with distributed conductor groups managing hardware regionally is a well-tested configuration. The same deployment tools that work for the previous scenario — Kolla-Ansible, OpenStack-Ansible, and OpenStack Helm — support this one as well.
Whether or not end users ever touch the Ironic API directly splits this scenario into two distinct patterns.
Nova alongside a public Ironic API¶
Here Nova provisions some workloads, but projects also get direct, authenticated access to the Ironic API. This enables self-service administration and multitenancy alongside Nova: a project can manage the nodes it owns through Ironic directly while still consuming hardware through the Compute API.
Access is granted through the node owner and lessee fields. With
conductor.automatic_lessee_source set to instance (the default), Ironic
derives a node’s lessee from the project_id in instance_info that Nova
sets at deploy time; setting a node owner grants a project fuller
administrative control over its hardware. See Secure RBAC and
Node Multi-Tenancy for the full access model.
For a concrete example of this configuration at small scale, see Small cloud with trusted tenants.
Mixing and Matching¶
Real deployments are rarely pure. The scenarios above are starting points, and most of the pieces can be combined — the following hybrids are common and fully supported.
Mixed fronting. A single deployment can front some projects through Nova
while others drive Ironic directly. Nodes that Nova deploys carry the tenant’s
project_id in instance_info — which becomes the node lessee under
the default conductor.automatic_lessee_source of instance — while nodes
managed directly can have their owner and lessee set explicitly with
baremetal node set. Because automatic_lessee_source is a single
conductor-wide setting, mixed operation relies on Nova stamping the project onto
its own nodes and on explicit owner and lessee assignment everywhere else.
Mixed networking. The network_interface is a per-node setting, so nodes
using different network models can coexist in the same deployment: some on a
flat provider network, some on tenant networks via neutron, and some
using the standalone ironic-networking service. Each interface you intend to
use must be listed in enabled_network_interfaces. See Networking with the Bare Metal service
and its Network interfaces overview for the available options, and
Configure the Standalone Networking Service for the ironic-networking service.
User Personas¶
Who interacts with Ironic depends on which scenario you are running. In
standalone mode there is effectively one role. In OpenStack deployments the
RBAC model creates meaningful distinctions between people who manage hardware,
people who own or lease specific nodes, and people who provision and consume
them. See Secure RBAC for the full role and scope model — in
particular the trust model — and
Node Multi-Tenancy for the owner and lessee fields.
The personas below are illustrative, not prescriptive. There are no hard rules about where one role ends and the next begins — the boundaries, and how each role is configured, are up to whoever deploys Ironic. Treat these as a starting set of ideas to adapt to your own organization, and expect them to overlap.
Hardware Technician (read-only)¶
This person works hands-on with the physical hardware: racking and cabling
machines, swapping failed components, attaching a crash cart, and verifying a
node’s configuration, firmware, and physical state. With read-only access to
Ironic they can look up a node’s state and correlate it with the
machine in front of them, but any action on the node is left to someone with
write access. In RBAC terms this is a system-scoped reader role (equivalent
to the legacy baremetal_observer).
Hardware Technician (read-write)¶
This person does everything the read-only technician does, but also has the access to act on nodes through Ironic — for example applying a firmware update to resolve an issue, re-running hardware inspection after replacing a component, placing a node into maintenance, or driving a reprovision. They may be physically present at the hardware, or they may be operating the fleet remotely. A remote technician is often the first line of triage, resolving what they can through the API before dispatching someone to physically visit the machine.
This access can be a system-scoped member (or admin) role. It also
overlaps with the Self-Service Project Ownership role below — a technician
responsible for a subset of hardware might instead be made the owner of just
those nodes, rather than given access across the whole fleet. To hand structured
operational tasks to people who lack deep Ironic knowledge, see
Runbooks for Cleaning & Servicing, which provide a controlled way to execute predefined
cleaning and servicing processes.
The split between the read-only and read-write technician is organizational, not technical: they may be different people with different job responsibilities, or there may be no distinction at all with only one of the two in use.
Cloud Administrator¶
This person manages the Ironic service itself — policies, conductor groups, and
service-level configuration — rather than individual nodes. In OpenStack
deployments they hold a system-scoped admin role (equivalent to the legacy
baremetal_admin). In standalone mode, this is whoever holds the API
credentials. In larger deployments the distinction between this role and the
technician roles above is meaningful; in smaller ones a single person often
wears all of these hats.
Self-Service Project Ownership¶
This role exists in the OpenStack scenarios only. In organizations where
separate internal groups manage or onboard their own hardware, a project
administrator may be able to add nodes and then provision, deprovision, and
configure the nodes their project owns. Nodes are associated with a Keystone
project through the owner field: a system administrator can set it, or it is
populated automatically when a project administrator enrolls their own nodes,
and the owning project operates from there. See Node Multi-Tenancy.
Cloud User¶
This is the person who ultimately consumes the bare metal. What “consuming” means — and how much they can do — depends entirely on the deployment scenario, ranging from near-total control to a narrow, policy-bounded slice of a single node.
Standalone — there is effectively no separation between the cloud user and the operator. One set of credentials controls everything, so the consumer has near-total control of the hardware.
OpenStack without Nova — the user is project-scoped and drives Ironic directly with their own Keystone credentials. Depending on how nodes are assigned, they may act as an owner (administering their project’s nodes) or a lessee (using them within limits).
Nova (hidden Ironic API) — the user only ever touches the Compute API and may not know they are getting physical hardware at all. They never reach Ironic; Nova provisions on their behalf.
Nova (public Ironic API) — alongside the Compute API, the user gets direct but limited Ironic access as a node lessee. They cannot provision nodes, but can interact with the nodes leased to them in whatever ways policy allows — controlling power, adjusting boot settings, or attaching virtual media — while sensitive fields like
driver_infostay hidden by default.
In the OpenStack scenarios, access is scoped through the node owner and
lessee fields: a system administrator or a node’s owner can set them, or the
lessee is populated automatically at deployment time (see
conductor.automatic_lessee_source). Runbooks for Cleaning & Servicing are a good fit
for giving these users a controlled, predefined way to run permitted operations
without broad Ironic knowledge or access. See Node Multi-Tenancy
and Secure RBAC for the full model.
Choosing Your Path¶
No OpenStack: Standalone. Consider Bifrost for Ansible-based automation or Metal3 if you are running Kubernetes.
Need multi-tenancy or OpenStack integration, want direct control over which node is used: OpenStack without Nova. You get the full OpenStack access model while keeping explicit control over node selection.
Users expect a VM-like experience or you need a unified API for virtual and physical resources: Full OpenStack. Nova handles scheduling and users work through the familiar Compute API — optionally alongside direct Ironic API access for projects that need it.
Not sure: Start with OpenStack without Nova. Nova can be added later without rebuilding the Ironic deployment, and you can always mix and match as your needs evolve.