Skip to content

Commit 6f709c6

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

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
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 cannot be used by Nova users, as
37+
OCI container urls are not supported for Nova deployment.
38+
- ramdisk is selected when a Glance image is provided with
39+
ironic_ramdisk=True in the metadata. The autodetect interface then
40+
looks for additional metadata pointing to a boot iso or
41+
kernel/ramdisk pairing for boot.
42+
- direct is the fallback deployment interface used when none of the
43+
others match. This means that if your nodes are configured today
44+
for direct deployment, you can likely switch them to autodetect
45+
with no disruption.
46+
47+
Please see the [autodetect deploy interface documentation](https://docs.openstack.org/ironic/latest/admin/interfaces/deploy.html#autodetect-deploy) for more
48+
specific information on how to configure this feature.
49+
50+
# Trait-based port scheduling
51+
52+
The second of these user-facing features is subtle, but powerful.
53+
Previously, when provisioning nodes with a fully integrated OpenStack,
54+
operators had few options as to how to map networks to ports or
55+
portgroups – a simple match on physical_network. This is functional;
56+
but static. Instead, we wanted to give end-users more
57+
flexibility in how their virtual interfaces from Neutron are mapped
58+
into a physical machine.
59+
60+
First, a short aside: what is a trait? Traits are a way for Nova to
61+
track machines configured in a certain way. For instance, if you
62+
configure a Nova flavor to have the property
63+
"trait:HW_CPU_X86_AVX2=required", virtual instances booted with that
64+
flavor will be placed onto a hypervisor with AVX2-supporting CPUs. In
65+
a similar way, Ironic uses custom traits to advertise different ways
66+
that Ironic can configure a node to fulfill a flavor request.
67+
Trait-based port scheduling is based on this concept: an admin can
68+
configure a flavor to request a specific trait from Ironic which will
69+
inform Ironic how you want your ports scheduled.
70+
71+
Configuration of trait-based port scheduling is performed via a yaml
72+
config file, with each key correlating to a custom trait, and the
73+
value is a list of rules to follow to build a mapping. For instance,
74+
you could tell Ironic to `attach_port` when network.tag="green" and
75+
port.physical_network="green". Operators can also set a trait to use
76+
when none are provided. Here is an example of a trait-based networking
77+
configuration:
78+
79+
```yaml
80+
CUSTOM_DIRECT_ATTACH_A_PURPLE_TO_STORAGE:
81+
actions:
82+
- action: attach_port
83+
filter: port.vendor == 'purple' && network.name == 'storage'
84+
CUSTOM_BOND_GREEN_STORAGE_TO_STORAGE_BY_2:
85+
actions:
86+
- action: group_and_attach_ports
87+
filter: >-
88+
port.vendor == 'green' && port.category == 'storage'
89+
&& ( network.name =~ 'storage' || network.tags =~ 'storage' )
90+
max_count: 2
91+
min_count: 2
92+
```
93+
94+
For full details, see the [trait-based networking documentation](https://docs.openstack.org/ironic/latest/admin/trait-based-networking.html).
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+
# Get started
109+
110+
Both the autodetect deploy interface and trait-based port scheduling
111+
are available now in Ironic 35.0 as part of the OpenStack 2026.1
112+
(Gazpacho) release. Together, they represent a meaningful step toward
113+
giving end-users more control over how their bare metal instances are
114+
configured, without requiring admin intervention. Check out the full
115+
[Ironic 35.0 release notes](https://docs.openstack.org/releasenotes/ironic/2026.1.html)
116+
for everything that's new in this release.

0 commit comments

Comments
 (0)