60 Commits

Author SHA256 Message Date
7be5f59e4f Bump metal3 versions
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 10s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 12s
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
2025-09-04 12:00:39 +02:00
6c05726947 Port ironic-image and ipa-downloader-image PRs to Factory, and adapt chart accordingly
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
2025-09-03 16:07:13 +02:00
a8a7b3a542 Bump metal3-chart due to ironicIP
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 19s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 39s
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-15 08:28:33 +00:00
8da51ba73f Allow the use of IRONIC_IP again in ironic-image
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-14 15:54:56 +00:00
5bf3812659 Let every media download go through HTTPS if set up
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -18s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in -18s
Update some URLs to leverage HTTPs whenever VMEDIA_TLS_PORT is set.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-14 15:54:56 +00:00
d18aef225e Clear IRONIC_IP when PROVISIONING_IP is IPv6
Make sure that only IRONIC_IPV6 is set with a valid value when
PROVISIONING_IP is an IPv6 address by also clearing IRONIC_IP

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-13 15:05:13 +00:00
8d1f677931 Align TLS HTTPD with HTTP
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -18s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 24s
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-12 14:19:56 +00:00
d0bbc1d844 Update a few httpd config files
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-12 14:17:29 +00:00
5ece6cd64e Temporarily grant access to anything on HTTPS
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 22s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 13s
Unfortuantely, likely due to some conflicts in the Apache, access cannot
be granted to /images/ only, so allow anyone for now.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-08 15:30:56 +00:00
0da5de1c06 Use Apache 2.4 syntax for access control on TLS HTTP server
Migrate the access rules for files in the HTTPS media server instance
to the newer 2.4 syntax, matching the HTTP media server in httpd.conf
2025-08-08 10:31:26 +00:00
27af056dce Fix a few ShellCheck reported warnings from PR #213
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 10s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 25s
The checks on the upstream project have reported some warnings to the
code accepted in PR #213, fix them in this commit.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-07 20:20:09 +00:00
e2d38a867c Let Apache use separate IPv4 and IPv6 sockets for listening to any
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -9s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 10s
Enable the use of two separate sockets for IPv4 and IPv6 when
LISTEN_ALL_INTERFACES is set to true. While desirable, on Linux Apache uses
IPv4-mapped IPv6 addresses by default, thus leveraging a single IPv6 socket
for IPv4 connections as well.

This behaviour is far from being desirable and can be disabled at compile
time via the "--disable-v4-mapped" flag, so make sure both an ANY address
Listen directive is present for both IPv4 and IPv6. When Apache is compiled
with "--enable-v4-mapped", the IPv4 socket will be simply ignored.

Please see https://httpd.apache.org/docs/2.4/bind.html for more
information.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
eecd30e90d Update httpd.conf to bind to IPv4 and/or IPv6 sockets
Enable the use of individual IPv4 and IPv6 sockets when the respective
IP is detected and LISTEN_ALL_INTERFACES is not set to true. This allows
to correctly bind to both the IPv4 and IPv6 addresses found and not just
one of them.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
fc0cfda2c0 Let Ironic API use IPv4 and IPv6 sockets when possible
When LISTEN_ALL_INTERFACES is not set, Apache should make Ironic API
avaiable on either or both IPv4 and IPv6 sockets, depending on the
addresses requested or found on the system.

Make sure to set the "Listen" directive according to ENABLE_IPV4 and
ENABLE_IPV4, and the VirtualHost when IRONIC_URL_HOSTNAME is present.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
582aaaa424 Set host_ip to an IPv6 address when found
Prioritize IPv6 over IPv4 when available to set host_ip in ironic.conf
when LISTEN_ALL_INTERFACES is not set to true.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
a94cde2a35 Use my_ipv6 when IRONIC_IPV6 is defined in ironic.conf
As per the Ironic documentation:

"This field [my_ip] does accept an IPv6 address as an override for templates
and URLs, however it is recommended that [DEFAULT]my_ipv6 is used along with
DNS names for service URLs for dual-stack environments."

Fill my_ipv6 when an IPv6 address has been found for binding.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
ad01fecc4f Allow binding on the provisioning network via a hostname
In a dual-stack scenario, especially when deploying in direct mode via
virtual media, it might be useful to 1) use a hostname to enable "dual IP"
URLs 2) have ironic bind to those two addresses, if found on the system.

