|
| 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