Feature/diskless boot#4
Merged
Merged
Conversation
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
0bc4df0 to
329cd06
Compare
Alex-Welsh
approved these changes
May 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.