To make this possible, this commit introduces:
- a new user environment variable named IRONIC_URL_HOSTNAME, to be used
  as immutable external only input, to derive IRONIC_URL_HOST and the
  IP addresses to bind on
- a new utility function named "get_ip_of_hostname" to help look up the
  A and AAAA records
- additional logic to look for the returned address on the system, for
  binding the processes; this new logic has lower priority than
  PROVISIONING_IP (which can then be used to enforce one specific IP
  version) and PROVISIONING_INTERFACE

Note, while IRONIC_URL_HOSTNAME and PROVISIONING_IP are considered to be
mutually exclusive, IRONIC_URL_HOSTNAME and PROVISIONING_INTERFACE are
not.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
d59126b517 Introduce IRONIC_IPV6 to bind on IPv6 sockets
The ironic scripts either use PROVISIONING_IP as an input or try to
determine an IP address to bind the sockets to. This results in
IRONIC_IP being defined once the process is complete, and it can carry
either an IPv4 or an IPv6 address.

Likely, the assumption is that on Linux, by default, IPv4-mapped IPv6
addresses can be leveraged to serve both IPv4 and IPv6 through a single
socket. However this is not a good practice and two separate sockets
should be used instead, whenever possible.

This change modifies such logic by
- introducing the variable IRONIC_IPV6 alongside the existing
- matching IRONIC_IP and attempting to populate both variables

Please note that hostname based URLs, with both A and AAAA records, are
also required for a fully working dual-stack configuration.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
19394a8b03 Revert 2742439 being now redundant
Commit 2742439 added logic to tentatively identify the interface name
in get_provisioning_interface if the PROVISIONING_IP is provided.
However the same process in then repeated in wait_for_interface_or_ip.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
ca7da400d0 Leverage get_interface_of_ip to look PROVISIONING_IP up
Use the previously introduced get_interface_of_ip, to determine if the
PROVISIONING_IP address is actually present on a network interface.

This improves the code readability and enables additional debugging
output.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
c69044ff2b Add two new utility functions for later refactoring
The way the ironic-image processes are bound to internet sockets is mainly
by PROVISIONING_IP or PROVISIONING_INTERFACE, that is, by looking up a
specific address on an interface, or a specific interface for a workable
address.

Introduce two new utility functions in ironic-common.sh for these two
purposes:
get_interface_of_ip: returns the name of the interface where the IP address
                     provided as argument is found
get_ip_of_interface: returns the first IP associated to the interface
                     provided as argument

These two functions will be put into use in subsequent commits.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
60f0bdd5f0 Remove PROVISIONING_INTERFACE default for better validation
Whenever PROVISIONING_INTERFACE is not set by the user, function
get_provisioning_interface attempts to determine one, or provide
"provisionign" as default value. However this can cause confusing errors
down the line.

Remove this default value and fail gracefully, with proper logging,
if the PROVISIONING_INTERFACE value is not detected.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
4e4f9e591a Simplify the setting of host_ip in ironic.conf
The value of host_ip is determined twice within the ironic.conf.j2 template
file, by means of a relatively hard to read set of conditions.

