Skip to content

✨ Add multi-architecture IPA support and configurable probes#517

Open
s3rj1k wants to merge 1 commit intometal3-io:mainfrom
s3rj1k:multiarch
Open

✨ Add multi-architecture IPA support and configurable probes#517
s3rj1k wants to merge 1 commit intometal3-io:mainfrom
s3rj1k:multiarch

Conversation

@s3rj1k
Copy link
Member

@s3rj1k s3rj1k commented Jan 21, 2026

This change allows specifying IPA (Ironic Python Agent) image locations per CPU architecture through the new spec.overrides.agentImages field. Users can define kernel and initramfs URLs for each supported architecture (x86_64, aarch64), which the operator renders as DEPLOY_KERNEL_BY_ARCH and DEPLOY_RAMDISK_BY_ARCH environment variables, and those environment variables are consumed by Ironic-image configuration script.

Additionally, the httpd container liveness and readiness probes are now configurable via spec.overrides.httpdLivenessProbe and spec.overrides.httpdReadinessProbe. When agentImages is specified, default probes are disabled and must be configured explicitly if needed.

Implements partially #355

@metal3-io-bot
Copy link
Contributor

Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with /test all

@metal3-io-bot metal3-io-bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jan 21, 2026
@metal3-io-bot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign elfosardo for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@metal3-io-bot metal3-io-bot added the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label Jan 21, 2026
@s3rj1k s3rj1k changed the title ✨ Add multi-architecture IPA support and configurable httpd probes ✨ Add multi-architecture IPA support and configurable probes Jan 21, 2026
@metal3-io-bot metal3-io-bot added size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. and removed size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. labels Jan 21, 2026
@s3rj1k s3rj1k force-pushed the multiarch branch 4 times, most recently from 198d5ee to a14095e Compare January 21, 2026 12:15
@dtantsur
Copy link
Member

Thank you for starting this! Some comments inline.

Signed-off-by: s3rj1k <evasive.gyron@gmail.com>
@s3rj1k s3rj1k force-pushed the multiarch branch 2 times, most recently from 70c49f2 to 5d764d8 Compare January 21, 2026 20:34
@synthe102
Copy link

I think that ironic-image's inspector.ipxe.j2 also need to be updated to include arch specific IPAs ? Maybe some templating with iPXE's {buildarch} since Ironic doesn't support fallback per arch ?

@s3rj1k
Copy link
Member Author

s3rj1k commented Jan 22, 2026

I think that ironic-image's inspector.ipxe.j2 also need to be updated to include arch specific IPAs ? Maybe some templating with iPXE's {buildarch} since Ironic doesn't support fallback per arch ?

Lets handle that in dedicated PR, I don't want to mix and match everything in single place, yes there would be a need to update DHCP configs

@s3rj1k s3rj1k force-pushed the multiarch branch 2 times, most recently from a277bc6 to 7595cac Compare January 22, 2026 12:14
@s3rj1k s3rj1k marked this pull request as ready for review January 22, 2026 13:17
@metal3-io-bot metal3-io-bot removed the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jan 22, 2026
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds support for multi-architecture IPA (Ironic Python Agent) deployments and makes httpd container probes configurable. It allows users to specify custom kernel and initramfs URLs for different CPU architectures (x86_64 and aarch64) via spec.overrides.agentImages, which are rendered as DEPLOY_KERNEL_BY_ARCH and DEPLOY_RAMDISK_BY_ARCH environment variables for consumption by Ironic. Additionally, httpd container liveness and readiness probes can now be explicitly configured, with a behavior change where default probes are disabled when custom agent images are specified.

Changes:

  • Added new API types: CPUArchitecture, AgentImages, and probe override fields (HttpdLivenessProbe, HttpdReadinessProbe) in Overrides
  • Implemented validation for agent images including uniqueness checks for architectures
  • Updated container building logic to generate multi-arch environment variables and handle configurable probes
  • Added comprehensive test coverage for validation and environment variable generation

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
api/v1alpha1/ironic_types.go Adds CPUArchitecture enum, AgentImages struct, and probe override fields to Overrides
api/v1alpha1/zz_generated.deepcopy.go Auto-generated DeepCopy methods for new types
config/crd/bases/ironic.metal3.io_ironics.yaml CRD schema updates for new fields with validation rules
docs/api.md API documentation for new fields and types
pkg/ironic/validation.go Validates agent images for required fields and architecture uniqueness
pkg/ironic/validation_test.go Test cases for agent image validation scenarios
pkg/ironic/containers.go Environment variable generation for multi-arch images and probe configuration logic
pkg/ironic/containers_test.go Tests for environment variable generation with various architecture combinations

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@s3rj1k s3rj1k force-pushed the multiarch branch 4 times, most recently from efb0305 to 3563a00 Compare February 9, 2026 23:21
@lentzi90
Copy link
Member

/cc @Rozzii

@metal3-io-bot metal3-io-bot requested a review from Rozzii February 10, 2026 08:05
Copy link
Member

@elfosardo elfosardo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, I was finally able to have a look at this!
It looks good in general, I've added some comments but nothing major.
I was wondering if we could maybe add some examples of how to configure the new probe settings.
Also maybe add loggging if an image download fails for a specific architecture, so the user knows which one is missing?

@s3rj1k
Copy link
Member Author

s3rj1k commented Feb 10, 2026

Also maybe add loggging if an image download fails for a specific architecture, so the user knows which one is missing?

But download happens elsewhere, not in the controller itself

@s3rj1k s3rj1k force-pushed the multiarch branch 3 times, most recently from 2d04842 to 6c6193f Compare February 10, 2026 13:13
@elfosardo
Copy link
Member

Also maybe add loggging if an image download fails for a specific architecture, so the user knows which one is missing?

But download happens elsewhere, not in the controller itself

right, scratch that

@elfosardo
Copy link
Member

/lgtm

@metal3-io-bot metal3-io-bot added the lgtm Indicates that a PR is ready to be merged. label Feb 10, 2026
@metal3-io-bot metal3-io-bot removed the lgtm Indicates that a PR is ready to be merged. label Mar 2, 2026
@metal3-io-bot
Copy link
Contributor

New changes are detected. LGTM label has been removed.

@s3rj1k s3rj1k force-pushed the multiarch branch 2 times, most recently from 8edd360 to 53a2813 Compare March 2, 2026 11:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants