Skip to content

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
// Format: arch1:url1,arch2:url2
// Example: "x86_64:file:///shared/html/images/ipa.x86_64.kernel,aarch64:file:///shared/html/images/ipa.arm64.kernel"
// +optional
DeployKernelByArch string `json:"deployKernelByArch,omitempty"`
Copy link
Member

Choose a reason for hiding this comment

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

I'd rather have a more API-friendly version, something like

directURLs:
- kernel: file:///shared/html/images/ipa.x86_64.kernel
  initramfs: file:///shared/html/images/ipa.x86_64.initramfs

and for multiple architectures:

- kernel: file:///shared/html/images/ipa.default.kernel
  initramfs: file:///shared/html/images/ipa.default.initramfs
- kernel: file:///shared/html/images/ipa.aarch64.kernel
  initramfs: file:///shared/html/images/ipa.aarch64.initramfs
  architecture: aarch64

Several benefits:

  • Grouping kernel and initramfs together makes it harder to forget to set one of them
  • Users don't need to understand the Ironic's format
  • Validation for architecture value
  • 1 field instead of 4 proposed

The name directURLs is subject to further discussion. I want to convey that this URL is not fed into the downloader, but is used directly. At the very least, it should be mentioned in the description.

Copy link
Member Author

Choose a reason for hiding this comment

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

The downside is that user that needs to understand how this is converted to Ironic's format will have to dig this out.

I am not against this approach, but we need to decide how this will be converted into Ironic land, I would assume that in all the cases when this config is specified it gets rendered into *ByArch, in that case it will make sense to simplify this and also it will simplify Probs setup (no more need for overrides)

Copy link
Member

Choose a reason for hiding this comment

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

The downside is that user that needs to understand how this is converted to Ironic's format will have to dig this out.

This format will be self-documenting as everything in Kubernetes (to an extent). The opposite problem is true as well: if we keep the Ironic format, we need users to read the Ironic reference guide.

I would assume that in all the cases when this config is specified it gets rendered into *ByArch

Yes. And if architecture is not set, you can stick it into the default variable (DEPLOY_KERNEL_URL, etc)

Copy link
Member Author

@s3rj1k s3rj1k Jan 21, 2026

Choose a reason for hiding this comment

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

Works for me, I will rework this change in this format, should simplify this change significantly

Copy link
Member Author

@s3rj1k s3rj1k Jan 21, 2026

Choose a reason for hiding this comment

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

Latest change (still draft), migrates everything to be in overrides, including AgentImages, basically making this verify configurable from consumer side if needed and still keeping code simple enough (no magical and none obvious flows)

@dtantsur
Copy link
Member

Thank you for starting this! Some comments inline.

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

4 participants