Avoid this duplication and improve readability by exporting the correct
value once in scripts/configure-ironic.sh. This also leave more room for
more complex evaluations should these be needed in the future.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-08-04 14:47:42 +00:00
e021cfa92f Merge pull request 'Upgrade to SLE 15.7 base and bump Ironic to use 2025.1 version' (#214) from nbelouin/Factory:15.7-upgrade into main
All checks were successful
Synchronize Project Metadata / sync-prj-meta (push) Successful in -1s
Synchronize Project Config / Update prjconf in OBS (push) Successful in 21s
Reviewed-on: #214
Reviewed-by: Marco Chiappero <mchiappero@noreply.src.opensuse.org>
Reviewed-by: Steven Hardy <steven.hardy@noreply.src.opensuse.org>
2025-07-29 11:20:48 +02:00
62f9faf144 Align configure-nonroot.sh
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -3s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 11s
Try to reuse as much as possible of the upstream configure-nonroot.sh

Co-authored-by: Nicolas Belouin <nicolas.belouin@suse.com>
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:37 +00:00
8164b5f125 Adopt the new readiness/liveness probes
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:37 +00:00
5f6e0185f5 Make the new scripts executable
v29.0.0 add a couple of new scripts, such as ironic-probe.sh; make sure
they have the 'executable' flag.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:37 +00:00
57dca6f0a4 Remove unused prometheus exporter
The Prometheus exporter is effectively, not only unused, but
unusable, due to missing dependencies. Since currently we
don't have use case for it, opt for dropping the exporter
entirely from the image.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:37 +00:00
54bf2edf7b Force the use of Python 3.11
SLE 15.6 provides Python 3.11, make sure it's enforced.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:37 +00:00
9c60855914 Update the destination path of Jinjia templates
Previously .j2 files used to be copied to /etc before being
instantiated. In order to make the image potentially read only,
move the templates to /tmp.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:37 +00:00
bc1d924cc6 Disable the network schema check to allow for nmstate definitions
Bypass the OpenStack network-data format validation, to allow for the
nmstate based one we instead use (which would otherwise fail).

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:37 +00:00
2f4f94238f Do not force ipa-insecure=1, use env variable instead
Allow the use of https, force it to 1 via the IPA_INSECURE environment
variable only TLS is disabled.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 10:36:36 +00:00
dae0b33326 Use arch specific ESP img
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
4e4231b39e Use arch specific file for IPA
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
c9f13a514a Use arch named IPA file in IMAGE_CACHE_PREFIX
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
f8f730087f Change GRUB path in ironic.conf
Correct path for grub.cfg on a SUSE system.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
7c0423ee04 Use ironic-suse user/group in Apache for API
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
0358093370 Use ironic-suse user/group in Apache for media
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
a69e54a6df Use correct paths and modules for Apache
Correct the path of the Apache modules for a SUSE image.

Also keep a couple of modules disabled.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
65201fd575 Align to v29.0.0
Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-28 09:26:00 +00:00
2adc97e581 Removing BuildVersion, bump ironic-image version
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 10s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 26m54s
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
2025-07-25 12:01:43 +02:00
6251d8b670 ironic-image: remove obsolete packages
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 1s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 33m15s
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
2025-07-24 13:44:12 +02:00
f23003c01f Bump minor version in ironic-image and metal3-chart
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -1m53s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in -1m51s
Update metal3-chart to include the following ironic and ipa downloader
changes:

#196
#198
#199
#200
#201
#203
#204
#207
#208

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-10 20:29:22 +00:00
d00b6ece5f Move the copy of Jinja templates to resemble upstream
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 10s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 12s
Follow the same location for the COPY command moving the Jinja template
files in the image.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-07 21:49:15 +00:00
67f63aadc7 Remove stale file entries for old BIOS based machines
Two entries pointing to old and unesed files for non UEFI servers seem
to be unused both here and upstream, so this commit removes them.
2025-07-07 21:49:15 +00:00
f88e75a724 Apply misc changes to Dockerfile to align with upstream
Having a completely different image and build system the Dockerfile will
always differ quite significantly from the upstream one. Nonetheless,
it's still useful to make the commont parts to look alike as much as
possible to ease maintanance and update.

Note, this is just a small set of changes that are possible, more effort
into this direction may follow at later stage.
2025-07-07 21:49:13 +00:00
ef6989b0d8 Restore the upstream directory structure
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -1m50s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 18s
It is now possible to bring back the original directory structure for
config (/ironic-config) files and scripts (/scripts). This will make
updates to re-align with upstream easier.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-07 21:45:39 +00:00
b2ca623d14 Remove unused prometheus exporter
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -1m49s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in -1m35s
The Prometheus exporter is effectively, not only unused, but
unusable, due to missing dependencies. Since currently we
don't have use case for it, opt for dropping the exporter
entirely from the image.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-07 13:12:16 +00:00
53c16ce7c9 Drop inotify-tools and switch to pyinotify
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -1m45s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in -1m7s
No longer inotifywait use and move to python pyinotify.

See https://github.com/metal3-io/ironic-image/issues/605 for
more details.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-03 12:47:31 +00:00
e55bf1ab63 Fix incorrect ArchExclusiveLine OBS directive
One Docker specific OBS directive, ArchExclusiveLine, is incorrectly
testing for x86 instead of aarch64, likely due to a copy-and-paste
error. Change the architecture for that RUN command.

Signed-off-by: Marco Chiappero <marco.chiappero@suse.com>
2025-07-03 11:20:37 +02:00