Skip to content

Commit e282322

Browse files
committed
Add blogpost about autodetect + TBN in 35.0
Signed-off-by: Jay Faulkner <jay@jvf.cc>
1 parent 32ed1e6 commit e282322

1 file changed

Lines changed: 118 additions & 0 deletions

File tree

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
---
2+
templateKey: blog-post
3+
title: Empowering End-Users in Ironic 35.0
4+
author: Jay Faulkner
5+
date: 2026-03-17T12:00:00.000Z
6+
category:
7+
- label: Development Update
8+
id: category-A7fnZYrE9
9+
---
10+
11+
Even when only considering its integration with OpenStack, Ironic has
12+
multiple different customers at any given time. The admin who installs
13+
and manages the conductors. The project managers who might online
14+
hardware and configure nodes in Ironic. The end-users who provision
15+
bare metal instances through Nova's compute API. In Ironic 35.0
16+
(OpenStack 2026.1, Gazpacho), we made two major feature improvements
17+
with one of those users in mind in particular: the end-user, by
18+
empowering them with more options about how to configure their
19+
instances at deploy time.
20+
<!--more-->
21+
22+
## Autodetect Deploy Interface
23+
24+
The first of these user-facing features is our new autodetect deploy
25+
interface. This permits changing the selected deployment method based
26+
on image metadata. Previously, this was selected by node
27+
configuration – by either an admin or a manager – and left entirely
28+
out of the hands of the end-user. Now, by configuring nodes with the
29+
autodetect deploy interface, we can enable end users to select what
30+
deployment method they would like by choosing what image to deploy.
31+
32+
Detection is based off image metadata. The three interfaces that we
33+
can support autodetection for today are bootc, ramdisk, and direct:
34+
- *bootc* is selected when an OCI container is provided as the
35+
deployment image, and that OCI container does not contain a full
36+
disk image. This detection method will never trigger for Nova
37+
end-users, as OCI container urls are not supported for Nova
38+
deployment.
39+
- *ramdisk* is selected when a Glance image is provided with
40+
`ironic_ramdisk=True` in the metadata. The autodetect interface then
41+
looks for additional metadata pointing to a boot iso or
42+
kernel/ramdisk pairing for boot.
43+
- *direct* is the fallback deployment interface used when none of the
44+
others match.
45+
46+
If your nodes are configured today for direct deployment, you can
47+
likely switch them to autodetect with no disruption.
48+
49+
Please see the [autodetect deploy interface documentation](https://docs.openstack.org/ironic/latest/admin/interfaces/deploy.html#autodetect-deploy) for more
50+
specific information on how to configure this feature.
51+
52+
## Trait-based port scheduling
53+
54+
The second of these user-facing features is subtle, but powerful.
55+
Previously, when provisioning nodes with a fully integrated OpenStack,
56+
operators had few options as to how to map networks to ports or
57+
portgroups – a simple match on physical_network. This is functional;
58+
but static. Instead, we wanted to give end-users more
59+
flexibility in how their virtual interfaces from Neutron are mapped
60+
into a physical machine.
61+
62+
First, a short aside: what is a trait? Traits are a way for Nova to
63+
track machines configured in a certain way. For instance, if you
64+
configure a Nova flavor to have the property
65+
`trait:HW_CPU_X86_AVX2=required`, virtual instances booted with that
66+
flavor will be placed onto a hypervisor with AVX2-supporting CPUs. In
67+
a similar way, Ironic uses custom traits to advertise different ways
68+
that Ironic can configure a node to fulfill a flavor request.
69+
Trait-based port scheduling is based on this concept: an admin can
70+
configure a flavor to request a specific trait from Ironic which will
71+
inform Ironic how you want your ports scheduled.
72+
73+
Configuration of trait-based port scheduling is performed via a YAML
74+
config file, with each key correlating to a custom trait, and the
75+
value is a list of rules to follow to build a mapping. For instance,
76+
you could tell Ironic to `attach_port` when `network.tag="green" &&
77+
port.physical_network="green"`. Operators can also set a trait to use
78+
when none are provided. Here is an example of a trait-based networking
79+
configuration:
80+
81+
```yaml
82+
CUSTOM_DIRECT_ATTACH_A_PURPLE_TO_STORAGE:
83+
actions:
84+
- action: attach_port
85+
filter: port.vendor == 'purple' && network.name == 'storage'
86+
CUSTOM_BOND_GREEN_STORAGE_TO_STORAGE_BY_2:
87+
actions:
88+
- action: group_and_attach_ports
89+
filter: >-
90+
port.vendor == 'green' && port.category == 'storage'
91+
&& ( network.name =~ 'storage' || network.tags =~ 'storage' )
92+
max_count: 2
93+
min_count: 2
94+
```
95+
96+
This port scheduling goes a step further with the ability to assemble
97+
dynamic portgroups. In Ironic, prior to Gazpacho, the only way to get
98+
portgroups – ports bonded together using LACP or similar technology –
99+
is to statically configure port groupings on a node. Now, with
100+
trait-based scheduling, you can assemble portgroups on the fly based
101+
on rulesets. For instance, not only could you attach green ports to
102+
green physical networks from the previous example, but by using the
103+
`group_and_attach_ports` action, you can have Ironic create a
104+
portgroup on the fly based on the specified rules – including the
105+
ability to fail processing if too few or too many ports would be
106+
included in the portgroup.
107+
108+
For full details, see the [trait-based networking documentation](https://docs.openstack.org/ironic/latest/admin/trait-based-networking.html).
109+
110+
## Get started
111+
112+
Both the autodetect deploy interface and trait-based port scheduling
113+
are available now in Ironic 35.0 as part of the OpenStack 2026.1
114+
(Gazpacho) release. Together, they represent a meaningful step toward
115+
giving end-users more control over how their bare metal instances are
116+
configured, without requiring admin intervention. Check out the full
117+
[Ironic 35.0 release notes](https://docs.openstack.org/releasenotes/ironic/2026.1.html)
118+
for everything that's new in this release.

0 commit comments

Comments
 (0)