Skip to content

Feature/diskless boot#4

Merged
Alex-Welsh merged 8 commits into
stackhpc/2025.1from
feature/diskless_boot
May 18, 2026
Merged

Feature/diskless boot#4
Alex-Welsh merged 8 commits into
stackhpc/2025.1from
feature/diskless_boot

Conversation

@dougszumski
Copy link
Copy Markdown
Member

This is a fairly clean backport of the diskless boot via Nova feature in Ironic.

I've been through a similar exercise for Caracal elsewhere before which worked fine. This is actually a lot simpler, because bootc support landed in Epoxy so there weren't many conflicts.

steveb and others added 8 commits May 18, 2026 12:09
Adds a new ``autodetect`` deploy interface that automatically selects
the appropriate concrete deploy interface based on image metadata and
node configuration. This simplifies node configuration by eliminating
the need to manually specify different deploy interfaces for different
image types.

The autodetect interface inspects the deployment at the beginning of the
deployment and switches to the most appropriate deploy interface from the
configured list in ``autodetect_deploy_interfaces``. The detection logic
checks interfaces in priority order, so if
``autodetect_deploy_interfaces`` is set to ``['bootc', 'direct']``:

* ``bootc`` - Selected for OCI container images (oci:// URLs) that are
identified as bootc images through container introspection
* ``direct`` - Fallback for standard disk images and OCI artifacts

The autodetect interface is now enabled by default in
``enabled_deploy_interfaces``. A new configuration option
``autodetect_deploy_interfaces`` (default: ``['direct']``)
controls which interfaces can be auto-selected and their priority order.

The original deploy interface is preserved in driver_internal_info
and automatically restored when exiting the ``cleaning`` state.

Assisted-By: Claude Code - Claude Sonnet 4.5
Change-Id: I87118cab0f51339e57c93f205d98e0861f2a3596
Signed-off-by: Steve Baker <sbaker@redhat.com>
Closes-Bug: #2130646

NOTE(dougszu): This was an almost clean backport
Conflicts:
	ironic/conductor/cleaning.py
	pyproject.toml
When Nova deploys an instance on an Ironic node using the ramdisk
deploy interface, it sets image_source but not kernel/ramdisk in
instance_info. Previously this caused validation to fail because
get_image_instance_info() only looked for direct kernel/ramdisk
values in the ramdisk boot path.

Modify get_image_instance_info() to pass image_source through when
kernel/ramdisk are not directly set, and resolve kernel_id/ramdisk_id
or boot_iso_id from Glance image properties. This enables Nova to
deploy to nodes configured with the ramdisk deploy_interface. The
image_source is preserved in instance_info as original_image_source.

Generated-By: claude-code
Change-Id: I5a4f3e2b8c1d9e7a6f0b3c4d5e8f1a2b3c4d5e6f
Signed-off-by: Jay Faulkner <jay@jvf.cc>
Implement supports_deploy() on RamdiskDeploy so the autodetect
deploy interface can select it automatically. The ramdisk interface
is chosen when instance_info contains kernel and ramdisk without an
image_source, or when boot_iso is set.

Because a Glance image with kernel_id/ramdisk_id alone is
ambiguous - it could be a partition image - Require the sentinel
property ironic_ramdisk_deploy=True in image metadata to distinguish
ramdisk deploy images during autodetect.

Also add boot_iso_id detection to supports_deploy() so
that Glance images referencing a boot ISO are automatically
detected as ramdisk deploy candidates.

Related-bug: #2137729
Generated-By: claude-code
Change-Id: I7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c
Signed-off-by: Jay Faulkner <jay@jvf.cc>

NOTE(dougszu):
Just missing bootc interface in doc which is implemented in Epoxy.

 Conflicts:
	doc/source/admin/interfaces/deploy.rst
Add ramdisk to the default autodetect_deploy_interfaces list so the
autodetect deploy interface can select it without explicit operator
configuration. Also update supports_deploy() to query Glance image
properties for kernel_id/ramdisk_id when only image_source is set,
supporting the Nova deployment path.

Closes-bug: #2137729
Generated-By: claude-code
Change-Id: I53e0b0750e723d2aa9b1f5656e36360a0999a8a4
Signed-off-by: Jay Faulkner <jay@jvf.cc>

NOTE(dougszu): This was arround missing
Idbed1770c79b2f84bb27c8545395a0391a7b4b9c
 Conflicts:
	ironic/conf/default.py
Follow-up as requsted in 978828; correctly document required disk format
to avoid angry image security checks.

Change-Id: Ic9b61dc998d291896851c6534dcc0c06fb3e43cb
Signed-off-by: Jay Faulkner <jay@jvf.cc>
We were not properly cleaning up boot_iso and original_image_source from
instance_info on rebuild, leading to inconsistent instance_info and a
failure.

Closes-bug: #2146823
Assisted-by: Claude-code
Change-Id: I176eef440601090a0b6dffb8d76b0e1458c91ca8
Signed-off-by: Jay Faulkner <jay@jvf.cc>
Change-Id: I328bb78bce336a0d8e2f42a7dffd73acdf6fa866
These nits are from the cherry-picks of upstream patches.

Change-Id: I9deea715e4bce492ebca2e1a7df8cdce0b446492
@dougszumski dougszumski force-pushed the feature/diskless_boot branch from 0bc4df0 to 329cd06 Compare May 18, 2026 14:50
@Alex-Welsh Alex-Welsh merged commit 8b54e3e into stackhpc/2025.1 May 18, 2026
4 checks passed
@Alex-Welsh Alex-Welsh deleted the feature/diskless_boot branch May 18, 2026 16:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants