45 Commits
3.5 ... 3.4

Author SHA256 Message Date
07651b880e Merge pull request '[3.4.2] - bump neuvector' (#339) from dprodanov/Factory:neuvector-bump into 3.4
Reviewed-on: #339
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
Reviewed-by: Steven Hardy <steven.hardy@noreply.src.opensuse.org>
2025-12-18 10:43:45 +01:00
6d13317836 [3.4.2] - bump neuvector
Some checks failed
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -6s
Build PR in OBS / Build PR in OBS (pull_request_target) Failing after 44m39s
2025-12-18 10:59:23 +02:00
e3a8995ab6 Merge pull request 'fix: Bump kiwi-builder container image version' (#337) from eminguez/suse-edge-factory:iptables-kiwi-3.4-part-2 into 3.4
Reviewed-on: #337
Reviewed-by: Denislav Prodanov <dprodanov@noreply.src.opensuse.org>
2025-12-17 15:01:03 +01:00
e-minguez
24a22da8bd fix: Bump kiwi-builder container image version
Some checks failed
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) Failing after 15m3s
2025-12-17 14:46:04 +01:00
375db22c53 Merge pull request 'fix: Bring back iptables' (#334) from eminguez/suse-edge-factory:iptables-kiwi-3.4 into 3.4
Reviewed-on: #334
Reviewed-by: Rhys Oxenham <roxenham@noreply.src.opensuse.org>
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
2025-12-17 11:23:28 +01:00
e-minguez
cd8a6c0fc1 fix: Bring back iptables
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 6s
https://src.suse.de/products/SL-Micro/pulls/299
2025-12-17 10:44:14 +01:00
29e6064cf7 Merge pull request '[3.4.2] - update release_images' (#333) from dprodanov/Factory:3.4.2 into 3.4
Reviewed-on: #333
2025-12-16 16:22:41 +01:00
b1ce8964b7 [3.4.2] - update release_images
Some checks failed
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 26s
Build PR in OBS / Build PR in OBS (pull_request_target) Failing after 3m23s
2025-12-16 17:18:42 +02:00
51076dda42 Merge pull request 'backport eib 1.3.1 changes' (#330) from dprodanov/Factory:eib-backport into 3.4
Reviewed-on: #330
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
2025-12-11 13:27:57 +01:00
ed9923dc74 backport eib 1.3.1 changes
Some checks failed
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 5s
Build PR in OBS / Build PR in OBS (pull_request_target) Failing after 1h18m25s
2025-12-11 13:09:25 +02:00
3c621bad4e Merge pull request '[3.4.2] - update release manifest' (#327) from dprodanov/Factory:release-manifest-3-4-2 into 3.4
Reviewed-on: #327
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
2025-12-09 10:44:57 +01:00
3d8f24c69a [3.4.2] - update release manifest
Some checks failed
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 7s
Build PR in OBS / Build PR in OBS (pull_request_target) Failing after 4m30s
2025-12-09 11:37:56 +02:00
0910f6b6cc Bumpint nmc to v0.3.5
(cherry picked from commit 415ac9f11a)
2025-12-05 12:40:20 +01:00
376a0a9e4d Merge pull request 'feat: Include the EIB elemental fix temporary for 3.4' (#319) from eib-elemental-fix-3.4 into 3.4
Backport of #323

Temporarily carry https://github.com/suse-edge/edge-image-builder/pull/810 until it's included in an EIB release

Reviewed-on: #319
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
Reviewed-by: Steven Hardy <steven.hardy@noreply.src.opensuse.org>
2025-12-03 12:11:57 +01:00
e-minguez
1023469447 feat: Include the EIB elemental fix temporary for 3.4
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 14s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 14s
2025-12-02 12:35:52 +01:00
7172780283 Update release-manifest and airgap-resources to 0.23.4
Some checks failed
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in 20s
Build PR in OBS / Build PR in OBS (pull_request_target) Failing after 16m25s
Updates to align with the 0.23.4 chart update, the airgap resources
don't actually change but we're bumping the tag to keep aligned and
avoid potential confusion

(cherry picked from commit 894068cccd)
2025-11-24 16:46:16 +02:00
f37ccbc70e rancher-turtles: Update to 0.24.3 upstream release
This is to align with the migration instructions:

https://turtles.docs.rancher.com/turtles/stable/en/tutorials/migration.html

This is also carrying this fix as it's not yet backported to 0.24.x:

https://github.com/rancher/turtles/pull/1734
(cherry picked from commit ecb1cb3586)
2025-11-24 16:44:35 +02:00
fdab9b0bde Merge pull request 'metal3: Backport of Metal3 chart and components to 3.4' (#299) from nbelouin/Factory:backport-metal3-3.4 into 3.4
Reviewed-on: #299
Reviewed-by: Steven Hardy <steven.hardy@noreply.src.opensuse.org>
2025-10-30 09:33:01 +01:00
ef31131144 fix(metal3): Fix a typo in the media subchart
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -28s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 18s
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
(cherry picked from commit b69a806fed)
2025-10-29 10:59:05 +01:00
0a0264cc2b Bump versions
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
(cherry picked from commit cd217a73f8)
2025-10-29 10:59:05 +01:00
8b156f3a42 Remove kernel modules filter
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
(cherry picked from commit 28f7c4b074)
2025-10-29 10:59:05 +01:00
fffb09efe0 metal3: Introduce TLS variables for ironic vmedia server
port of https://github.com/metal3-io/ironic-image/pull/759

Expose it in chart with a new `ironic.ironicExtraEnv` value that allows
passing arbitrary extra environment variables to allow for advanced
configuration we may not want to keep as not for the faint of heart.

Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
(cherry picked from commit f60348562e)
2025-10-29 10:59:05 +01:00
a6fde4c761 Use BCI nginx for metal3 media subchart
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
(cherry picked from commit 18844c5a25)
2025-10-29 10:59:05 +01:00
e8ee070133 Merge pull request 'chore: Bump c-v to 0.2.2' (#293) from eminguez/suse-edge-factory:c-v-3.4.1 into 3.4
Reviewed-on: #293
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
Reviewed-by: Denislav Prodanov <dprodanov@noreply.src.opensuse.org>
2025-10-22 10:26:07 +02:00
e-minguez
1e5f60b17e chore: Update c-v to 0.2.2 to include 3.4.1
Some checks failed
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -24s
Build PR in OBS / Build PR in OBS (pull_request_target) Failing after 1m11s
2025-10-22 10:25:06 +02:00
e-minguez
386550eb41 feat: Bump c-v to 0.2.0 using release manifests now
(cherry picked from commit df4cde31b0)
2025-10-22 10:25:06 +02:00
05061793f1 fix: 3.4.1 release manifest name (#292)
Signed-off-by: Eduardo Minguez <eminguez@noreply.src.opensuse.org>
Reviewed-on: #292
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
Reviewed-by: Steven Hardy <steven.hardy@noreply.src.opensuse.org>
Co-authored-by: Eduardo Minguez <eminguez@noreply.src.opensuse.org>
Co-committed-by: Eduardo Minguez <eminguez@noreply.src.opensuse.org>
2025-10-22 09:19:21 +02:00
853872d9ba update release_images.yaml for 3.4.1 (#289)
Reviewed-on: #289
2025-10-21 16:03:28 +02:00
696440c3c7 Merge pull request 'fix rancher version' (#286) from dprodanov/Factory:rancher-fix into 3.4
Reviewed-on: #286
2025-10-10 14:55:22 +02:00
aad7827d67 fix rancher version
Some checks failed
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -20s
Build PR in OBS / Build PR in OBS (pull_request_target) Failing after 5m37s
2025-10-10 15:49:45 +03:00
40869007bd 3.4.1 bump (#285)
Reviewed-on: #285
Reviewed-by: Denislav Prodanov <dprodanov@noreply.src.opensuse.org>
Co-authored-by: Mikhail Krutov <mikhail.krutov@suse.com>
Co-committed-by: Mikhail Krutov <mikhail.krutov@suse.com>
2025-10-10 13:58:47 +02:00
4326b883e5 Merge pull request 'Manual backporting of #280 as it failed to squash commits' (#284) from geoagriogiannis/Factory:backport-support-tools-amd64 into 3.4
All checks were successful
Synchronize Project Config / Update prjconf in OBS (push) Successful in 3s
Synchronize Project Metadata / sync-prj-meta (push) Successful in 2s
Reviewed-on: #284
Reviewed-by: Denislav Prodanov <dprodanov@noreply.src.opensuse.org>
2025-10-07 10:44:48 +02:00
George
0b3f99e64c Manual backporting of #280 as it failed to squash commits
All checks were successful
Check Release Manifest Local Charts Versions / Check Release Manifest Local Charts Versions (pull_request) Successful in -15s
Build PR in OBS / Build PR in OBS (pull_request_target) Successful in 2s
2025-10-06 13:11:13 +02:00
d77cc8744f Merge pull request 'bump elemental dashboard version' (#278) from backport/ele-dash into 3.4
Reviewed-on: #278
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
2025-09-23 09:43:54 +02:00
d3e972e242 bump elemental dashboard version
Some checks failed
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) Failing after 9m47s
2025-09-23 09:35:43 +02:00
6fd87db1ad Merge pull request 'update release images' (#275) from backport-release-images into 3.4
Reviewed-on: #275
Reviewed-by: Fatih Degirmenci <fdegirmenci@noreply.src.opensuse.org>
2025-09-19 22:28:14 +02:00
24685d27be update release images
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 24s
2025-09-19 19:13:51 +02:00
9d93dd001a Merge pull request 'backport cert-manager to 3.4' (#273) from dprodanov/Factory:cert-manager into 3.4
Reviewed-on: #273
Reviewed-by: Nicolas Belouin <nbelouin@noreply.src.opensuse.org>
2025-09-19 09:06:04 +02:00
da8736177f backport cert-manager to 3.4
Some checks failed
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) Failing after 2m11s
2025-09-19 10:03:30 +03:00
5408eb4de5 release-manifest: update images for turtles 0.24.0
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 -6s
(cherry picked from commit d75736809d)
2025-09-18 09:49:08 +01:00
1fac881ebc rancher-turtles-chart: fix fleet airgap config
It seems the fetchConfig is not currently supported in the upstream chart

(cherry picked from commit de51bf9c83)
2025-09-18 09:48:50 +01:00
5e533c35b9 rancher-turtles-airgap-resources: Update to 0.24.0
Note this requires a configuration change because the IPAM provider is
now decoupled from CAPM3

(cherry picked from commit 948a0193d8)
2025-09-18 09:48:33 +01:00
8eeb3b2a26 rancher-turtles: update to 0.24.0
(cherry picked from commit 2ae659283a)
2025-09-18 09:48:09 +01:00
042175ff4c Updates for EIB 1.3 (#269)
Co-authored-by: dbw7 <danial.bekhit@suse.com>
Co-committed-by: dbw7 <danial.bekhit@suse.com>
Reviewed-on: #269
Reviewed-by: Denislav Prodanov <dprodanov@noreply.src.opensuse.org>
2025-09-17 16:52:05 +02:00
f54cc0c0a3 Create 3.4 release branch
All checks were successful
Synchronize Project Metadata / sync-prj-meta (push) Successful in 54s
2025-09-15 15:33:58 +03:00
255 changed files with 4327 additions and 19905 deletions

197
.gitmodules vendored
View File

@@ -1,170 +1,39 @@
[submodule "obs-service-set_version"]
path = obs-service-set_version
url = https://src.opensuse.org/SLFO-pool/obs-service-set_version.git
[submodule "cri-tools"]
path = cri-tools
url = https://src.opensuse.org/pool/cri-tools.git
[submodule "fakeroot"]
path = fakeroot
url = https://src.opensuse.org/pool/fakeroot.git
[submodule "crudini"]
path = crudini
url = https://src.opensuse.org/pool/crudini.git
[submodule "cni-plugins"]
path = cni-plugins
url = https://src.opensuse.org/pool/cni-plugins
[submodule "python-kubernetes"]
path = python-kubernetes
url = https://src.opensuse.org/pool/python-kubernetes
branch = leap-16.0
[submodule "python-durationpy"]
path = python-durationpy
url = https://src.opensuse.org/pool/python-durationpy
branch = leap-16.0
[submodule "python-recommonmark"]
path = python-recommonmark
url = https://src.opensuse.org/pool/python-recommonmark
branch = leap-16.0
[submodule "python-iniparse"]
path = python-iniparse
url = https://src.opensuse.org/pool/python-iniparse
branch = leap-16.0
[submodule "python-commonmark"]
path = python-commonmark
url = https://src.opensuse.org/pool/python-commonmark
branch = leap-16.0
[submodule "cni"]
path = cni
url = https://src.opensuse.org/pool/cni
[submodule "python-tenacity"]
path = python-tenacity
url = https://src.opensuse.org/pool/python-tenacity
[submodule "python-pint"]
path = python-pint
url = https://src.opensuse.org/pool/python-pint
branch = leap-16.0
[submodule "python-flexcache"]
path = python-flexcache
url = https://src.opensuse.org/pool/python-flexcache
branch = leap-16.0
[submodule "python-flexparser"]
path = python-flexparser
url = https://src.opensuse.org/pool/python-flexparser
branch = leap-16.0
[submodule "python-uncertainties"]
path = python-uncertainties
url = https://src.opensuse.org/pool/python-uncertainties
branch = leap-16.0
[submodule "python-dogpile.cache"]
path = python-dogpile.cache
url = https://src.opensuse.org/pool/python-dogpile.cache
branch = leap-16.0
[submodule "python-pytest-mpl"]
path = python-pytest-mpl
url = https://src.opensuse.org/pool/python-pytest-mpl
branch = leap-16.0
[submodule "python-zeroconf"]
path = python-zeroconf
url = https://src.opensuse.org/pool/python-zeroconf
branch = leap-16.0
[submodule "python-ifaddr"]
path = python-ifaddr
url = https://src.opensuse.org/pool/python-ifaddr
branch = leap-16.0
[submodule "python-yappi"]
path = python-yappi
url = https://src.opensuse.org/pool/python-yappi
[submodule "python-routes"]
path = python-routes
url = https://src.opensuse.org/pool/python-routes
branch = leap-16.0
[submodule "python-repoze.lru"]
path = python-repoze.lru
url = https://src.opensuse.org/pool/python-repoze.lru
branch = leap-16.0
[submodule "ipxe"]
path = ipxe
url = https://src.opensuse.org/pool/ipxe
branch = leap-16.0
[submodule "python-setproctitle"]
path = python-setproctitle
url = https://src.opensuse.org/pool/python-setproctitle
branch = leap-16.0
[submodule "python-requests-kerberos"]
path = python-requests-kerberos
url = https://src.opensuse.org/pool/python-requests-kerberos
branch = leap-16.0
[submodule "python-pecan"]
path = python-pecan
url = https://src.opensuse.org/pool/python-pecan
branch = leap-16.0
[submodule "python-pycdlib"]
path = python-pycdlib
url = https://src.opensuse.org/pool/python-pycdlib
[submodule "python-cliff"]
path = python-cliff
url = https://src.opensuse.org/pool/python-cliff
[submodule "python-autopage"]
path = python-autopage
url = https://src.opensuse.org/pool/python-autopage
[submodule "python-cmd2"]
path = python-cmd2
url = https://src.opensuse.org/pool/python-cmd2
branch = leap-16.0
[submodule "uwsgi"]
path = uwsgi
url = https://src.opensuse.org/pool/uwsgi
branch = leap-16.0
[submodule "python-requestsexceptions"]
path = python-requestsexceptions
url = https://src.opensuse.org/pool/python-requestsexceptions
[submodule "python-python-memcached"]
path = python-python-memcached
url = https://src.opensuse.org/pool/python-python-memcached
[submodule "python-kombu"]
path = python-kombu
url = https://src.opensuse.org/pool/python-kombu
[submodule "python-amqp"]
path = python-amqp
url = https://src.opensuse.org/pool/python-amqp
branch = leap-16.0
[submodule "python-statsd"]
path = python-statsd
url = https://src.opensuse.org/pool/python-statsd
[submodule "python-warlock"]
path = python-warlock
url = https://src.opensuse.org/pool/python-warlock
[submodule "python-case"]
path = python-case
url = https://src.opensuse.org/pool/python-case
branch = leap-16.0
[submodule "python-vine"]
path = python-vine
url = https://src.opensuse.org/pool/python-vine
branch = leap-16.0
[submodule "python-Pyro5"]
path = python-Pyro5
url = https://src.opensuse.org/pool/python-Pyro5
branch = leap-16.0
[submodule "python-pre-commit"]
path = python-pre-commit
url = https://src.opensuse.org/pool/python-pre-commit
[submodule "python-serpent"]
path = python-serpent
url = https://src.opensuse.org/pool/python-serpent
branch = leap-16.0
[submodule "python-google-cloud-monitoring"]
path = python-google-cloud-monitoring
url = https://src.opensuse.org/pool/python-google-cloud-monitoring
[submodule "python-google-cloud-pubsub"]
path = python-google-cloud-pubsub
url = https://src.opensuse.org/pool/python-google-cloud-pubsub
[submodule "python-cfgv"]
path = python-cfgv
url = https://src.opensuse.org/pool/python-cfgv
[submodule "python-identify"]
path = python-identify
url = https://src.opensuse.org/pool/python-identify
[submodule "python-pandas"]
path = python-pandas
url = https://src.opensuse.org/pool/python-pandas
[submodule "python-grpc-google-iam-v1"]
path = python-grpc-google-iam-v1
url = https://src.opensuse.org/pool/python-grpc-google-iam-v1
[submodule "python-editdistance"]
path = python-editdistance
url = https://src.opensuse.org/pool/python-editdistance
[submodule "autoconf"]
path = autoconf
url = https://src.opensuse.org/SLFO-pool/autoconf.git
[submodule "python-pydantic"]
path = python-pydantic
url = https://src.opensuse.org/SLFO-pool/python-pydantic
[submodule "python-pydantic-core"]
path = python-pydantic-core
url = https://src.opensuse.org/SLFO-pool/python-pydantic-core
[submodule "python-inline-snapshot"]
path = python-inline-snapshot
url = https://src.opensuse.org/SLFO-pool/python-inline-snapshot
[submodule "python-executing"]
path = python-executing
url = https://src.opensuse.org/SLFO-pool/python-executing
[submodule "python-typing-inspection"]
path = python-typing-inspection
url = https://src.opensuse.org/SLFO-pool/python-typing-inspection
[submodule "python-annotated-types"]
path = python-annotated-types
url = https://src.opensuse.org/SLFO-pool/python-annotated-types
[submodule "python-typing_extensions"]
path = python-typing_extensions
url = https://src.opensuse.org/SLFO-pool/python-typing_extensions
[submodule "python-flit-core"]
path = python-flit-core
url = https://src.opensuse.org/SLFO-pool/python-flit-core

View File

@@ -1,3 +1,3 @@
PROJECT = "isv:SUSE:Edge:3.5"
PROJECT = "isv:SUSE:Edge:3.4"
REPOSITORY = "https://src.opensuse.org/suse-edge/Factory"
BRANCH = "3.5"
BRANCH = "3.4"

View File

@@ -12,8 +12,6 @@ def get_buildstatus(project: str) -> ET.Element:
output = subprocess.check_output(["osc", "pr", "--xml", project])
return ET.fromstring(output)
except subprocess.CalledProcessError:
# Don't retry immediatly just in case is a network error
time.sleep(5)
continue
print("Failed to get buildstatus from OBS")
@@ -22,12 +20,6 @@ def do_wait(project:str, commit:str) -> ET.Element:
while True:
time.sleep(5)
status = get_buildstatus(project)
# Just in case the buildstatus fails
if status is None:
print("Could not retrieve status, retrying...")
continue
if last_state == status.get("state"):
continue
else:
@@ -88,4 +80,4 @@ def main():
sys.exit(print_results(status))
if __name__ == "__main__":
main()
main()

151
_config
View File

@@ -1,11 +1,8 @@
Prefer: -libqpid-proton10 -python313-urllib3_1
Prefer: -libqpid-proton10 -python311-urllib3_1
Prefer: -cargo1.58 -cargo1.57 cargo1.89
Prefer: chrony-pool-suse
Prefer: -postgresql17-devel-mini
BuildFlags: excludebuild:python-pandas:test-py313
Macros:
%__python3 /usr/bin/python3.11
%registry_url %(echo %{vendor} | cut -d '/' -f 3 | sed 's/build/registry/')
:Macros
@@ -49,43 +46,92 @@ Macros:
:Macros
%endif
# Missing deps for testsuite
BuildFlags: excludebuild:autoconf:el
BuildFlags: excludebuild:autoconf:testsuite
# Missing deps for python packages related to suse-edge-components-versions
BuildFlags: excludebuild:python-pydantic:test
BuildFlags: excludebuild:python-pydantic-core:test
BuildFlags: excludebuild:python-inline-snapshot:test
BuildFlags: excludebuild:python-executing:test
BuildFlags: excludebuild:python-annotated-types:test
BuildFlags: excludebuild:python-typing-inspection:test
BuildFlags: excludebuild:python-typing_extensions:test
# Only build manifest embedding images here
%if "%_repository" == "test_manifest_images"
BuildFlags: onlybuild:edge-image-builder-image
BuildFlags: onlybuild:release-manifest-image
%else
# Only a subset of stack is arm64 ready exclude what is not ready
# Exclude the images selected by the following section
# as the standard repository is a dependency
%ifarch aarch64
# Akri
BuildFlags: excludebuild:akri
BuildFlags: excludebuild:akri-agent-image
BuildFlags: excludebuild:akri-controller-image
BuildFlags: excludebuild:akri-debug-echo-discovery-handler-image
BuildFlags: excludebuild:akri-onvif-discovery-handler-image
BuildFlags: excludebuild:akri-opcua-discovery-handler-image
BuildFlags: excludebuild:akri-udev-discovery-handler-image
BuildFlags: excludebuild:akri-webhook-configuration-image
BuildFlags: excludebuild:cri-tools
# FRR
BuildFlags: excludebuild:frr-image
BuildFlags: excludebuild:frr-k8s
BuildFlags: excludebuild:frr-k8s-image
# Upgrade controller
BuildFlags: excludebuild:release-manifest-image
BuildFlags: excludebuild:upgrade-controller
BuildFlags: excludebuild:upgrade-controller-image
BuildFlags: excludebuild:baremetal-operator-image
BuildFlags: excludebuild:endpoint-copier-operator-image
BuildFlags: excludebuild:ironic-image
BuildFlags: excludebuild:ironic-ipa-downloader-image
BuildFlags: excludebuild:kiwi-builder-image
BuildFlags: excludebuild:kubectl-image
BuildFlags: excludebuild:kube-rbac-proxy-image
BuildFlags: excludebuild:metallb-controller-image
BuildFlags: excludebuild:metallb-speaker-image
BuildFlags: excludebuild:nessie-image
BuildFlags: excludebuild:suse-edge-components-versions-image
%endif
%else
# Only a subset of stack is arm64 ready
%ifarch aarch64
BuildFlags: onlybuild:autoconf
BuildFlags: onlybuild:baremetal-operator
BuildFlags: onlybuild:baremetal-operator-image
BuildFlags: onlybuild:ca-certificates-suse
BuildFlags: onlybuild:container-build-checks
BuildFlags: onlybuild:crudini
BuildFlags: onlybuild:edge-build-checks
BuildFlags: onlybuild:edge-image-builder
BuildFlags: onlybuild:edge-image-builder-image
BuildFlags: onlybuild:endpoint-copier-operator
BuildFlags: onlybuild:endpoint-copier-operator-image
BuildFlags: onlybuild:fakeroot
BuildFlags: onlybuild:hauler
BuildFlags: onlybuild:ipcalc
BuildFlags: onlybuild:ironic-image
BuildFlags: onlybuild:ironic-ipa-downloader-image
BuildFlags: onlybuild:ironic-ipa-ramdisk
BuildFlags: onlybuild:kubectl
BuildFlags: onlybuild:kubectl-image
BuildFlags: onlybuild:kube-rbac-proxy
BuildFlags: onlybuild:kube-rbac-proxy-image
BuildFlags: onlybuild:metallb
BuildFlags: onlybuild:metallb-controller-image
BuildFlags: onlybuild:metallb-speaker-image
BuildFlags: onlybuild:nessie
BuildFlags: onlybuild:nessie-image
BuildFlags: onlybuild:nm-configurator
BuildFlags: onlybuild:python-annotated-types
BuildFlags: onlybuild:python-executing
BuildFlags: onlybuild:python-flit-core
BuildFlags: onlybuild:python-inline-snapshot
BuildFlags: onlybuild:python-pydantic
BuildFlags: onlybuild:python-pydantic-core
BuildFlags: onlybuild:python-pyhelm3
BuildFlags: onlybuild:python-rich
BuildFlags: onlybuild:python-suse-edge-components-versions
BuildFlags: onlybuild:python-typing-inspection
BuildFlags: onlybuild:python-typing_extensions
BuildFlags: onlybuild:shim-noarch
BuildFlags: onlybuild:suse-edge-components-versions-image
%endif
%endif
%if "%_repository" == "images" || "%_repository" == "test_manifest_images"
Prefer: container:sles15-image
Type: docker
Repotype: none
Patterntype: none
BuildEngine: podman
Prefer: SLES-release
BuildFlags: dockerarg:SLE_VERSION=16.0
Prefer: sles-release
BuildFlags: dockerarg:SLE_VERSION=15.7
# Publish multi-arch container images only once all archs have been built
PublishFlags: archsync
@@ -100,6 +146,47 @@ BuildFlags: onlybuild:release-manifest-image
%endif
%if "%_repository" == "images_16.0"
Prefer: container:sles15-image
Type: docker
BuildEngine: podman
Repotype: none
Patterntype: none
BuildFlags: dockerarg:SLE_VERSION=16.0
BuildFlags: onlybuild:kiwi-builder-image
Substitute: system-packages:podman podman buildah createrepo_c release-compare skopeo umoci
# Publish multi-arch container images only once all archs have been built
PublishFlags: archsync
# Exclude the images selected by the aarch64 section
%ifarch aarch64
BuildFlags: excludebuild:baremetal-operator-image
BuildFlags: excludebuild:edge-image-builder-image
BuildFlags: excludebuild:endpoint-copier-operator-image
BuildFlags: excludebuild:ironic-image
BuildFlags: excludebuild:ironic-ipa-downloader-image
BuildFlags: excludebuild:kubectl-image
BuildFlags: excludebuild:kube-rbac-proxy-image
BuildFlags: excludebuild:metallb-controller-image
BuildFlags: excludebuild:metallb-speaker-image
BuildFlags: excludebuild:nessie-image
BuildFlags: excludebuild:suse-edge-components-versions-image
%endif
%else
%if "%{sub %{reverse %_project} 1 7}" != "%{reverse :ToTest}" && "%{sub %{reverse %_project} 1 9}" != "%{reverse :Snapshot}"
BuildFlags: excludebuild:kiwi-builder-image
%else
%ifarch aarch64
BuildFlags: onlybuild:kiwi-builder-image
%endif
%endif
%endif
%if "%_repository" == "charts" || "%_repository" == "phantomcharts" || "%_repository" == "releasecharts"
Type: helm
Repotype: helm
@@ -116,16 +203,12 @@ BuildFlags: onlybuild:release-manifest-image
# ironic-ipa-ramdisk are noarch packages that need to be availble to both archs
ExportFilter: ^ironic-ipa-ramdisk-.*\.noarch\.rpm$ aarch64 x86_64
ExportFilter: ^grub2-.*-efi-.*\.noarch\.rpm$ aarch64 x86_64
%endif
%if "%_repository" != "standard"
BuildFlags: excludebuild:grub-aggregate
%endif
# Enable reproducible builds
# https://en.opensuse.org/openSUSE:Reproducible_Builds\#With_OBS
Macros:
%source_date_epoch_from_changelog N
%source_date_epoch_from_changelog Y
%clamp_mtime_to_source_date_epoch Y
%use_source_date_epoch_as_buildtime Y
%_buildhost reproducible

18
_meta
View File

@@ -34,15 +34,20 @@
<arch>x86_64</arch>
</repository>
{%- endif %}
{%- for repository in ["images", "test_manifest_images"] %}
{%- for repository in ["images", "images_16.0", "test_manifest_images"] %}
<repository name="{{ repository }}">
{%- if release_project is defined and repository != "test_manifest_images" %}
<releasetarget project="{{ release_project }}" repository="images" trigger="manual"/>
{%- endif %}
<path project="SUSE:Registry" repository="standard"/>
<path project="{{ ironic_base }}:Factory" repository="16.0"/>
<path project="SUSE:CA" repository="openSUSE_Tumbleweed"/>
<path project="{{ project }}" repository="standard"/>
{%- if repository == "images_16.0" %}
<path project="SUSE:CA" repository="16.0"/>
<path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
<path project="SUSE:SLFO:Main:Build" repository="standard"/>
{%- else %}
<path project="SUSE:CA" repository="SLE_15_SP7"/>
<path project="{{ project }}" repository="standard"/>
{%- endif %}
<arch>x86_64</arch>
<arch>aarch64</arch>
</repository>
@@ -51,9 +56,8 @@
{%- if release_project is defined and not for_release %}
<releasetarget project="{{ release_project }}" repository="standard" trigger="manual"/>
{%- endif %}
<path project="{{ ironic_base }}:Factory" repository="16.0"/>
<path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
<path project="SUSE:SLFO:1.2" repository="standard"/>
<path project="{{ ironic_base }}:2025.1" repository="15.7"/>
<path project="SUSE:SLE-15-SP7:Update" repository="standard"/>
<arch>x86_64</arch>
<arch>aarch64</arch>
</repository>

View File

@@ -1,5 +1,5 @@
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.4_up1.3.2
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.4_up1.3.2-%RELEASE%
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1-%RELEASE%
annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/namespace: cattle-ui-plugin-system
@@ -12,10 +12,10 @@ annotations:
catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
catalog.cattle.io/kube-version: '>= v1.26.0-0'
apiVersion: v2
appVersion: 1.3.2
appVersion: 304.0.3+up1.3.1
description: 'SUSE Edge: Akri extension for Rancher Dashboard'
name: akri-dashboard-extension
type: application
version: "%%CHART_MAJOR%%.0.4+up1.3.2"
version: "%%CHART_MAJOR%%.0.3+up1.3.1"
icon: >-
https://raw.githubusercontent.com/cncf/artwork/main/projects/akri/icon/color/akri-icon-color.svg

View File

@@ -8,7 +8,7 @@ spec:
plugin:
name: {{ include "extension-server.fullname" . }}
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/1.3.2
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/304.0.3+up1.3.1
noCache: {{ .Values.plugin.noCache }}
noAuth: {{ .Values.plugin.noAuth }}
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}

1
autoconf Submodule

Submodule autoconf added at 0154270569

View File

@@ -1,12 +1,12 @@
# SPDX-License-Identifier: Apache-2.0
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.0
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.0-%RELEASE%
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%
ARG SLE_VERSION
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
FROM registry.suse.com/bci/bci-base:$SLE_VERSION AS base
COPY --from=micro / /installroot/
RUN zypper --installroot /installroot --non-interactive install --no-recommends baremetal-operator python3-watchdog procps iproute2 bind-utils vim shadow; zypper -n clean; rm -rf /var/log/*
RUN zypper --installroot /installroot --non-interactive install --no-recommends baremetal-operator inotify-tools procps iproute2 bind-utils vim shadow; zypper -n clean; rm -rf /var/log/*
FROM micro AS final
# Define labels according to https://en.opensuse.org/Building_derived_containers

View File

@@ -3,11 +3,10 @@ export RESTART_CONTAINER_CERTIFICATE_UPDATED=${RESTART_CONTAINER_CERTIFICATE_UPD
export IRONIC_CACERT_FILE=${IRONIC_CACERT_FILE:-"/opt/metal3/certs/ca/tls.crt"}
if [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
watchmedo shell-command \
--patterns="$(basename "${IRONIC_CACERT_FILE}")" \
--ignore-directories \
--command='if [[ "${watch_event_type}" == "deleted" ]]; then pkill -TERM baremetal-opera; fi' \
"$(dirname "${IRONIC_CACERT_FILE}")" &
# shellcheck disable=SC2034
inotifywait -m -e delete_self "${IRONIC_CACERT_FILE}" | while read -r file event; do
kill $(pgrep baremetal-opera)
done &
fi
exec /usr/bin/baremetal-operator $@

View File

@@ -0,0 +1,163 @@
From f8c1ba1696fd8555e8e94246ec5afa38536fa8bd Mon Sep 17 00:00:00 2001
From: erjavaskivuori <erja.vaskivuori@est.tech>
Date: Thu, 5 Jun 2025 09:49:47 +0000
Subject: [PATCH 1/5] Enable exhaustive linter
Enable exhaustive linter to check exhaustiveness of switch statements of enum-like
constants.
Signed-off-by: erjavaskivuori <erja.vaskivuori@est.tech>
(cherry picked from commit a5a81b8717c9e6642ae626ea97933e3615fe11c0)
---
.golangci.yaml | 4 ++-
.../metal3.io/v1alpha1/baremetalhost_types.go | 1 +
.../metal3.io/baremetalhost_controller.go | 2 ++
.../metal3.io/host_state_machine.go | 4 +++
pkg/provisioner/ironic/ironic.go | 26 +++++++++----------
5 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/.golangci.yaml b/.golangci.yaml
index 58e54b31..c758b93c 100644
--- a/.golangci.yaml
+++ b/.golangci.yaml
@@ -21,7 +21,7 @@ linters:
- errchkjson
#- errname
#- errorlint
- #- exhaustive
+ - exhaustive
- exptostd
- fatcontext
#- forbidigo
@@ -78,6 +78,8 @@ linters:
# Run with --fast=false for more extensive checks
fast: true
linters-settings:
+ exhaustive:
+ default-signifies-exhaustive: true
gosec:
severity: medium
confidence: medium
diff --git a/apis/metal3.io/v1alpha1/baremetalhost_types.go b/apis/metal3.io/v1alpha1/baremetalhost_types.go
index ba1b4333..426a7a89 100644
--- a/apis/metal3.io/v1alpha1/baremetalhost_types.go
+++ b/apis/metal3.io/v1alpha1/baremetalhost_types.go
@@ -1113,6 +1113,7 @@ func (host *BareMetalHost) OperationMetricForState(operation ProvisioningState)
metric = &history.Provision
case StateDeprovisioning:
metric = &history.Deprovision
+ default:
}
return
}
diff --git a/internal/controller/metal3.io/baremetalhost_controller.go b/internal/controller/metal3.io/baremetalhost_controller.go
index 33310bf7..1998627e 100644
--- a/internal/controller/metal3.io/baremetalhost_controller.go
+++ b/internal/controller/metal3.io/baremetalhost_controller.go
@@ -586,6 +586,7 @@ func getCurrentImage(host *metal3api.BareMetalHost) *metal3api.Image {
if host.Spec.Image != nil && host.Spec.Image.URL != "" {
return host.Spec.Image.DeepCopy()
}
+ default:
}
return nil
}
@@ -816,6 +817,7 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf
if info.host.Spec.AutomatedCleaningMode == metal3api.CleaningModeDisabled {
preprovImgFormats = nil
}
+ default:
}
preprovImg, err := r.getPreprovImage(info, preprovImgFormats)
diff --git a/internal/controller/metal3.io/host_state_machine.go b/internal/controller/metal3.io/host_state_machine.go
index 8b382553..6d88591b 100644
--- a/internal/controller/metal3.io/host_state_machine.go
+++ b/internal/controller/metal3.io/host_state_machine.go
@@ -107,6 +107,7 @@ func (hsm *hostStateMachine) updateHostStateFrom(initialState metal3api.Provisio
if actionRes := hsm.ensureCapacity(info, hsm.NextState); actionRes != nil {
return actionRes
}
+ default:
}
info.log.Info("changing provisioning state",
@@ -137,6 +138,7 @@ func (hsm *hostStateMachine) updateHostStateFrom(initialState metal3api.Provisio
info.log.Info("saving boot mode",
"new mode", hsm.Host.Status.Provisioning.BootMode)
}
+ default:
}
}
@@ -163,6 +165,7 @@ func (hsm *hostStateMachine) checkDelayedHost(info *reconcileInfo) actionResult
if actionRes := hsm.ensureCapacity(info, info.host.Status.Provisioning.State); actionRes != nil {
return actionRes
}
+ default:
}
return nil
@@ -299,6 +302,7 @@ func (hsm *hostStateMachine) checkDetachedHost(info *reconcileInfo) (result acti
switch info.host.Status.Provisioning.State {
case metal3api.StateProvisioned, metal3api.StateExternallyProvisioned, metal3api.StateReady, metal3api.StateAvailable:
return hsm.Reconciler.detachHost(hsm.Provisioner, info)
+ default:
}
}
if info.host.Status.ErrorType == metal3api.DetachError {
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
index 9a4b4589..4c4923ad 100644
--- a/pkg/provisioner/ironic/ironic.go
+++ b/pkg/provisioner/ironic/ironic.go
@@ -335,21 +335,17 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat
return result, err
}
+ if data.State == metal3api.StateProvisioning && data.CurrentImage.IsLiveISO() {
+ // Live ISO doesn't need pre-provisioning image
+ return result, nil
+ }
+
+ if data.State == metal3api.StateDeprovisioning && data.AutomatedCleaningMode == metal3api.CleaningModeDisabled {
+ // No need for pre-provisioning image if cleaning disabled
+ return result, nil
+ }
+
switch data.State {
- case metal3api.StateProvisioning,
- metal3api.StateDeprovisioning:
- if data.State == metal3api.StateProvisioning {
- if data.CurrentImage.IsLiveISO() {
- // Live ISO doesn't need pre-provisioning image
- return result, nil
- }
- } else {
- if data.AutomatedCleaningMode == metal3api.CleaningModeDisabled {
- // No need for pre-provisioning image if cleaning disabled
- return result, nil
- }
- }
- fallthrough
case metal3api.StateInspecting,
metal3api.StatePreparing:
if deployImageInfo == nil {
@@ -360,6 +356,7 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat
}
return result, err
}
+ default:
}
return result, nil
@@ -1724,6 +1721,7 @@ func (p *ironicProvisioner) loadBusyHosts() (hosts map[string]struct{}, err erro
if !strings.Contains(node.BootInterface, "virtual-media") {
hosts[node.Name] = struct{}{}
}
+ default:
}
}
--
2.50.1

View File

@@ -0,0 +1,91 @@
From 509ba92a8ed7303a418c5277f7544db2765c3802 Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@protonmail.com>
Date: Wed, 2 Jul 2025 17:33:46 +0200
Subject: [PATCH 2/5] Stop requiring DEPLOY_KERNEL/RAMDISK
Ironic has global configuration that allows specifying them, even
depending on the architecture. Our ironic-image supports that when
IPA downloader is used (and should start supporting explicit variables
too).
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
(cherry picked from commit 0f1ef6cbeb8815f19d853ba5eab1e70c7d85e2ec)
---
pkg/provisioner/ironic/factory.go | 6 ++----
pkg/provisioner/ironic/factory_test.go | 9 ++-------
pkg/provisioner/ironic/ironic.go | 10 +++-------
3 files changed, 7 insertions(+), 18 deletions(-)
diff --git a/pkg/provisioner/ironic/factory.go b/pkg/provisioner/ironic/factory.go
index 19571eb0..15f636b3 100644
--- a/pkg/provisioner/ironic/factory.go
+++ b/pkg/provisioner/ironic/factory.go
@@ -114,10 +114,8 @@ func loadConfigFromEnv(havePreprovImgBuilder bool) (ironicConfig, error) {
c.deployRamdiskURL = os.Getenv("DEPLOY_RAMDISK_URL")
c.deployISOURL = os.Getenv("DEPLOY_ISO_URL")
if !havePreprovImgBuilder {
- if c.deployISOURL == "" &&
- (c.deployKernelURL == "" || c.deployRamdiskURL == "") {
- return c, errors.New("either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set")
- }
+ // NOTE(dtantsur): with a PreprovisioningImage controller, it makes sense to set only the kernel.
+ // Without it, either both or neither must be set.
if (c.deployKernelURL == "" && c.deployRamdiskURL != "") ||
(c.deployKernelURL != "" && c.deployRamdiskURL == "") {
return c, errors.New("DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together")
diff --git a/pkg/provisioner/ironic/factory_test.go b/pkg/provisioner/ironic/factory_test.go
index db47d8b2..0d32eccb 100644
--- a/pkg/provisioner/ironic/factory_test.go
+++ b/pkg/provisioner/ironic/factory_test.go
@@ -98,24 +98,19 @@ func TestLoadConfigFromEnv(t *testing.T) {
ramdiskURL: "http://ramdisk",
},
},
- {
- name: "no deploy info",
- env: EnvFixture{},
- expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set",
- },
{
name: "only kernel",
env: EnvFixture{
kernelURL: "http://kernel",
},
- expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set",
+ expectedError: "DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together",
},
{
name: "only ramdisk",
env: EnvFixture{
ramdiskURL: "http://ramdisk",
},
- expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set",
+ expectedError: "DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together",
expectedImgBuildError: "DEPLOY_RAMDISK_URL requires DEPLOY_KERNEL_URL to be set also",
},
{
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
index 4c4923ad..48db865a 100644
--- a/pkg/provisioner/ironic/ironic.go
+++ b/pkg/provisioner/ironic/ironic.go
@@ -348,14 +348,10 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat
switch data.State {
case metal3api.StateInspecting,
metal3api.StatePreparing:
- if deployImageInfo == nil {
- if p.config.havePreprovImgBuilder {
- result, err = transientError(provisioner.ErrNeedsPreprovisioningImage)
- } else {
- result, err = operationFailed("no preprovisioning image available")
- }
- return result, err
+ if deployImageInfo == nil && p.config.havePreprovImgBuilder {
+ result, err = transientError(provisioner.ErrNeedsPreprovisioningImage)
}
+ return result, err
default:
}
--
2.50.1

View File

@@ -0,0 +1,49 @@
From ea10df866f0fc491cac15ba5005f3b820e1ccecb Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@protonmail.com>
Date: Wed, 2 Jul 2025 17:55:48 +0200
Subject: [PATCH 3/5] Remove DEPLOY_KERNEL_URL from deployment scripts for main
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
(cherry picked from commit ddcf3d915819b6344f79fbcec3e28250b217a597)
---
config/default/ironic.env | 2 --
config/overlays/e2e/ironic.env | 2 --
config/render/capm3.yaml | 2 --
3 files changed, 6 deletions(-)
diff --git a/config/default/ironic.env b/config/default/ironic.env
index e72cb3c3..3fe36d25 100644
--- a/config/default/ironic.env
+++ b/config/default/ironic.env
@@ -1,7 +1,5 @@
HTTP_PORT=6180
PROVISIONING_INTERFACE=eth2
DHCP_RANGE=172.22.0.10,172.22.0.100
-DEPLOY_KERNEL_URL=http://172.22.0.2:6180/images/ironic-python-agent.kernel
-DEPLOY_RAMDISK_URL=http://172.22.0.2:6180/images/ironic-python-agent.initramfs
IRONIC_ENDPOINT=http://172.22.0.2:6385/v1/
CACHEURL=http://172.22.0.1/images
diff --git a/config/overlays/e2e/ironic.env b/config/overlays/e2e/ironic.env
index 44147ae0..6f200720 100644
--- a/config/overlays/e2e/ironic.env
+++ b/config/overlays/e2e/ironic.env
@@ -1,3 +1 @@
-DEPLOY_KERNEL_URL=http://192.168.222.1:6180/images/ironic-python-agent.kernel
-DEPLOY_RAMDISK_URL=http://192.168.222.1:6180/images/ironic-python-agent.initramfs
IRONIC_ENDPOINT=https://192.168.222.1:6385/v1/
diff --git a/config/render/capm3.yaml b/config/render/capm3.yaml
index 42283193..7568288f 100644
--- a/config/render/capm3.yaml
+++ b/config/render/capm3.yaml
@@ -2510,8 +2510,6 @@ subjects:
apiVersion: v1
data:
CACHEURL: http://172.22.0.1/images
- DEPLOY_KERNEL_URL: http://172.22.0.2:6180/images/ironic-python-agent.kernel
- DEPLOY_RAMDISK_URL: http://172.22.0.2:6180/images/ironic-python-agent.initramfs
DHCP_RANGE: 172.22.0.10,172.22.0.100
HTTP_PORT: "6180"
IRONIC_ENDPOINT: http://172.22.0.2:6385/v1/
--
2.50.1

View File

@@ -0,0 +1,422 @@
From b2e8a1a42c95a3338c9c83a4781ba4744da5ff6a Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@protonmail.com>
Date: Tue, 24 Jun 2025 18:53:42 +0200
Subject: [PATCH 4/5] Refactor setting various Ironic properties
Currently, Ironic instance_info and properties fields are populated at
random either in most states or before deployment. While potentially
convenient, it makes it very hard to reason about the code.
Now, the logic is split into two parts:
1. configureNode (renamed from configureImages) writes fields that are
considered properties of the node itself: CPU architecture, deploy
images, capabilities, etc.
2. getInstanceUpdateOpts (merge of getImageUpdateOptsForNode and
getUpdateOptsForNode) writes fields that are required for deployment
and thus are properties of instance. This includes images, checksums,
runtime capabilities. As an exception, root device hints fall under
this category and thus are now set in instance_info, not properties.
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
(cherry picked from commit 0c70cba38c926c474f4fa129a7e99ef9827d6ce9)
---
.../metal3.io/baremetalhost_controller.go | 2 +-
pkg/provisioner/ironic/ironic.go | 49 +++++-------
pkg/provisioner/ironic/provision_test.go | 27 +++----
pkg/provisioner/ironic/register.go | 3 +-
pkg/provisioner/ironic/register_test.go | 78 +------------------
pkg/provisioner/provisioner.go | 2 +-
6 files changed, 40 insertions(+), 121 deletions(-)
diff --git a/internal/controller/metal3.io/baremetalhost_controller.go b/internal/controller/metal3.io/baremetalhost_controller.go
index 1998627e..0d0c9562 100644
--- a/internal/controller/metal3.io/baremetalhost_controller.go
+++ b/internal/controller/metal3.io/baremetalhost_controller.go
@@ -848,6 +848,7 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf
PreprovisioningNetworkData: preprovisioningNetworkData,
HasCustomDeploy: hasCustomDeploy(info.host),
DisablePowerOff: info.host.Spec.DisablePowerOff,
+ CPUArchitecture: getHostArchitecture(info.host),
},
credsChanged,
info.host.Status.ErrorType == metal3api.RegistrationError)
@@ -1271,7 +1272,6 @@ func (r *BareMetalHostReconciler) actionProvisioning(prov provisioner.Provisione
BootMode: info.host.Status.Provisioning.BootMode,
HardwareProfile: hwProf,
RootDeviceHints: info.host.Status.Provisioning.RootDeviceHints.DeepCopy(),
- CPUArchitecture: getHostArchitecture(info.host),
}, forceReboot)
if err != nil {
return actionError{errors.Wrap(err, "failed to provision")}
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
index 48db865a..b8e6d72b 100644
--- a/pkg/provisioner/ironic/ironic.go
+++ b/pkg/provisioner/ironic/ironic.go
@@ -311,20 +311,24 @@ func (p *ironicProvisioner) createPXEEnabledNodePort(uuid, macAddress string) er
return nil
}
-func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) {
+func (p *ironicProvisioner) configureNode(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) {
updater := clients.UpdateOptsBuilder(p.log)
deployImageInfo := setDeployImage(p.config, bmcAccess, data.PreprovisioningImage)
updater.SetDriverInfoOpts(deployImageInfo, ironicNode)
- // NOTE(dtantsur): It is risky to update image information for active nodes since it may affect the ability to clean up.
- if (data.CurrentImage != nil || data.HasCustomDeploy) && ironicNode.ProvisionState != string(nodes.Active) {
- p.getImageUpdateOptsForNode(ironicNode, data.CurrentImage, data.BootMode, data.HasCustomDeploy, updater)
- }
updater.SetTopLevelOpt("automated_clean",
data.AutomatedCleaningMode != metal3api.CleaningModeDisabled,
ironicNode.AutomatedClean)
+ opts := clients.UpdateOptsData{
+ "capabilities": buildCapabilitiesValue(ironicNode, data.BootMode),
+ }
+ if data.CPUArchitecture != "" {
+ opts["cpu_arch"] = data.CPUArchitecture
+ }
+ updater.SetPropertiesOpts(opts, ironicNode)
+
_, success, result, err := p.tryUpdateNode(ironicNode, updater)
if !success {
return result, err
@@ -656,40 +660,29 @@ func (p *ironicProvisioner) setCustomDeployUpdateOptsForNode(ironicNode *nodes.N
SetTopLevelOpt("deploy_interface", "custom-agent", ironicNode.DeployInterface)
}
-func (p *ironicProvisioner) getImageUpdateOptsForNode(ironicNode *nodes.Node, imageData *metal3api.Image, bootMode metal3api.BootMode, hasCustomDeploy bool, updater *clients.NodeUpdater) {
+func (p *ironicProvisioner) getInstanceUpdateOpts(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater {
+ updater := clients.UpdateOptsBuilder(p.log)
+
+ hasCustomDeploy := data.CustomDeploy != nil && data.CustomDeploy.Method != ""
+
// instance_uuid
updater.SetTopLevelOpt("instance_uuid", string(p.objectMeta.UID), ironicNode.InstanceUUID)
updater.SetInstanceInfoOpts(clients.UpdateOptsData{
- "capabilities": buildInstanceInfoCapabilities(bootMode),
+ "capabilities": buildInstanceInfoCapabilities(data.BootMode),
+ "root_device": devicehints.MakeHintMap(data.RootDeviceHints),
}, ironicNode)
if hasCustomDeploy {
// Custom deploy process
- p.setCustomDeployUpdateOptsForNode(ironicNode, imageData, updater)
- } else if imageData.IsLiveISO() {
+ p.setCustomDeployUpdateOptsForNode(ironicNode, &data.Image, updater)
+ } else if data.Image.IsLiveISO() {
// Set live-iso format options
- p.setLiveIsoUpdateOptsForNode(ironicNode, imageData, updater)
+ p.setLiveIsoUpdateOptsForNode(ironicNode, &data.Image, updater)
} else {
// Set deploy_interface direct options when not booting a live-iso
- p.setDirectDeployUpdateOptsForNode(ironicNode, imageData, updater)
+ p.setDirectDeployUpdateOptsForNode(ironicNode, &data.Image, updater)
}
-}
-
-func (p *ironicProvisioner) getUpdateOptsForNode(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater {
- updater := clients.UpdateOptsBuilder(p.log)
-
- hasCustomDeploy := data.CustomDeploy != nil && data.CustomDeploy.Method != ""
- p.getImageUpdateOptsForNode(ironicNode, &data.Image, data.BootMode, hasCustomDeploy, updater)
-
- opts := clients.UpdateOptsData{
- "root_device": devicehints.MakeHintMap(data.RootDeviceHints),
- "capabilities": buildCapabilitiesValue(ironicNode, data.BootMode),
- }
- if data.CPUArchitecture != "" {
- opts["cpu_arch"] = data.CPUArchitecture
- }
- updater.SetPropertiesOpts(opts, ironicNode)
return updater
}
@@ -792,7 +785,7 @@ func (p *ironicProvisioner) setUpForProvisioning(ironicNode *nodes.Node, data pr
p.log.Info("starting provisioning", "node properties", ironicNode.Properties)
ironicNode, success, result, err := p.tryUpdateNode(ironicNode,
- p.getUpdateOptsForNode(ironicNode, data))
+ p.getInstanceUpdateOpts(ironicNode, data))
if !success {
return result, err
}
diff --git a/pkg/provisioner/ironic/provision_test.go b/pkg/provisioner/ironic/provision_test.go
index 72ee57b7..40c714e9 100644
--- a/pkg/provisioner/ironic/provision_test.go
+++ b/pkg/provisioner/ironic/provision_test.go
@@ -713,7 +713,7 @@ func TestGetUpdateOptsForNodeWithRootHints(t *testing.T) {
BootMode: metal3api.DefaultBootMode,
RootDeviceHints: host.Status.Provisioning.RootDeviceHints,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -723,7 +723,7 @@ func TestGetUpdateOptsForNodeWithRootHints(t *testing.T) {
Value interface{} // the value being passed to ironic (or value associated with the key)
}{
{
- Path: "/properties/root_device",
+ Path: "/instance_info/root_device",
Value: "userdefined_devicename",
Map: map[string]string{
"name": "s== userd_devicename",
@@ -807,7 +807,7 @@ func TestGetUpdateOptsForNodeVirtual(t *testing.T) {
BootMode: metal3api.DefaultBootMode,
HardwareProfile: hwProf,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -903,9 +903,8 @@ func TestGetUpdateOptsForNodeDell(t *testing.T) {
Image: *host.Spec.Image,
BootMode: metal3api.DefaultBootMode,
HardwareProfile: hwProf,
- CPUArchitecture: "x86_64",
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -930,10 +929,6 @@ func TestGetUpdateOptsForNodeDell(t *testing.T) {
Path: "/instance_uuid",
Value: "27720611-e5d1-45d3-ba3a-222dcfaa4ca2",
},
- {
- Path: "/properties/cpu_arch",
- Value: "x86_64",
- },
}
for _, e := range expected {
@@ -971,7 +966,7 @@ func TestGetUpdateOptsForNodeLiveIso(t *testing.T) {
Image: *host.Spec.Image,
BootMode: metal3api.DefaultBootMode,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -1038,7 +1033,7 @@ func TestGetUpdateOptsForNodeImageToLiveIso(t *testing.T) {
Image: *host.Spec.Image,
BootMode: metal3api.DefaultBootMode,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -1116,7 +1111,7 @@ func TestGetUpdateOptsForNodeLiveIsoToImage(t *testing.T) {
Image: *host.Spec.Image,
BootMode: metal3api.DefaultBootMode,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -1188,7 +1183,7 @@ func TestGetUpdateOptsForNodeCustomDeploy(t *testing.T) {
BootMode: metal3api.DefaultBootMode,
CustomDeploy: host.Spec.CustomDeploy,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -1245,7 +1240,7 @@ func TestGetUpdateOptsForNodeCustomDeployWithImage(t *testing.T) {
BootMode: metal3api.DefaultBootMode,
CustomDeploy: host.Spec.CustomDeploy,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -1312,7 +1307,7 @@ func TestGetUpdateOptsForNodeImageToCustomDeploy(t *testing.T) {
BootMode: metal3api.DefaultBootMode,
CustomDeploy: host.Spec.CustomDeploy,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
@@ -1405,7 +1400,7 @@ func TestGetUpdateOptsForNodeSecureBoot(t *testing.T) {
BootMode: metal3api.UEFISecureBoot,
HardwareProfile: hwProf,
}
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
t.Logf("patches: %v", patches)
diff --git a/pkg/provisioner/ironic/register.go b/pkg/provisioner/ironic/register.go
index 390e463f..9a600189 100644
--- a/pkg/provisioner/ironic/register.go
+++ b/pkg/provisioner/ironic/register.go
@@ -220,7 +220,7 @@ func (p *ironicProvisioner) Register(data provisioner.ManagementAccessData, cred
fallthrough
default:
- result, err = p.configureImages(data, ironicNode, bmcAccess)
+ result, err = p.configureNode(data, ironicNode, bmcAccess)
return result, provID, err
}
}
@@ -246,6 +246,7 @@ func (p *ironicProvisioner) enrollNode(data provisioner.ManagementAccessData, bm
DisablePowerOff: &data.DisablePowerOff,
Properties: map[string]interface{}{
"capabilities": buildCapabilitiesValue(nil, data.BootMode),
+ "cpu_arch": data.CPUArchitecture,
},
}
diff --git a/pkg/provisioner/ironic/register_test.go b/pkg/provisioner/ironic/register_test.go
index e6c302b5..8e524dad 100644
--- a/pkg/provisioner/ironic/register_test.go
+++ b/pkg/provisioner/ironic/register_test.go
@@ -72,7 +72,7 @@ func TestRegisterMACOptional(t *testing.T) {
assert.Equal(t, "", result.ErrorMessage)
}
-func TestRegisterCreateNodeNoImage(t *testing.T) {
+func TestRegisterCreateNode(t *testing.T) {
// Create a host without a bootMACAddress and with a BMC that
// does not require one.
host := makeHost()
@@ -146,79 +146,6 @@ func TestRegisterCreateNodeOldInspection(t *testing.T) {
assert.Equal(t, "inspector", createdNode.InspectInterface)
}
-func TestRegisterCreateWithImage(t *testing.T) {
- // Create a host with Image specified in the Spec
- host := makeHost()
- host.Status.Provisioning.ID = "" // so we don't lookup by uuid
- host.Spec.Image.URL = "theimagefoo"
- host.Spec.Image.Checksum = "thechecksumxyz"
- host.Spec.Image.ChecksumType = "auto"
-
- var createdNode *nodes.Node
-
- createCallback := func(node nodes.Node) {
- createdNode = &node
- }
-
- ironic := testserver.NewIronic(t).WithDrivers().CreateNodes(createCallback).NoNode(host.Namespace + nameSeparator + host.Name).NoNode(host.Name)
- ironic.AddDefaultResponse("/v1/nodes/node-0", "PATCH", http.StatusOK, "{}")
- ironic.Start()
- defer ironic.Stop()
-
- auth := clients.AuthConfig{Type: clients.NoAuth}
- prov, err := newProvisionerWithSettings(host, bmc.Credentials{}, nullEventPublisher, ironic.Endpoint(), auth)
- if err != nil {
- t.Fatalf("could not create provisioner: %s", err)
- }
-
- result, provID, err := prov.Register(provisioner.ManagementAccessData{CurrentImage: host.Spec.Image.DeepCopy()}, false, false)
- if err != nil {
- t.Fatalf("error from Register: %s", err)
- }
- assert.Equal(t, "", result.ErrorMessage)
- assert.Equal(t, createdNode.UUID, provID)
- assert.Equal(t, "", createdNode.DeployInterface)
- updates, _ := ironic.GetLastRequestFor("/v1/nodes/node-0", http.MethodPatch)
- assert.Contains(t, updates, "/instance_info/image_source")
- assert.Contains(t, updates, host.Spec.Image.URL)
- assert.Contains(t, updates, "/instance_info/image_checksum")
- assert.Contains(t, updates, host.Spec.Image.Checksum)
-}
-
-func TestRegisterCreateWithLiveIso(t *testing.T) {
- // Create a host with Image specified in the Spec
- host := makeHostLiveIso()
- host.Status.Provisioning.ID = "" // so we don't lookup by uuid
-
- var createdNode *nodes.Node
-
- createCallback := func(node nodes.Node) {
- createdNode = &node
- }
-
- ironic := testserver.NewIronic(t).WithDrivers().CreateNodes(createCallback).NoNode(host.Namespace + nameSeparator + host.Name).NoNode(host.Name)
- ironic.AddDefaultResponse("/v1/nodes/node-0", "PATCH", http.StatusOK, "{}")
- ironic.Start()
- defer ironic.Stop()
-
- auth := clients.AuthConfig{Type: clients.NoAuth}
- prov, err := newProvisionerWithSettings(host, bmc.Credentials{}, nullEventPublisher, ironic.Endpoint(), auth)
- if err != nil {
- t.Fatalf("could not create provisioner: %s", err)
- }
-
- result, provID, err := prov.Register(provisioner.ManagementAccessData{CurrentImage: host.Spec.Image.DeepCopy()}, false, false)
- if err != nil {
- t.Fatalf("error from Register: %s", err)
- }
- assert.Equal(t, "", result.ErrorMessage)
- assert.Equal(t, createdNode.UUID, provID)
- assert.Equal(t, "ramdisk", createdNode.DeployInterface)
- updates, _ := ironic.GetLastRequestFor("/v1/nodes/node-0", http.MethodPatch)
- assert.Contains(t, updates, "/instance_info/boot_iso")
- assert.Contains(t, updates, host.Spec.Image.URL)
-}
-
func TestRegisterExistingNode(t *testing.T) {
// Create a host without a bootMACAddress and with a BMC that
// does not require one.
@@ -342,6 +269,7 @@ func TestRegisterExistingNodeContinue(t *testing.T) {
"test_password": "******", // ironic returns a placeholder
"test_port": "42",
},
+ Properties: map[string]interface{}{"capabilities": ""},
}).NodeUpdate(nodes.Node{
UUID: "uuid",
})
@@ -521,6 +449,7 @@ func TestRegisterExistingSteadyStateNoUpdate(t *testing.T) {
DeployInterface: imageType.DeployInterface,
InstanceInfo: imageType.InstanceInfo,
DriverInfo: imageType.DriverInfo,
+ Properties: map[string]interface{}{"capabilities": ""},
}).NodeUpdate(nodes.Node{
UUID: "uuid",
})
@@ -577,6 +506,7 @@ func TestRegisterExistingNodeWaiting(t *testing.T) {
"test_password": "******", // ironic returns a placeholder
"test_port": "42",
},
+ Properties: map[string]interface{}{"capabilities": ""},
}
ironic := testserver.NewIronic(t).CreateNodes(createCallback).Node(node).NodeUpdate(nodes.Node{
UUID: "uuid",
diff --git a/pkg/provisioner/provisioner.go b/pkg/provisioner/provisioner.go
index faddd0fd..e2018e63 100644
--- a/pkg/provisioner/provisioner.go
+++ b/pkg/provisioner/provisioner.go
@@ -82,6 +82,7 @@ type ManagementAccessData struct {
PreprovisioningNetworkData string
HasCustomDeploy bool
DisablePowerOff bool
+ CPUArchitecture string
}
type AdoptData struct {
@@ -122,7 +123,6 @@ type ProvisionData struct {
HardwareProfile profile.Profile
RootDeviceHints *metal3api.RootDeviceHints
CustomDeploy *metal3api.CustomDeploy
- CPUArchitecture string
}
type HTTPHeaders []map[string]string
--
2.50.1

View File

@@ -0,0 +1,46 @@
From 5419f8d95306efed8667936156d8081c21e068ed Mon Sep 17 00:00:00 2001
From: Dmitry Tantsur <dtantsur@protonmail.com>
Date: Wed, 9 Jul 2025 14:02:23 +0200
Subject: [PATCH 5/5] Provide inline docs for node configuration calls
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
(cherry picked from commit 778d9342747aefc8079f1ccaa6a14f83b26f28ff)
---
pkg/provisioner/ironic/ironic.go | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
index b8e6d72b..166d929c 100644
--- a/pkg/provisioner/ironic/ironic.go
+++ b/pkg/provisioner/ironic/ironic.go
@@ -311,6 +311,10 @@ func (p *ironicProvisioner) createPXEEnabledNodePort(uuid, macAddress string) er
return nil
}
+// configureNode configures Node properties that are not related to any specific provisioning phase.
+// It populates the AutomatedClean field, as well as capabilities and architecture in Properties.
+// It also calls setDeployImage to populate IPA parameters in DriverInfo and
+// checks if the required PreprovisioningImage is provided and ready.
func (p *ironicProvisioner) configureNode(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) {
updater := clients.UpdateOptsBuilder(p.log)
@@ -426,6 +430,8 @@ func setExternalURL(p *ironicProvisioner, driverInfo map[string]interface{}) map
return driverInfo
}
+// setDeployImage configures the IPA ramdisk parameters in the Node's DriverInfo.
+// It can use either the provided PreprovisioningImage or the global configuration from ironicConfig.
func setDeployImage(config ironicConfig, accessDetails bmc.AccessDetails, hostImage *provisioner.PreprovisioningImage) clients.UpdateOptsData {
deployImageInfo := clients.UpdateOptsData{
deployKernelKey: nil,
@@ -660,6 +666,7 @@ func (p *ironicProvisioner) setCustomDeployUpdateOptsForNode(ironicNode *nodes.N
SetTopLevelOpt("deploy_interface", "custom-agent", ironicNode.DeployInterface)
}
+// getInstanceUpdateOpts constructs InstanceInfo options required to provision a Node in Ironic.
func (p *ironicProvisioner) getInstanceUpdateOpts(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater {
updater := clients.UpdateOptsBuilder(p.log)
--
2.50.1

View File

@@ -2,7 +2,7 @@
<service name="obs_scm">
<param name="url">https://github.com/metal3-io/baremetal-operator</param>
<param name="scm">git</param>
<param name="revision">v0.11.2</param>
<param name="revision">v0.10.2</param>
<param name="version">_auto_</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>

View File

@@ -17,13 +17,19 @@
Name: baremetal-operator
Version: 0.11.2
Version: 0.10.2
Release: 0
Summary: Implements a Kubernetes API for managing bare metal hosts
License: Apache-2.0
URL: https://github.com/metal3-io/baremetal-operator
Source: baremetal-operator-%{version}.tar
Source1: vendor.tar.gz
# Patches related to multi-architecture support, upstream PRs #2506 #2559 #2537
Patch0: 0001-Enable-exhaustive-linter.patch
Patch1: 0002-Stop-requiring-DEPLOY_KERNEL-RAMDISK.patch
Patch2: 0003-Remove-DEPLOY_KERNEL_URL-from-deployment-scripts-for.patch
Patch3: 0004-Refactor-setting-various-Ironic-properties.patch
Patch4: 0005-Provide-inline-docs-for-node-configuration-calls.patch
BuildRequires: golang(API) = 1.24
ExcludeArch: s390

1
cni

Submodule cni deleted from a18c16d6bd

Submodule cni-plugins deleted from b6dd6951d9

Submodule crudini updated: a0919c82ee...c24bedd13b

View File

@@ -7,7 +7,7 @@ MAINTAINER SUSE LLC (https://www.suse.com/)
COPY artifacts.yaml artifacts.yaml
RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes%g' /etc/zypp/zypp.conf
RUN zypper --non-interactive install --no-recommends edge-image-builder qemu-x86 qemu-uefi-aarch64 cni-plugins pigz zstd cpio && zypper -n clean && rm -rf /var/log/*
RUN zypper --non-interactive install --no-recommends edge-image-builder qemu-x86 qemu-uefi-aarch64 cni-plugins; zypper -n clean; rm -rf /var/log/*
# Define labels according to https://en.opensuse.org/Building_derived_containers
# labelprefix=com.suse.application.edge-image-builder
@@ -32,7 +32,8 @@ LABEL com.suse.release-stage="released"
# and also expects the boot kernel to be a portable executable (PE), not ELF.
RUN mkdir -p /usr/share/edk2/aarch64 && \
cp /usr/share/qemu/aavmf-aarch64-code.bin /usr/share/edk2/aarch64/QEMU_EFI-pflash.raw && \
cp /usr/share/qemu/aavmf-aarch64-vars.bin /usr/share/edk2/aarch64/vars-template-pflash.raw
cp /usr/share/qemu/aavmf-aarch64-vars.bin /usr/share/edk2/aarch64/vars-template-pflash.raw && \
mv /boot/vmlinux* /boot/backup-vmlinux
ENTRYPOINT ["/usr/bin/eib"]

View File

@@ -1,7 +1,7 @@
metallb:
chart: metallb
repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"
version: "%%CHART_MAJOR%%.0.1+up0.15.2"
version: "%%CHART_MAJOR%%.0.0+up0.14.9"
endpoint-copier-operator:
chart: endpoint-copier-operator
repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"

1
fakeroot Submodule

Submodule fakeroot added at a93afedfbd

View File

@@ -1,6 +1,6 @@
# SPDX-License-Identifier: MIT
#!BuildTag: %%IMG_PREFIX%%frr:10.2.1
#!BuildTag: %%IMG_PREFIX%%frr:10.2.1-%RELEASE%
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6-%RELEASE%
ARG SLE_VERSION
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
@@ -14,11 +14,11 @@ FROM micro AS final
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
LABEL org.opencontainers.image.title="FRR Container Image"
LABEL org.opencontainers.image.description="frr based on the SLE Base Container Image."
LABEL org.opencontainers.image.version="10.2.1"
LABEL org.opencontainers.image.version="8.5.6"
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
LABEL org.opencontainers.image.created="%BUILDTIME%"
LABEL org.opencontainers.image.vendor="SUSE LLC"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%frr:10.2.1-%RELEASE%"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%frr:8.5.6-%RELEASE%"
LABEL org.openbuildservice.disturl="%DISTURL%"
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
LABEL com.suse.eula="SUSE Combined EULA February 2024"

View File

@@ -2,7 +2,7 @@
<service name="obs_scm">
<param name="url">https://github.com/metallb/frr-k8s</param>
<param name="scm">git</param>
<param name="revision">v0.0.20</param>
<param name="revision">v0.0.16</param>
<param name="version">_auto_</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
@@ -18,4 +18,4 @@
<service name="go_modules">
</service>
<service mode="buildtime" name="set_version" />
</services>
</services>

View File

@@ -17,14 +17,14 @@
Name: frr-k8s
Version: 0.0.20
Release: 0.0.20
Version: 0.0.16
Release: 0.0.16
Summary: A kubernetes based daemonset that exposes a subset of the FRR API in a kubernetes compliant manner.
License: Apache-2.0
URL: https://github.com/metallb/frr-k8s
Source: frr-k8s-%{version}.tar
Source1: vendor.tar.gz
BuildRequires: golang(API) = 1.24
BuildRequires: golang(API) = 1.22
ExcludeArch: s390
ExcludeArch: %{ix86}
@@ -63,4 +63,4 @@ install -D -m0755 frr-k8s %{buildroot}/frr-k8s
/frr-metrics
/frr-k8s
%changelog
%changelog

View File

@@ -1,7 +0,0 @@
<aggregatelist>
<aggregate project="SUSE:SLFO:1.2" >
<binary>grub2-x86_64-efi</binary>
<binary>grub2-arm64-efi</binary>
<repository target="standard" source="standard" />
</aggregate>
</aggregatelist>

View File

@@ -1,33 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
#!BuildTag: %%IMG_PREFIX%%ib-sriov-cni:v%%ib-sriov-cni_version%%
#!BuildTag: %%IMG_PREFIX%%ib-sriov-cni:v%%ib-sriov-cni_version%%-%RELEASE%
ARG SLE_VERSION
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
FROM registry.suse.com/bci/bci-base:$SLE_VERSION AS base
COPY --from=micro / /installroot/
RUN zypper --installroot /installroot --non-interactive install --no-recommends ib-sriov-cni gawk which; \
zypper -n clean; \
rm -rf /var/log/*
FROM micro AS final
# Define labels according to https://en.opensuse.org/Building_derived_containers
# labelprefix=com.suse.application.ib-sriov-cni
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
LABEL org.opencontainers.image.title="SLE ib-sriov-cni Container Image"
LABEL org.opencontainers.image.description="ib-sriov-cni based on the SLE Base Container Image."
LABEL org.opencontainers.image.version="%%ib-sriov-cni_version%%"
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
LABEL org.opencontainers.image.created="%BUILDTIME%"
LABEL org.opencontainers.image.vendor="SUSE LLC"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ib-sriov-cni:%%ib-sriov-cni_version%%-%RELEASE%"
LABEL org.openbuildservice.disturl="%DISTURL%"
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
LABEL com.suse.eula="SUSE Combined EULA February 2024"
LABEL com.suse.lifecycle-url="https://www.suse.com/lifecycle"
LABEL com.suse.image-type="application"
LABEL com.suse.release-stage="released"
# endlabelprefix
COPY --from=base /installroot /
ENTRYPOINT ["/entrypoint.sh"]

View File

@@ -1,19 +0,0 @@
<services>
<service name="kiwi_metainfo_helper" mode="buildtime"/>
<service name="docker_label_helper" mode="buildtime"/>
<service name="replace_using_package_version" mode="buildtime">
<param name="file">Dockerfile</param>
<param name="regex">%%ib-sriov-cni_version%%</param>
<param name="package">ib-sriov-cni</param>
<param name="parse-version">patch</param>
</service>
<service name="replace_using_env" mode="buildtime">
<param name="file">Dockerfile</param>
<param name="eval">IMG_PREFIX=$(rpm --macros=/root/.rpmmacros -E %{?img_prefix})</param>
<param name="var">IMG_PREFIX</param>
<param name="eval">IMG_REPO=$(rpm --macros=/root/.rpmmacros -E %img_repo)</param>
<param name="var">IMG_REPO</param>
<param name="eval">SUPPORT_LEVEL=$(rpm --macros=/root/.rpmmacros -E %support_level)</param>
<param name="var">SUPPORT_LEVEL</param>
</service>
</services>

View File

@@ -1,25 +0,0 @@
<services>
<service name="obs_scm">
<param name="url">https://github.com/k8snetworkplumbingwg/ib-sriov-cni</param>
<param name="scm">git</param>
<param name="revision">v1.3.0</param>
<param name="version">_auto_</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="changesauthor">antonio.alarcon@suse.com</param>
<param name="match-tag">v*</param>
<param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
<param name="without-version">yes</param>
<param name="versionrewrite-replacement">\1</param>
</service>
<service mode="buildtime" name="tar">
<param name="obsinfo">ib-sriov-cni.obsinfo</param>
</service>
<service name="go_modules" />
<service mode="buildtime" name="set_version" />
<service name="replace_using_env" mode="buildtime">
<param name="file">ib-sriov-cni.spec</param>
<param name="var">SOURCE_COMMIT</param>
<param name="eval">SOURCE_COMMIT=$(grep commit ib-sriov-cni.obsinfo | cut -d" " -f2)</param>
</service>
</services>

View File

@@ -1,64 +0,0 @@
#
# spec file for package ib-sriov-cni
#
# Copyright (c) 2025 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
Name: ib-sriov-cni
Version: 0
Release: 0
Summary: Implements a Kubernetes CNI plugin operator for Infiniband SRIOV VFs
License: Apache-2.0
URL: https://github.com/k8snetworkplumbingwg/ib-sriov-cni
Source: %{name}-%{version}.tar
Source1: vendor.tar.gz
BuildRequires: golang(API) = 1.24
ExcludeArch: s390
ExcludeArch: %{ix86}
%description
Network Interface Cards (NICs) with SR-IOV capabilities are managed through physical functions (PFs) and virtual functions (VFs).
A PF is used by the host and usually represents a single NIC port. VF configurations are applied through the PF.
The SR-IOV CNI allows each VF to be treated as a separate network interface, assigned to a container, and configured with its own
MAC, VLAN, IP and more.
Infiniband SR-IOV CNI plugin works with Infiniband SR-IOV device plugin for VF allocation in Kubernetes. A CNI metaplugin such as Multus
gets the allocated VF's deviceID(PCI address) and is responsible for invoking the Infiniband SR-IOV CNI plugin with that deviceID.
%prep
%autosetup -a1 -n %{name}-%{version} -p1
%build
# CGO is disabled by default in upstream Makefile:
%define cgoenabled "0"
# go build constrain (aka tag) "no_openssl" is set by default in upstream Makefile
%define gotags "no_openssl"
%define buildtime %(date +%%Y-%%m-%%dT%%H:%%M:%%S%%z)
%define buildcommit %%SOURCE_COMMIT%%
%define buildldflags "-X main.version=%{version} -X main.commit=%{buildcommit}% -X main.date=%{buildtime}%"
CGO_ENABLED=%{cgoenabled} go build -mod=vendor -buildmode=pie -tags %{gotags} -ldflags %{buildldflags} -o ib-sriov cmd/ib-sriov-cni/main.go
%install
install -D -m0755 ib-sriov %{buildroot}%{_bindir}/ib-sriov
install -D -m0755 images/entrypoint.sh %{buildroot}/entrypoint.sh
%files
%license LICENSE
%doc README.md
%{_bindir}/ib-sriov
/entrypoint.sh
%changelog

1
ipxe

Submodule ipxe deleted from afcb631479

View File

@@ -1,6 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
#!BuildTag: %%IMG_PREFIX%%ironic:32.0.0.1
#!BuildTag: %%IMG_PREFIX%%ironic:32.0.0.1-%RELEASE%
#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.4
#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.4-%RELEASE%
ARG SLE_VERSION
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
@@ -17,19 +17,13 @@ RUN /bin/prepare-efi.sh
COPY --from=micro / /installroot/
RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes%g' /etc/zypp/zypp.conf
RUN zypper --installroot /installroot --non-interactive install --no-recommends \
python3-devel python3 python3-pip \
python313-sushy \
python3-watchdog python313-ironicclient \
git curl sles-release tar gzip vim gawk \
dnsmasq dosfstools apache2 ipcalc ipmitool iproute2 \
bind-utils procps qemu-tools sqlite3 util-linux xorriso \
tftp ipxe-bootimgs crudini \
openstack-ironic
#!ArchExclusiveLine: x86_64
RUN if [ "$(uname -m)" = "x86_64" ];then \
zypper --installroot /installroot --non-interactive install --no-recommends syslinux ; \
zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 bind-utils procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic; \
fi
#!ArchExclusiveLine: aarch64
RUN if [ "$(uname -m)" = "aarch64" ];then \
zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 bind-utils procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic; \
fi
# DATABASE
@@ -47,8 +41,8 @@ LABEL org.opencontainers.image.description="Openstack Ironic based on the SLE Ba
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
LABEL org.opencontainers.image.created="%BUILDTIME%"
LABEL org.opencontainers.image.vendor="SUSE LLC"
LABEL org.opencontainers.image.version="32.0.0.1"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:32.0.0.1-%RELEASE%"
LABEL org.opencontainers.image.version="29.0.4.4"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:29.0.4.4-%RELEASE%"
LABEL org.openbuildservice.disturl="%DISTURL%"
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
LABEL com.suse.eula="SUSE Combined EULA February 2024"
@@ -59,8 +53,8 @@ LABEL com.suse.release-stage="released"
COPY --from=base /installroot /
RUN set -euo pipefail; ln -s /usr/bin/python3.13 /usr/local/bin/python3; \
ln -s /usr/bin/pydoc3.13 /usr/local/bin/pydoc
RUN set -euo pipefail; ln -s /usr/bin/python3.11 /usr/local/bin/python3; \
ln -s /usr/bin/pydoc3.11 /usr/local/bin/pydoc
ENV GRUB_DIR=/tftpboot/boot/grub
@@ -81,19 +75,19 @@ RUN cp /bin/ironic-readiness /bin/ironic-liveness
COPY ironic-config/inspector.ipxe.j2 ironic-config/httpd-ironic-api.conf.j2 \
ironic-config/ipxe_config.template ironic-config/dnsmasq.conf.j2 \
/templates/
/tmp/
# IRONIC #
RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
#!ArchExclusiveLine: x86_64
RUN if [ "$(uname -m)" = "x86_64" ];then \
cp /usr/share/ipxe/snp-x86_64.efi /tftpboot/snponly.efi ;\
cp /usr/share/ipxe/ipxe-x86_64.efi /tftpboot/ipxe.efi ;\
fi
#!ArchExclusiveLine: aarch64
RUN if [ "$(uname -m)" = "aarch64" ]; then\
cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snponly.efi;\
#!ArchExclusiveLine: aarch64
RUN if [ "$(uname -m)" = "aarch64" ]; then\
cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
fi
COPY --from=base /tmp/uefi_esp_*.img /templates/
COPY ironic-config/ironic.conf.j2 ironic-config/network-data-schema-empty.json /etc/ironic/
@@ -105,8 +99,8 @@ RUN rm /etc/ironic/ironic.conf.d/010-ironic.conf
# Custom httpd config, removes all but the bare minimum needed modules
COPY ironic-config/httpd.conf.j2 /etc/httpd/conf/
COPY ironic-config/httpd-modules.conf /etc/httpd/conf.modules.d/
COPY ironic-config/apache2-vmedia.conf.j2 /templates/httpd-vmedia.conf.j2
COPY ironic-config/apache2-ipxe.conf.j2 /templates/httpd-ipxe.conf.j2
COPY ironic-config/apache2-vmedia.conf.j2 /tmp/httpd-vmedia.conf.j2
COPY ironic-config/apache2-ipxe.conf.j2 /tmp/httpd-ipxe.conf.j2
# configure non-root user and set relevant permissions
RUN configure-nonroot.sh && rm -f /bin/configure-nonroot.sh

View File

@@ -11,17 +11,26 @@ Listen [::]:{{ env.IPXE_TLS_PORT }}
SSLCertificateFile {{ env.IPXE_CERT_FILE }}
SSLCertificateKeyFile {{ env.IPXE_KEY_FILE }}
DocumentRoot "/shared/html"
<Directory "/shared/html">
Options Indexes FollowSymLinks
Require all granted
Order Allow,Deny
Allow from all
</Directory>
<Directory ~ "/shared/html/(redfish|ilo|images)/">
Require all denied
<Directory "/shared/html/(redfish|ilo|images)/">
Order Deny,Allow
Deny from all
</Directory>
<Location ~ "^/.*">
SSLRequireSSL
</Location>
</VirtualHost>
<Location ~ "^/grub.*/">
SSLRequireSSL
</Location>
<Location ~ "^/pxelinux.cfg/">
SSLRequireSSL
</Location>
<Location ~ "^/.*\.conf/">
SSLRequireSSL
</Location>
<Location ~ "^/(([0-9]|[a-z]).*-){4}([0-9]|[a-z]).*/">
SSLRequireSSL
</Location>

View File

@@ -24,16 +24,18 @@ Listen [::]:{{ env.VMEDIA_TLS_PORT }}
SSLHonorCipherOrder on
{% endif %}
<Directory ~ "/shared/html">
Require all denied
</Directory>
<Directory ~ "/shared/html/(redfish|ilo)/">
<Directory "/shared/html/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory ~ "/shared/html/(redfish|ilo)/">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Location ~ "^/.*">
SSLRequireSSL
</Location>
</VirtualHost>
<Location ~ "^/(redfish|ilo)/">
SSLRequireSSL
</Location>

View File

@@ -11,8 +11,14 @@ port={{ env.DNS_PORT }}
{%- if env.DHCP_RANGE | length %}
log-dhcp
dhcp-range={{ env.DHCP_RANGE }}
{% endif %}
# It can be used when setting DNS or GW variables.
{%- if env["GATEWAY_IP"] is undefined %}
# Disable default router(s)
dhcp-option=3
{% else %}
dhcp-option=option{% if ":" in env["GATEWAY_IP"] %}6{% endif %}:router,{{ env["GATEWAY_IP"] }}
{% endif %}
{%- if env["DNS_IP"] is undefined %}
# Disable DNS over provisioning network
dhcp-option=6
@@ -20,31 +26,31 @@ dhcp-option=6
dhcp-option=option{% if ":" in env["DNS_IP"] %}6{% endif %}:dns-server,{{ env["DNS_IP"] }}
{% endif %}
{# Network boot options for IPv4 and IPv6 #}
{%- if env.IPV == "4" or env.IPV is undefined %}
# IPv4 Configuration:
dhcp-match=ipxe,175
{# Set the router or disable it. Setting router is IPv4 specific, in v6 there #}
{# are router advertisements that do the same thing. #}
{%- if env["GATEWAY_IP"] is undefined %}
# Disable default router(s)
dhcp-option=3
# Client is already running iPXE; move to next stage of chainloading
{%- if env.IPXE_TLS_SETUP == "true" %}
# iPXE with (U)EFI
dhcp-boot=tag:efi,tag:ipxe,{{ env.IRONIC_HTTP_URL }}/custom-ipxe/snponly.efi
# iPXE with BIOS
dhcp-boot=tag:ipxe,{{ env.IRONIC_HTTP_URL }}/custom-ipxe/undionly.kpxe
{% else %}
dhcp-option=option:router,{{ env["GATEWAY_IP"] }}
dhcp-boot=tag:ipxe,{{ env.IRONIC_HTTP_URL }}/boot.ipxe
{% endif %}
# Note: Need to test EFI booting
dhcp-match=set:efi,option:client-arch,7
dhcp-match=set:efi,option:client-arch,9
dhcp-match=set:efi,option:client-arch,11
# Client is (i)PXE booting on EFI machine
dhcp-boot=tag:efi,/snponly.efi,{{ env.IRONIC_IP }}
# Client is running (i)PXE on BIOS machine
dhcp-boot=tag:!efi,/undionly.kpxe,{{ env.IRONIC_IP }}
{%- if env.IPXE_TLS_SETUP != "true" %}
dhcp-boot=tag:ipxe,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/boot.ipxe
# Client is PXE booting over EFI without iPXE ROM; send EFI version of iPXE chainloader do the same also if iPXE ROM boots but TLS is enabled
{%- if env.IPXE_TLS_SETUP == "true" %}
dhcp-boot=tag:efi,tag:ipxe,snponly.efi
{% endif %}
dhcp-boot=tag:efi,tag:!ipxe,snponly.efi
# Client is running PXE over BIOS; send BIOS version of iPXE chainloader
dhcp-boot=/undionly.kpxe,{{ env.IRONIC_IP }}
{% endif %}
{% if env.IPV == "6" %}
@@ -54,12 +60,22 @@ ra-param={{ env.PROVISIONING_INTERFACE }},0,0
dhcp-vendorclass=set:pxe6,enterprise:343,PXEClient
dhcp-userclass=set:ipxe6,iPXE
# Client is (i)PXE booting on EFI machine
dhcp-option=tag:efi,option6:bootfile-url,{{ env.IRONIC_URL_HOST }}/snponly.efi
# Client is running (i)PXE on BIOS machine
dhcp-option=tag:!efi,option6:bootfile-url,{{ env.IRONIC_URL_HOST }}/undionly.kpxe
{%- if env.IPXE_TLS_SETUP != "true" %}
dhcp-option=tag:pxe6,option6:bootfile-url,{{ env.IRONIC_TFTP_URL }}/snponly.efi
dhcp-option=tag:ipxe6,option6:bootfile-url,{{ env.IRONIC_HTTP_URL }}/boot.ipxe
# It can be used when setting DNS or GW variables.
{%- if env["GATEWAY_IP"] is undefined %}
# Disable default router(s)
dhcp-option=3
{% else %}
dhcp-option=3,{{ env["GATEWAY_IP"] }}
{% endif %}
{%- if env["DNS_IP"] is undefined %}
# Disable DNS over provisioning network
dhcp-option=6
{% else %}
dhcp-option=6,{{ env["DNS_IP"] }}
{% endif %}
{% endif %}
{% endif %}

View File

@@ -29,20 +29,6 @@ Listen [{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}
{% endif %}
{% endif %}
DocumentRoot "/shared/html"
<Directory "/shared/html">
Require all denied
</Directory>
<Directory "/shared/html/images">
Require all granted
</Directory>
# Exclude /images from proxying
ProxyPass "/images" !
ProxyPassReverse "/images" !
{% if env.IRONIC_PRIVATE_PORT == "unix" %}
ProxyPass "/" "unix:/shared/ironic.sock|http://127.0.0.1/"
ProxyPassReverse "/" "unix:/shared/ironic.sock|http://127.0.0.1/"
@@ -65,7 +51,6 @@ Listen [{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}
SSLCertificateKeyFile {{ env.IRONIC_KEY_FILE }}
{% endif %}
<Location />
{% if "IRONIC_HTPASSWD" in env and env.IRONIC_HTPASSWD | length %}
AuthType Basic
@@ -82,9 +67,4 @@ Listen [{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}
<Location ~ "^/(v1/)?(lookup|heartbeat|continue_inspection)" >
Require all granted
</Location>
<Location ~ "^/images(/.*)?$">
Require all granted
</Location>
</VirtualHost>

View File

@@ -8,6 +8,8 @@ LoadModule authz_core_module /usr/lib64/apache2/mod_authz_core.so
LoadModule ssl_module /usr/lib64/apache2/mod_ssl.so
LoadModule env_module /usr/lib64/apache2/mod_env.so
LoadModule proxy_module /usr/lib64/apache2/mod_proxy.so
LoadModule proxy_ajp_module /usr/lib64/apache2/mod_proxy_ajp.so
LoadModule proxy_balancer_module /usr/lib64/apache2/mod_proxy_balancer.so
LoadModule proxy_http_module /usr/lib64/apache2/mod_proxy_http.so
LoadModule slotmem_shm_module /usr/lib64/apache2/mod_slotmem_shm.so
LoadModule headers_module /usr/lib64/apache2/mod_headers.so

View File

@@ -22,43 +22,18 @@ Group ironic-suse
DocumentRoot "/shared/html"
<Directory "/shared/html">
{%- if env.IPXE_TLS_SETUP | lower == "true" %}
Options Indexes FollowSymLinks
Require all denied
{%- else %}
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
{%- endif %}
</Directory>
<Directory ~ "/shared/html/(redfish|ilo)/">
{%- if env.IRONIC_VMEDIA_TLS_SETUP | lower == "true" %}
Require all denied
{%- else %}
Require all granted
{%- endif %}
</Directory>
{%- set serve_img = env.HTTPD_SERVE_NODE_IMAGES | lower %}
{%- set image_tls = env.IRONIC_TLS_SETUP | lower %}
{%- if env.HTTPD_SERVE_NODE_IMAGES | lower == "true" %}
<Directory "/shared/html/images">
Options Indexes FollowSymLinks
AllowOverride None
{%- if serve_img == "true" and image_tls != "true" %}
Require all granted
{%- else %}
Require all denied
{%- endif %}
<FilesMatch "^ironic.*">
{%- if env.IPXE_TLS_SETUP | lower == "true" %}
Require all denied
{%- else %}
Require all granted
{%- endif %}
</FilesMatch>
</Directory>
{% endif %}
<IfModule dir_module>
DirectoryIndex index.html
@@ -95,7 +70,7 @@ AddDefaultCharset UTF-8
MIMEMagicFile conf/magic
</IfModule>
PidFile {{ env.IRONIC_TMP_DATA_DIR }}/httpd.pid
PidFile /var/tmp/httpd.pid
# EnableSendfile directive could speed up deployments but it could also cause
# issues depending on the underlying file system, to learn more:

View File

@@ -4,19 +4,19 @@ debug = true
default_deploy_interface = direct
default_inspect_interface = agent
default_network_interface = noop
enabled_bios_interfaces = no-bios,redfish,idrac-redfish,irmc
enabled_boot_interfaces = ipxe,pxe,fake,redfish-virtual-media,idrac-redfish-virtual-media,redfish-https
enabled_bios_interfaces = no-bios,redfish,idrac-redfish,irmc,ilo
enabled_boot_interfaces = ipxe,ilo-ipxe,pxe,ilo-pxe,fake,redfish-virtual-media,idrac-redfish-virtual-media,ilo-virtual-media,redfish-https
enabled_deploy_interfaces = direct,fake,ramdisk,custom-agent
enabled_firmware_interfaces = no-firmware,fake,redfish
# NOTE(dtantsur): when changing this, make sure to update the driver
# dependencies in Dockerfile.
enabled_hardware_types = ipmi,idrac,irmc,fake-hardware,redfish,manual-management
enabled_inspect_interfaces = agent,irmc,fake,redfish
enabled_management_interfaces = ipmitool,irmc,fake,redfish,idrac-redfish,noop
enabled_hardware_types = ipmi,idrac,irmc,fake-hardware,redfish,manual-management,ilo,ilo5
enabled_inspect_interfaces = agent,irmc,fake,redfish,ilo
enabled_management_interfaces = ipmitool,irmc,fake,redfish,idrac-redfish,ilo,ilo5,noop
enabled_network_interfaces = noop
enabled_power_interfaces = ipmitool,irmc,fake,redfish,idrac-redfish
enabled_raid_interfaces = no-raid,irmc,agent,fake,redfish,idrac-redfish
enabled_vendor_interfaces = no-vendor,ipmitool,idrac-redfish,redfish,fake
enabled_power_interfaces = ipmitool,irmc,fake,redfish,idrac-redfish,ilo
enabled_raid_interfaces = no-raid,irmc,agent,fake,redfish,idrac-redfish,ilo5
enabled_vendor_interfaces = no-vendor,ipmitool,idrac-redfish,redfish,ilo,fake
{% if env.IRONIC_EXPOSE_JSON_RPC | lower == "true" %}
rpc_transport = json-rpc
{% else %}
@@ -33,6 +33,7 @@ my_ipv6 = {{ env.IRONIC_IPV6 }}
{% endif %}
host = {{ env.IRONIC_CONDUCTOR_HOST }}
tempdir = {{ env.IRONIC_TMP_DATA_DIR }}
# If a path to a certificate is defined, use that first for webserver
{% if env.WEBSERVER_CACERT_FILE %}
@@ -47,10 +48,6 @@ isolinux_bin = /usr/share/syslinux/isolinux.bin
# the ESP provided in [conductor]bootloader.
grub_config_path = EFI/BOOT/grub.cfg
# NOTE(hroyrh): updating the default temp directory to fix device cross links
# errors when hard linking
tempdir = /shared/tmp
[agent]
deploy_logs_collect = always
deploy_logs_local_path = /shared/log/ironic/deploy
@@ -89,6 +86,11 @@ network_data_schema = /etc/ironic/network-data-schema-empty.json
automated_clean = {{ env.IRONIC_AUTOMATED_CLEAN }}
# NOTE(dtantsur): keep aligned with [pxe]boot_retry_timeout below.
deploy_callback_timeout = 4800
send_sensor_data = {{ env.SEND_SENSOR_DATA }}
# NOTE(TheJulia): Do not lower this value below 120 seconds.
# Power state is checked every 60 seconds and BMC activity should
# be avoided more often than once every sixty seconds.
send_sensor_data_interval = 160
bootloader_by_arch = {{ env.BOOTLOADER_BY_ARCH }}
verify_step_priority_override = management.clear_job_queue:90
# We don't use this feature, and it creates an additional load on the database
@@ -110,9 +112,6 @@ deploy_ramdisk_by_arch = {{ env.DEPLOY_RAMDISK_BY_ARCH }}
{% if env.DISABLE_DEEP_IMAGE_INSPECTION | lower == "true" %}
disable_deep_image_inspection = True
{% endif %}
# Allowed path for file:// links: ipa-downloader uses /shared/html/images,
# while the bootloader configuration above refers to /templates.
file_url_allowed_paths = /shared/html/images,/templates
[database]
{% if env.IRONIC_USE_MARIADB | lower == "true" %}
@@ -132,7 +131,6 @@ erase_devices_priority = 0
http_root = /shared/html/
http_url = {% if env.VMEDIA_TLS_PORT %}{{ env.IRONIC_HTTPS_VMEDIA_URL }}{% else %}{{ env.IRONIC_HTTP_URL }}{% endif %}
fast_track = {{ env.IRONIC_FAST_TRACK }}
iso_master_path = /shared/html/master_iso_images
{% if env.IRONIC_BOOT_ISO_SOURCE %}
ramdisk_image_download_source = {{ env.IRONIC_BOOT_ISO_SOURCE }}
{% endif %}
@@ -196,7 +194,6 @@ cipher_suite_versions = 3,17
auth_strategy = http_basic
http_basic_auth_user_file = {{ env.IRONIC_RPC_HTPASSWD_FILE }}
host_ip = {{ env.IRONIC_HOST_IP }}
port = {{ env.IRONIC_JSON_RPC_PORT }}
{% if env.IRONIC_TLS_SETUP == "true" %}
use_ssl = true
cafile = {{ env.IRONIC_CACERT_FILE }}
@@ -207,26 +204,6 @@ insecure = {{ env.IRONIC_INSECURE }}
[nova]
send_power_notifications = false
# Sections (oslo_messaging_notifications, sensor_data, metrics) required for sensor data collection using ironic-prometheus-exporter (IPE):
{% if env.SEND_SENSOR_DATA | lower == "true" %}
[oslo_messaging_notifications]
driver = prometheus_exporter
location = /shared/ironic_prometheus_exporter
transport_url = fake://
[sensor_data]
send_sensor_data = {{ env.SEND_SENSOR_DATA }}
# NOTE(TheJulia): Do not lower this value below 120 seconds.
# Power state is checked every 60 seconds and BMC activity should
# be avoided more often than once every sixty seconds.
interval = 160
# Additional sensor_data options can be configured via OS_ environment variables:
# https://docs.openstack.org/ironic/latest/configuration/config.html#sensor-data
[metrics]
backend = collector
{% endif %}
[pxe]
# NOTE(dtantsur): keep this value at least 3x lower than
# [conductor]deploy_callback_timeout so that at least some retries happen.
@@ -244,22 +221,19 @@ enable_netboot_fallback = true
# Enable the fallback path to in-band inspection
ipxe_fallback_script = inspector.ipxe
{% if env.IPXE_TLS_SETUP | lower == "true" %}
ipxe_config_template = /templates/ipxe_config.template
ipxe_config_template = /tmp/ipxe_config.template
{% endif %}
[redfish]
use_swift = false
kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }}
{% if env.BMC_TLS_ENABLED == "true" %}
# idrac uses the same options as the redfish driver
verify_ca = {{ env.BMC_CACERT_FILE }}
{% endif %}
[ilo]
kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }}
use_web_server_for_images = true
[irmc]
kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }}
{% if env.BMC_TLS_ENABLED == "true" %}
verify_ca = {{ env.BMC_CACERT_FILE }}
{% endif %}
[service_catalog]
endpoint_override = {{ env.IRONIC_BASE_URL }}
@@ -269,8 +243,3 @@ endpoint_override = {{ env.IRONIC_BASE_URL }}
cert_file = {{ env.IRONIC_CERT_FILE }}
key_file = {{ env.IRONIC_KEY_FILE }}
{% endif %}
[oci]
{% if env.IRONIC_OCI_AUTH_CONFIG is defined %}
authentication_config = {{ env.IRONIC_OCI_AUTH_CONFIG }}
{% endif %}

View File

@@ -40,10 +40,6 @@ fi
IRONIC_CONFIG="${IRONIC_CONF_DIR}/ironic.conf"
if [[ -z "${IRONIC_OCI_AUTH_CONFIG:-}" ]] && [[ -f "/auth/oci.json" ]]; then
export IRONIC_OCI_AUTH_CONFIG="/auth/oci.json"
fi
configure_json_rpc_auth()
{
if [[ "${IRONIC_EXPOSE_JSON_RPC}" != "true" ]]; then

View File

@@ -18,6 +18,8 @@ export IRONIC_ENABLE_VLAN_INTERFACES=${IRONIC_ENABLE_VLAN_INTERFACES:-${IRONIC_I
# shellcheck disable=SC1091
. /bin/auth-common.sh
export HTTP_PORT=${HTTP_PORT:-80}
if [[ "${IRONIC_USE_MARIADB}" == true ]]; then
if [[ -z "${MARIADB_PASSWORD:-}" ]]; then
echo "FATAL: IRONIC_USE_MARIADB requires password, mount a secret under /auth/mariadb"
@@ -128,8 +130,6 @@ echo 'Options set from Environment variables'
env | grep "^OS_" || true
mkdir -p /shared/html
mkdir -p /shared/tmp
mkdir -p /shared/ironic_prometheus_exporter
if [[ -f /proc/sys/crypto/fips_enabled ]]; then
ENABLE_FIPS_IPA=$(cat /proc/sys/crypto/fips_enabled)

View File

@@ -25,11 +25,6 @@ export IRONIC_GEN_CERT_DIR="${CUSTOM_DATA_DIR}/auto_gen_certs"
export IRONIC_TMP_DATA_DIR="${CUSTOM_DATA_DIR}/tmp"
export PROBE_CONF_DIR="${CUSTOM_CONFIG_DIR}/probes"
export HTTP_PORT=${HTTP_PORT:-80}
# NOTE(elfosardo): the default port for json_rpc in ironic is 8089, but
# we need to use a different port to avoid conflicts with other services
export IRONIC_JSON_RPC_PORT=${IRONIC_JSON_RPC_PORT:-6189}
mkdir -p "${IRONIC_CONF_DIR}" "${PROBE_CONF_DIR}" "${HTTPD_CONF_DIR}" \
"${HTTPD_CONF_DIR_D}" "${DNSMASQ_CONF_DIR}" "${DNSMASQ_TEMP_DIR}" \
"${IRONIC_DB_DIR}" "${IRONIC_GEN_CERT_DIR}" "${DNSMASQ_DATA_DIR}" \
@@ -267,7 +262,7 @@ wait_for_interface_or_ip()
render_j2_config()
{
python3.13 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$1" > "$2"
python3.11 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$1" > "$2"
}
run_ironic_dbsync()

View File

@@ -7,6 +7,7 @@ set -eux
# shellcheck disable=SC1091
. /bin/tls-common.sh
export HTTP_PORT=${HTTP_PORT:-80}
DNSMASQ_EXCEPT_INTERFACE=${DNSMASQ_EXCEPT_INTERFACE:-lo}
export DNS_PORT=${DNS_PORT:-0}
@@ -35,7 +36,7 @@ fi
# Template and write dnsmasq.conf
# we template via /tmp as sed otherwise creates temp files in /etc directory
# where we can't write
python3.13 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' <"/templates/dnsmasq.conf.j2" >"${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"
python3.11 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' <"/tmp/dnsmasq.conf.j2" >"${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"
for iface in $(echo "$DNSMASQ_EXCEPT_INTERFACE" | tr ',' ' '); do
sed -i -e "/^interface=.*/ a\except-interface=${iface}" "${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"

View File

@@ -5,6 +5,7 @@
. /bin/ironic-common.sh
. /bin/auth-common.sh
export HTTP_PORT=${HTTP_PORT:-80}
export VMEDIA_TLS_PORT=${VMEDIA_TLS_PORT:-8083}
export IRONIC_REVERSE_PROXY_SETUP=${IRONIC_REVERSE_PROXY_SETUP:-false}
@@ -35,7 +36,7 @@ fi
export INSPECTOR_EXTRA_ARGS
# Copy files to shared mount
render_j2_config /templates/inspector.ipxe.j2 /shared/html/inspector.ipxe
render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe
# cp -r /etc/httpd/* "${HTTPD_DIR}"
if [[ -f "${HTTPD_CONF_DIR}/httpd.conf" ]]; then
mv "${HTTPD_CONF_DIR}/httpd.conf" "${HTTPD_CONF_DIR}/httpd.conf.example"
@@ -47,7 +48,7 @@ render_j2_config "/etc/httpd/conf/httpd.conf.j2" \
if [[ "$IRONIC_TLS_SETUP" == "true" ]]; then
if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
render_j2_config "/templates/httpd-ironic-api.conf.j2" \
render_j2_config "/tmp/httpd-ironic-api.conf.j2" \
"${HTTPD_CONF_DIR_D}/ironic.conf"
fi
else
@@ -58,7 +59,7 @@ write_htpasswd_files
# Render httpd TLS configuration for /shared/html/<redifsh;ilo>
if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
render_j2_config "/templates/httpd-vmedia.conf.j2" \
render_j2_config "/tmp/httpd-vmedia.conf.j2" \
"${HTTPD_CONF_DIR_D}/vmedia.conf"
fi
@@ -66,7 +67,7 @@ fi
if [[ "$IPXE_TLS_SETUP" == "true" ]]; then
mkdir -p /shared/html/custom-ipxe
chmod 0777 /shared/html/custom-ipxe
render_j2_config "/templates/httpd-ipxe.conf.j2" "${HTTPD_CONF_DIR_D}/ipxe.conf"
render_j2_config "/tmp/httpd-ipxe.conf.j2" "${HTTPD_CONF_DIR_D}/ipxe.conf"
cp "${IPXE_CUSTOM_FIRMWARE_DIR}/undionly.kpxe" \
"${IPXE_CUSTOM_FIRMWARE_DIR}/snponly.efi" \
"/shared/html/custom-ipxe"

View File

@@ -15,13 +15,4 @@ configure_restart_on_certificate_update "${IRONIC_TLS_SETUP}" ironic "${IRONIC_C
configure_ironic_auth
if [[ -d "${BMC_CACERTS_PATH}" ]]; then
# shellcheck disable=SC2034
watchmedo shell-command \
--patterns="*" \
--ignore-directories \
--command='cat "${BMC_CACERTS_PATH}"/* > "${BMC_CACERT_FILE}"' \
"${BMC_CACERTS_PATH}" &
fi
exec /usr/bin/ironic --config-dir "${IRONIC_CONF_DIR}"

View File

@@ -1,20 +0,0 @@
#!/usr/bin/bash
# Set dummy provisioning IP to avoid interface detection issues (not needed to run IPE to service `/metrics`)
export PROVISIONING_IP="127.0.0.1"
# Set to true since running this script implies sensor data metrics are needed
# ironic-prometheus-exporter (IPE) needs to read from oslo_messaging_notifications.location (i.e content under /shared) where Ironic writes to
export SEND_SENSOR_DATA=true
# shellcheck disable=SC1091
. /bin/configure-ironic.sh
# shellcheck disable=SC1091
. /bin/ironic-common.sh
FLASK_RUN_HOST=${FLASK_RUN_HOST:-0.0.0.0}
FLASK_RUN_PORT=${FLASK_RUN_PORT:-9608}
export IRONIC_CONFIG="${IRONIC_CONF_DIR}/ironic.conf"
exec gunicorn -b "${FLASK_RUN_HOST}:${FLASK_RUN_PORT}" -w 4 \
ironic_prometheus_exporter.app.wsgi:application

View File

@@ -1,32 +1,17 @@
#!/usr/bin/bash
# Ramdisk logs path
export LOG_DIR="/shared/log/ironic/deploy"
LOG_DIR="/shared/log/ironic/deploy"
mkdir -p "${LOG_DIR}"
# Function to process log files
process_log_file() {
local FILEPATH="$1"
# shellcheck disable=SC2155
local FILENAME=$(basename "${FILEPATH}")
echo "************ Contents of ${LOG_DIR}/${FILENAME} ramdisk log file bundle **************"
tar -tzf "${FILEPATH}" | while read -r entry; do
echo "${FILENAME}: **** Entry: ${entry} ****"
tar -xOzf "${FILEPATH}" "${entry}" | sed -e "s/^/${FILENAME}: /"
echo
# shellcheck disable=SC2034
python3.11 -m pyinotify --raw-format -e IN_CLOSE_WRITE -v "${LOG_DIR}" |
while read -r event dir mask maskname filename filepath pathname wd; do
#NOTE(elfosardo): a pyinotify event looks like this:
# <Event dir=False mask=0x8 maskname=IN_CLOSE_WRITE name=mylogs.gzip path=/shared/log/ironic/deploy pathname=/shared/log/ironic/deploy/mylogs.gzip wd=1 >
FILENAME=$(echo "${filename}" | cut -d'=' -f2-)
echo "************ Contents of ${LOG_DIR}/${FILENAME} ramdisk log file bundle **************"
tar -xOzvvf "${LOG_DIR}/${FILENAME}" | sed -e "s/^/${FILENAME}: /"
rm -f "${LOG_DIR}/${FILENAME}"
done
rm -f "${FILEPATH}"
}
# Export the function so watchmedo can use it
export -f process_log_file
# Use watchmedo to monitor for file close events
# shellcheck disable=SC2016
watchmedo shell-command \
--patterns="*" \
--ignore-directories \
--command='if [[ "${watch_event_type}" == "closed" ]]; then process_log_file "${watch_src_path}"; fi' \
"${LOG_DIR}"

View File

@@ -1,14 +1,13 @@
#!/bin/bash
export IRONIC_CERT_FILE=/certs/ironic/tls.crt
export IRONIC_KEY_FILE=/certs/ironic/tls.key
export IRONIC_CACERT_FILE=/certs/ca/ironic/tls.crt
export IRONIC_INSECURE=${IRONIC_INSECURE:-false}
export IRONIC_SSL_PROTOCOL=${IRONIC_SSL_PROTOCOL:-"-ALL +TLSv1.2 +TLSv1.3"}
export IPXE_SSL_PROTOCOL=${IPXE_SSL_PROTOCOL:-"-ALL +TLSv1.2 +TLSv1.3"}
export IRONIC_VMEDIA_SSL_PROTOCOL=${IRONIC_VMEDIA_SSL_PROTOCOL:-"ALL"}
# Node image storage is using the same cert and port as the API
export IRONIC_CERT_FILE=/certs/ironic/tls.crt
export IRONIC_KEY_FILE=/certs/ironic/tls.key
export IRONIC_VMEDIA_CERT_FILE=/certs/vmedia/tls.crt
export IRONIC_VMEDIA_KEY_FILE=/certs/vmedia/tls.key
@@ -17,15 +16,15 @@ export IPXE_KEY_FILE=/certs/ipxe/tls.key
export RESTART_CONTAINER_CERTIFICATE_UPDATED=${RESTART_CONTAINER_CERTIFICATE_UPDATED:-"false"}
# By default every cert has to be signed with Ironic's
# CA otherwise node image and IPA verification would fail
export MARIADB_CACERT_FILE=/certs/ca/mariadb/tls.crt
export BMC_CACERTS_PATH=/certs/ca/bmc
export BMC_CACERT_FILE=/conf/bmc-tls.pem
export IRONIC_CACERT_FILE=/certs/ca/ironic/tls.crt
export IPXE_TLS_PORT="${IPXE_TLS_PORT:-8084}"
mkdir -p /certs/ironic
mkdir -p /certs/ca/ironic
mkdir -p /certs/ipxe
mkdir -p /certs/vmedia
if [[ -f "$IRONIC_CERT_FILE" ]] && [[ ! -f "$IRONIC_KEY_FILE" ]]; then
echo "Missing TLS Certificate key file $IRONIC_KEY_FILE"
exit 1
@@ -70,7 +69,6 @@ if [[ -f "$IRONIC_CERT_FILE" ]] || [[ -f "$IRONIC_CACERT_FILE" ]]; then
export IRONIC_TLS_SETUP="true"
export IRONIC_SCHEME="https"
if [[ ! -f "$IRONIC_CACERT_FILE" ]]; then
mkdir -p "$(dirname "${IRONIC_CACERT_FILE}")"
copy_atomic "$IRONIC_CERT_FILE" "$IRONIC_CACERT_FILE"
fi
else
@@ -107,23 +105,11 @@ configure_restart_on_certificate_update()
if [[ "${enabled}" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
if [[ "${service}" == httpd ]]; then
# shellcheck disable=SC2034
signal="WINCH"
fi
# Use watchmedo to monitor certificate file deletion
# shellcheck disable=SC2016
watchmedo shell-command \
--patterns="$(basename "${cert_file}")" \
--ignore-directories \
--command='if [[ "${watch_event_type}" == "deleted" ]]; then pkill -'"${signal}"' '"${service}"'; fi' \
"$(dirname "${cert_file}")" &
python3 -m pyinotify --raw-format -e IN_DELETE_SELF -v "${cert_file}" |
while read -r; do
pkill "-${signal}" "${service}"
done &
fi
}
if [ -d "${BMC_CACERTS_PATH}" ]; then
export BMC_TLS_ENABLED="true"
cat "${BMC_CACERTS_PATH}"/* > "${BMC_CACERT_FILE}"
else
export BMC_TLS_ENABLED="false"
fi

View File

@@ -9,6 +9,8 @@ COPY --from=micro / /installroot/
RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes%g' /etc/zypp/zypp.conf
RUN zypper --installroot /installroot --non-interactive install --no-recommends ironic-ipa-ramdisk-x86_64 ironic-ipa-ramdisk-aarch64 tar gawk curl xz zstd shadow cpio findutils
RUN cp /usr/bin/getopt /installroot/
FROM micro AS final
# Define labels according to https://en.opensuse.org/Building_derived_containers
@@ -30,6 +32,7 @@ LABEL com.suse.release-stage="released"
# endlabelprefix
COPY --from=base /installroot /
RUN cp /getopt /usr/bin/
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
# configure non-root user
COPY configure-nonroot.sh /bin/

View File

@@ -9,6 +9,8 @@ COPY --from=micro / /installroot/
RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes%g' /etc/zypp/zypp.conf
RUN zypper --installroot /installroot --non-interactive install --no-recommends ironic-ipa-ramdisk-aarch64 tar gawk curl xz zstd shadow cpio findutils
RUN cp /usr/bin/getopt /installroot/
FROM micro AS final
# Define labels according to https://en.opensuse.org/Building_derived_containers
@@ -30,6 +32,7 @@ LABEL com.suse.release-stage="released"
# endlabelprefix
COPY --from=base /installroot /
RUN cp /getopt /usr/bin/
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
# configure non-root user
COPY configure-nonroot.sh /bin/

View File

@@ -9,6 +9,8 @@ COPY --from=micro / /installroot/
RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes%g' /etc/zypp/zypp.conf
RUN zypper --installroot /installroot --non-interactive install --no-recommends ironic-ipa-ramdisk-x86_64 tar gawk curl xz zstd shadow cpio findutils
RUN cp /usr/bin/getopt /installroot/
FROM micro AS final
# Define labels according to https://en.opensuse.org/Building_derived_containers
@@ -30,6 +32,7 @@ LABEL com.suse.release-stage="released"
# endlabelprefix
COPY --from=base /installroot /
RUN cp /getopt /usr/bin/
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
# configure non-root user
COPY configure-nonroot.sh /bin/

View File

@@ -76,7 +76,6 @@
<package name="grub2-i386-pc" arch="x86_64"/>
<package name="grub2-x86_64-efi" arch="x86_64"/>
<package name="grub2"/>
<package name="gettext-runtime"/>
<package name="iproute2"/>
<package name="iputils"/>
<package name="kernel-default"/>
@@ -88,7 +87,6 @@
<package name="timezone"/>
<package name="which"/>
<!-- ironic-python-agent specific -->
<package name="chrony"/>
<package name="dmidecode"/>
<package name="efibootmgr"/>
<package name="gptfdisk"/>
@@ -97,14 +95,15 @@
<package name="ipmitool"/>
<package name="iputils"/>
<package name="kbd"/>
<package name="krb5"/>
<package name="lshw"/>
<package name="lvm2"/>
<package name="net-tools"/>
<package name="ntp"/>
<package name="open-iscsi"/>
<package name="openstack-ironic-python-agent"/>
<package name="parted"/>
<package name="psmisc"/>
<package name="python311-proliantutils"/>
<package name="qemu-tools"/>
<package name="timezone"/>
<package name="which"/>

View File

@@ -29,12 +29,12 @@ Source0: config.sh
Source10: ironic-ipa-ramdisk.kiwi
Source20: root
#!BuildIgnore: systemd-mini
BuildRequires: systemd
BuildRequires: -post-build-checks
BuildRequires: bash
BuildRequires: kiwi
BuildRequires: kiwi-tools
BuildRequires: zypper
BuildArch: noarch
BuildRequires: checkmedia
BuildRequires: acl
@@ -55,6 +55,7 @@ BuildRequires: grub2-x86_64-efi
%ifarch aarch64
BuildRequires: grub2-arm64-efi
%endif
BuildRequires: haveged
BuildRequires: hdparm
BuildRequires: hwinfo
BuildRequires: ipmitool
@@ -64,7 +65,7 @@ BuildRequires: kernel-default
BuildRequires: kernel-firmware-all
BuildRequires: lvm2
BuildRequires: net-tools
BuildRequires: chrony
BuildRequires: ntp
BuildRequires: open-iscsi
BuildRequires: openssh
BuildRequires: openstack-ironic-python-agent
@@ -76,6 +77,7 @@ BuildRequires: pkgconfig
BuildRequires: Mesa-gallium
BuildRequires: plymouth
BuildRequires: plymouth-scripts
BuildRequires: python311-proliantutils
BuildRequires: psmisc
BuildRequires: qemu-tools
BuildRequires: sg3_utils
@@ -103,9 +105,6 @@ BuildRequires: lshw
BuildRequires: kbd
BuildRequires: dmidecode
BuildRequires: efibootmgr
BuildRequires: glibc-locale
BuildRequires: krb5
BuildRequires: gettext-runtime
%ifarch x86_64
BuildRequires: syslinux
%endif
@@ -114,9 +113,10 @@ BuildRequires: syslinux
Kernel and ramdisk image for use with Metal3
%package %{_arch}
BuildArch: noarch
Summary: Kernel and ramdisk image for Metal3
Group: System/Management
Provides: openstack-ironic-python-agent = %{version}
Obsoletes: openstack-ironic-python-agent < %{version}
%description %{_arch}
Kernel and ramdisk image for use with Metal3

View File

@@ -1,8 +1,8 @@
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.29.1-%RELEASE%
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.29.1
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.12.1-%RELEASE%
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.12.1
# Base image version, should match the tag above
ARG KIWIVERSION="10.2.29"
ARG KIWIVERSION="10.2.12"
FROM registry.suse.com/bci/kiwi:${KIWIVERSION}
ARG KIWIVERSION
@@ -15,7 +15,7 @@ LABEL org.opencontainers.image.version="${KIWIVERSION}"
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
LABEL org.opencontainers.image.created="%BUILDTIME%"
LABEL org.opencontainers.image.vendor="SUSE LLC"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kiwi-builder:${KIWIVERSION}.0-%RELEASE%"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kiwi-builder:${KIWIVERSION}.1-%RELEASE%"
LABEL org.openbuildservice.disturl="%DISTURL%"
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
LABEL com.suse.eula="SUSE Combined EULA February 2024"
@@ -33,6 +33,4 @@ RUN mkdir -p /micro-sdk/defs
ADD SL-Micro.kiwi /micro-sdk/defs
ADD SL-Micro.kiwi.4096 /micro-sdk/defs
ADD config.sh /micro-sdk/defs
ADD disk.sh /micro-sdk/defs
ADD editbootinstall_rpi.sh /micro-sdk/defs
ADD editbootinstall_pine64.sh /micro-sdk/defs

View File

@@ -1,28 +0,0 @@
The following files are coming from _upstream_ https://build.opensuse.org/package/show/SUSE:SLFO:Products:SL-Micro:6.2/SL-Micro :
* SL-Micro.kiwi
* disk.sh
* config.sh
* editbootinstall_pine64.sh
* editbootinstall_rpi.sh
Those can be downloaded as:
```
curl -LO https://src.suse.de/products/SL-Micro/raw/branch/6.2/SL-Micro/SL-Micro.kiwi
```
The SL-Micro.kiwi file needs to be modified to append a few packages on the bootstrap stanza to be able to generate images with no SSL errors:
```
<packages type="bootstrap">
<package name="filesystem"/>
+ <package name="coreutils"/>
+ <package name="ca-certificates"/>
+ <package name="ca-certificates-mozilla"/>
</packages>
```
The SL-Micro.kiwi.4096 file needs to be modified to modify the `target_blocksize="4096"` where appropiate.
All the other files are used verbatim.

View File

@@ -30,13 +30,16 @@
<profile name="x86-self_install" description="Raw disk for x86_64 - uEFI" arch="x86_64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64" description="Raw disk for aarch64 - uEFI" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-self_install" description="Raw disk for aarch64" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-rt" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-rt-encrypted" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
<profile name="aarch64-rt-rpi" description="Raw disk for aarch64 with RT kernel on Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-rt-self_install" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
@@ -57,15 +60,6 @@
<profile name="rpi" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="rpi-self_install" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-encrypted" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="x86-qcow" description="qcow2 for x86_64 - uEFI" arch="x86_64">
<requires profile="bootloader"/>
</profile>
@@ -95,15 +89,6 @@
</profile>
<profile name="ppc64le-4096ss-self_install" description="Raw disk for PPc64 - 4096 sector size" arch="ppc64le">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-64kb" description="Build 64K page size aarch64 images" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-64kb-encrypted" description="Build 64K page size aarch64 images" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-64kb-self_install" description="Build 64K page size aarch64 images" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<!-- Images (flavor + platform) -->
<profile name="Default" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="x86_64">
@@ -169,10 +154,18 @@
<requires profile="full"/>
<requires profile="aarch64"/>
</profile>
<profile name="Default-RPi" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="aarch64">
<requires profile="full"/>
<requires profile="rpi"/>
</profile>
<profile name="Base" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64"/>
</profile>
<profile name="Base-RPi" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
<requires profile="container-host"/>
<requires profile="rpi"/>
</profile>
<profile name="Base-RT" description="SL Micro with Podman as raw image with uEFI boot" arch="x86_64">
<requires profile="container-host"/>
<requires profile="x86-rt"/>
@@ -186,6 +179,10 @@
<requires profile="container-host"/>
<requires profile="aarch64-rt"/>
</profile>
<profile name="Base-RT-RPi" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-rt-rpi"/>
</profile>
<profile name="Base-RT-SelfInstall" description="SL Micro with Podman as raw image with uEFI boot - SelfInstall" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-rt-self_install"/>
@@ -280,42 +277,10 @@
<requires profile="ppc64le-4096ss-self_install"/>
<requires profile="self_install"/>
</profile>
<profile name="Default-64kb-SelfInstall" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="full"/>
<requires profile="aarch64-64kb-self_install"/>
</profile>
<profile name="Base-64kb-SelfInstall" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-64kb-self_install"/>
</profile>
<profile name="Default-64kb" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="full"/>
<requires profile="aarch64-64kb"/>
</profile>
<profile name="Base-64kb" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-64kb"/>
</profile>
<profile name="Default-64kb-encrypted" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="full"/>
<requires profile="aarch64-64kb-encrypted"/>
</profile>
<profile name="Base-64kb-encrypted" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-64kb-encrypted"/>
</profile>
<profile name="RaspberryPi-SelfInstall" description="SL Micro for Rapsberry Pi" arch="aarch64">
<requires profile="full"/>
<requires profile="rpi-self_install"/>
</profile>
<profile name="RaspberryPi" description="SL Micro for Raspberry Pi" arch="aarch64">
<requires profile="full"/>
<requires profile="rpi"/>
</profile>
</profiles>
<preferences profiles="x86-encrypted,x86-rt-encrypted">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -326,8 +291,7 @@
initrd_system="dracut"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 rd.kiwi.oem.luks.reencrypt rd.kiwi.oem.luks.reencrypt_randompass quiet systemd.show_status=1"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -359,7 +323,7 @@
</type>
</preferences>
<preferences profiles="x86,x86-rt">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -370,8 +334,7 @@
initrd_system="dracut"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -396,7 +359,7 @@
</preferences>
<preferences profiles="x86-self_install,x86-rt-self_install">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -411,8 +374,7 @@
installboot="install"
install_continue_on_timeout="false"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -435,8 +397,9 @@
</systemdisk>
</type>
</preferences>
<preferences profiles="aarch64,aarch64-rt,aarch64-64kb">
<version>6.2</version>
<preferences profiles="rpi,aarch64-rt-rpi">
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -451,96 +414,11 @@
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1"
bootpartition="false"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="false"
disk_start_sector="8192"
>
<bootloader name="grub2" console="gfxterm" timeout="3" />
<systemdisk>
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/arm64-efi" mountpoint="boot/grub2/arm64-efi"/>
<volume name="boot/writable"/>
<volume name="usr/local"/>
<volume name="var" copy_on_write="false"/>
</systemdisk>
</type>
</preferences>
<preferences profiles="aarch64-encrypted,aarch64-rt-encrypted,aarch64-64kb-encrypted">
<version>6.2</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<type
image="oem"
initrd_system="dracut"
installiso="true"
filesystem="btrfs"
installboot="install"
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 rd.kiwi.oem.luks.reencrypt rd.kiwi.oem.luks.reencrypt_randompass quiet systemd.show_status=1"
bootpartition="false"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="false"
disk_start_sector="8192"
luks_version="luks2"
luks="1234"
luks_randomize="false"
luks_pbkdf="pbkdf2"
>
<luksformat>
<option name="--cipher" value="aes-xts-plain64"/>
</luksformat>
<bootloader name="grub2" console="gfxterm" use_disk_password="true" timeout="3" />
<systemdisk>
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/arm64-efi" mountpoint="boot/grub2/arm64-efi"/>
<volume name="boot/writable"/>
<volume name="usr/local"/>
<volume name="var" copy_on_write="false"/>
</systemdisk>
</type>
</preferences>
<preferences profiles="rpi">
<version>6.2</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<type
image="oem"
initrd_system="dracut"
installiso="true"
filesystem="btrfs"
installboot="install"
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200n8 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
efipartsize="128"
editbootinstall="editbootinstall_rpi.sh"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="false"
@@ -560,8 +438,9 @@
</systemdisk>
</type>
</preferences>
<preferences profiles="aarch64-self_install,aarch64-rt-self_install,aarch64-64kb-self_install">
<version>6.2</version>
<preferences profiles="aarch64,aarch64-rt">
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -571,20 +450,19 @@
image="oem"
initrd_system="dracut"
installiso="true"
installpxe="true"
filesystem="btrfs"
installboot="install"
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
efipartsize="128"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="true"
disk_start_sector="8192"
btrfs_quota_groups="false"
disk_start_sector="4096"
>
<bootloader name="grub2" console="gfxterm" timeout="3" />
<systemdisk>
@@ -600,8 +478,8 @@
</systemdisk>
</type>
</preferences>
<preferences profiles="rpi-self_install">
<version>6.2</version>
<preferences profiles="aarch64-self_install,aarch64-rt-self_install">
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -616,14 +494,13 @@
installboot="install"
install_continue_on_timeout="false"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200n8 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
efipartsize="128"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
btrfs_root_is_readonly_snapshot="true"
editbootinstall="editbootinstall_rpi.sh"
btrfs_quota_groups="true"
disk_start_sector="4096"
>
@@ -643,7 +520,7 @@
</preferences>
<preferences profiles="s390-kvm">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -681,7 +558,7 @@
<preferences profiles="s390-dasd">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -719,7 +596,7 @@
<preferences profiles="s390-fba">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -754,7 +631,7 @@
</preferences>
<preferences profiles="s390-fcp">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -793,7 +670,7 @@
</preferences>
<preferences profiles="x86-vmware">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -804,7 +681,6 @@
filesystem="btrfs"
format="vmdk"
firmware="uefi"
efipartsize="512"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -825,11 +701,11 @@
<volume name="var" copy_on_write="false"/>
</systemdisk>
<size unit="G">24</size>
<machine memory="1024" HWversion="17" guestOS="suse-64"/>
<machine memory="1024" HWversion="10" guestOS="suse-64"/>
</type>
</preferences>
<preferences profiles="x86-qcow">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -840,8 +716,7 @@
format="qcow2"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=qemu"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=qemu"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -865,9 +740,9 @@
<size unit="G">32</size>
</type>
</preferences>
<preferences profiles="aarch64-qcow">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -878,8 +753,8 @@
format="qcow2"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=qemu"
efipartsize="128"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=qemu"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -890,7 +765,7 @@
<systemdisk>
<volume name="home"/>
<volume name="root"/>
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/arm64-efi" mountpoint="boot/grub2/arm64-efi"/>
<volume name="boot/writable"/>
@@ -902,7 +777,7 @@
</preferences>
<preferences profiles="ppc64le-512ss">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -913,7 +788,7 @@
image="oem"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -925,7 +800,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -935,7 +810,7 @@
</type>
</preferences>
<preferences profiles="ppc64le-4096ss">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -949,7 +824,7 @@
target_blocksize="4096"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -961,7 +836,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -972,7 +847,7 @@
</preferences>
<preferences profiles="ppc64le-512ss-self_install">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -985,7 +860,7 @@
installpxe="true"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -1002,7 +877,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -1012,7 +887,7 @@
</type>
</preferences>
<preferences profiles="ppc64le-4096ss-self_install">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -1028,7 +903,7 @@
target_blocksize="4096"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -1045,7 +920,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -1061,17 +936,20 @@
</repository>
<packages type="image" profiles="full">
<namedCollection name="transactional_base"/>
<package name="patterns-base-transactional_base"/>
<namedCollection name="base_transactional"/>
<package name="patterns-base-transactional"/>
<namedCollection name="salt_minion"/>
<package name="patterns-base-salt_minion"/>
<namedCollection name="kvm_host"/>
<package name="patterns-micro-kvm_host"/>
<package name="patterns-base-kvm_host"/>
<package name="lzop"/>
<namedCollection name="container_runtime_podman"/>
<package name="patterns-container-runtime_podman"/>
<package name="patterns-container-runtime_podman"/>
<namedCollection name="cockpit"/>
<package name="patterns-cockpit"/>
<package name="patterns-base-cockpit"/>
<namedCollection name="selinux"/>
<package name="patterns-base-selinux"/>
<package name="policycoreutils-python-utils"/>
<package name="suseconnect-ng"/>
<package name="SL-Micro-release"/>
<package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
@@ -1081,7 +959,7 @@
<package name="libpwquality-tools"/>
</packages>
<packages type="image" profiles="x86-encrypted,x86-rt-encrypted,aarch64-encrypted,aarch64-rt-encrypted,aarch64-64kb-encrypted">
<packages type="image" profiles="x86-encrypted,x86-rt-encrypted">
<!-- full disk encryption stuff -->
<package name="device-mapper"/>
<package name="cryptsetup"/>
@@ -1094,12 +972,13 @@
</packages>
<packages type="image" profiles="container-host">
<namedCollection name="transactional_base"/>
<package name="patterns-base-transactional_base"/>
<namedCollection name="base_transactional"/>
<package name="patterns-base-transactional"/>
<namedCollection name="container_runtime_podman"/>
<package name="patterns-container-runtime_podman"/>
<namedCollection name="selinux"/>
<package name="patterns-base-selinux"/>
<package name="policycoreutils-python-utils"/>
<package name="suseconnect-ng"/>
<package name="SL-Micro-release"/>
<package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
@@ -1123,16 +1002,16 @@
<package name="jeos-firstboot"/>
</packages>
<packages type="image" profiles="x86-qcow,x86-vmware,aarch64-qcow,ppc64le-512ss,ppc64le-4096ss,s390-dasd,s390-fcp">
<packages type="image" profiles="x86-qcow,x86-vmware,aarch64-qcow">
<package name="cloud-init"/>
<package name="cloud-init-config-suse"/>
</packages>
<packages type="image">
<namedCollection name="transactional_base"/>
<package name="patterns-base-transactional_base"/>
<namedCollection name="base_transactional"/>
<package name="patterns-base-transactional"/>
<namedCollection name="hardware"/>
<package name="patterns-micro-hardware"/>
<package name="patterns-base-hardware"/>
<package name="grub2"/>
<package name="glibc-locale-base"/>
<package name="ca-certificates"/>
@@ -1151,7 +1030,7 @@
<package name="NetworkManager"/>
<package name="NetworkManager-branding-SLE"/>
<package name="ModemManager"/>
<!-- FIXME does not build without control file which is obsolete
<!-- FIXME does not build without control file which is obsolete
<package name="live-add-yast-repos"/> -->
<package name="parted"/> <!-- seems missing to deploy the image -->
<package name="iptables"/> <!-- needed by RKE2 -->
@@ -1171,18 +1050,14 @@
<package name="kpartx" arch="s390x"/>--> <!-- previous releases picked it always, now kiwi picks partx instead -->
</packages>
<!-- rpi kernel-default-base does not provide all necessary drivers -->
<packages type="image" profiles="aarch64,rpi,rpi-self_install,aarch64-self_install,x86,x86-encrypted,aarch64-encrypted,x86-legacy,x86-self_install,x86-vmware,x86-qcow,aarch64-qcow,s390-kvm,s390-dasd,s390-fba,s390-fcp,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<packages type="image" profiles="rpi,aarch64-self_install,x86,x86-encrypted,x86-legacy,x86-self_install,x86-vmware,x86-qcow,aarch64,aarch64-qcow,s390-kvm,s390-dasd,s390-fba,s390-fcp,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<package name="kernel-default"/>
<package name="kernel-firmware-all"/>
</packages>
<packages type="image" profiles="aarch64-64kb,aarch64-64kb-encrypted,aarch64-64kb-self_install">
<package name="kernel-64kb"/>
<package name="kernel-firmware-all"/>
</packages>
<packages type="image" profiles="x86-rt,x86-rt-self_install,x86-rt-encrypted,aarch64-rt,aarch64-rt-encrypted,aarch64-rt-self_install">
<packages type="image" profiles="x86-rt,x86-rt-self_install,x86-rt-encrypted,aarch64-rt,aarch64-rt-rpi,aarch64-rt-self_install">
<package name="kernel-rt"/>
<package name="kernel-firmware-all"/>
<!-- FIXME intentionally removed from ALP code stream
<!-- FIXME intentionally removed from ALP code stream
<package name="cpuset"/> -->
</packages>
<packages type="image" profiles="s390-kvm,s390-dasd,s390-fba,s390-fcp">
@@ -1194,18 +1069,17 @@
<packages type="image" profiles="s390-fcp">
<package name="multipath-tools"/>
</packages>
<!-- "oem" images uses kiwi for partition/fs resize (-repart) and SelfInstall images in addition for deployment (-dump). -->
<packages type="image" profiles="x86,x86-encrypted,x86-rt-encrypted,x86-self_install,x86-legacy,x86-vmware,x86-rt,x86-rt-self_install,x86-qcow,aarch64-qcow,aarch64,aarch64-encrypted,aarch64-64kb-encrypted,rpi,rpi-self_install,aarch64-self_install,aarch64-64kb,aarch64-64kb-self_install,aarch64-rt,aarch64-rt-self_install,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<packages type="image" profiles="x86,x86-encrypted,x86-rt-encrypted,x86-self_install,x86-legacy,x86-vmware,x86-rt,x86-rt-self_install,x86-qcow,aarch64,aarch64-qcow,rpi,aarch64-self_install,aarch64-rt,aarch64-rt-rpi,aarch64-rt-self_install,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<package name="dracut-kiwi-oem-repart"/>
<package name="dracut-kiwi-oem-dump"/>
</packages>
<packages type="image" profiles="rpi,rpi-self_install">
<packages type="image" profiles="rpi,aarch64-self_install,aarch64-rt,aarch64-rt-rpi,aarch64-rt-self_install">
<package name="raspberrypi-firmware" arch="aarch64"/>
<package name="raspberrypi-firmware-config" arch="aarch64"/>
<package name="raspberrypi-firmware-dt" arch="aarch64"/>
<package name="u-boot-rpiarm64" arch="aarch64"/>
</packages>
<packages type="image" profiles="aarch64,rpi,rpi-self_install,aarch64-self_install,aarch64-rt,aarch64-64kb,aarch64-rt-self_install,aarch64-encrypted,aarch64-rt-encrypted,aarchte-64kb-encrypted">
<packages type="image" profiles="rpi,aarch64-self_install,aarch64-rt,aarch64-rt-self_install">
<package name="dracut-kiwi-oem-repart"/>
<package name="bcm43xx-firmware"/>
<package name="wireless-regdb"/>
@@ -1213,7 +1087,6 @@
<package name="wpa_supplicant"/>
<package name="grub2-arm64-efi"/>
</packages>
<!-- NOTE(edge): Added coreutils, ca-certificates and ca-certificates-mozilla to prevent SSL errors when building the images -->
<packages type="bootstrap">
<package name="filesystem"/>
<package name="coreutils"/>
@@ -1230,15 +1103,14 @@
<packages type="image" profiles="x86-qcow,aarch64-qcow">
<package name="qemu-guest-agent"/>
</packages>
<!-- jsc#PED-8599 -->
<packages type="image" profiles="Base,Base-encrypted,Base-RT,Base-RT-encrypted,Base-fba,Base-dasd,Base-fcp,Base-512,Base-4096,Default,Default-encrypted,Default-fba,Default-dasd,Default-fcp,Default-512,Default-4096,Base-64kb-encrypted,Default-64kb-encrypted">
<packages type="image" profiles="Base,Base-encrypted,Base-RT,Base-RT-encrypted,Base-fba,Base-dasd,Base-fcp,Base-512,Base-4096,Default,Default-encrypted,Default-fba,Default-dasd,Default-fcp,Default-512,Default-4096">
<package name="usbguard"/>
</packages>
<!-- jsc#PED-8788 -->
<packages type="image" profiles="Base-RT,Base-RT-encrypted,x86-rt-encrypted,x86-rt,x86-rt-self_install,aarch64-rt,aarch64-rt-encrypted,aarch64-rt-self_install">
<packages type="image" profiles="Base-RT,Base-RT-encrypted,x86-rt-encrypted,x86-rt,x86-rt-self_install,aarch64-rt,aarch64-rt-self_install">
<package name="stalld"/>
</packages>
</image>

View File

@@ -30,13 +30,16 @@
<profile name="x86-self_install" description="Raw disk for x86_64 - uEFI" arch="x86_64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64" description="Raw disk for aarch64 - uEFI" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-self_install" description="Raw disk for aarch64" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-rt" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-rt-encrypted" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
<profile name="aarch64-rt-rpi" description="Raw disk for aarch64 with RT kernel on Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-rt-self_install" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
@@ -57,15 +60,6 @@
<profile name="rpi" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="rpi-self_install" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-encrypted" description="Raw disk for Raspberry Pi" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="x86-qcow" description="qcow2 for x86_64 - uEFI" arch="x86_64">
<requires profile="bootloader"/>
</profile>
@@ -95,15 +89,6 @@
</profile>
<profile name="ppc64le-4096ss-self_install" description="Raw disk for PPc64 - 4096 sector size" arch="ppc64le">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-64kb" description="Build 64K page size aarch64 images" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-64kb-encrypted" description="Build 64K page size aarch64 images" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<profile name="aarch64-64kb-self_install" description="Build 64K page size aarch64 images" arch="aarch64">
<requires profile="bootloader"/>
</profile>
<!-- Images (flavor + platform) -->
<profile name="Default" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="x86_64">
@@ -169,10 +154,18 @@
<requires profile="full"/>
<requires profile="aarch64"/>
</profile>
<profile name="Default-RPi" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="aarch64">
<requires profile="full"/>
<requires profile="rpi"/>
</profile>
<profile name="Base" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64"/>
</profile>
<profile name="Base-RPi" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
<requires profile="container-host"/>
<requires profile="rpi"/>
</profile>
<profile name="Base-RT" description="SL Micro with Podman as raw image with uEFI boot" arch="x86_64">
<requires profile="container-host"/>
<requires profile="x86-rt"/>
@@ -186,6 +179,10 @@
<requires profile="container-host"/>
<requires profile="aarch64-rt"/>
</profile>
<profile name="Base-RT-RPi" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-rt-rpi"/>
</profile>
<profile name="Base-RT-SelfInstall" description="SL Micro with Podman as raw image with uEFI boot - SelfInstall" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-rt-self_install"/>
@@ -280,55 +277,21 @@
<requires profile="ppc64le-4096ss-self_install"/>
<requires profile="self_install"/>
</profile>
<profile name="Default-64kb-SelfInstall" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="full"/>
<requires profile="aarch64-64kb-self_install"/>
</profile>
<profile name="Base-64kb-SelfInstall" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-64kb-self_install"/>
</profile>
<profile name="Default-64kb" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="full"/>
<requires profile="aarch64-64kb"/>
</profile>
<profile name="Base-64kb" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-64kb"/>
</profile>
<profile name="Default-64kb-encrypted" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="full"/>
<requires profile="aarch64-64kb-encrypted"/>
</profile>
<profile name="Base-64kb-encrypted" description="SL Micro with 64K page size images" arch="aarch64">
<requires profile="container-host"/>
<requires profile="aarch64-64kb-encrypted"/>
</profile>
<profile name="RaspberryPi-SelfInstall" description="SL Micro for Rapsberry Pi" arch="aarch64">
<requires profile="full"/>
<requires profile="rpi-self_install"/>
</profile>
<profile name="RaspberryPi" description="SL Micro for Raspberry Pi" arch="aarch64">
<requires profile="full"/>
<requires profile="rpi"/>
</profile>
</profiles>
<preferences profiles="x86-encrypted,x86-rt-encrypted">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<!-- NOTE: Added 4096 support here -->
<type
image="oem"
initrd_system="dracut"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 rd.kiwi.oem.luks.reencrypt rd.kiwi.oem.luks.reencrypt_randompass quiet systemd.show_status=1"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -338,8 +301,9 @@
luks_version="luks2"
luks="1234"
luks_randomize="false"
luks_pbkdf="pbkdf2"
luks_pbkdf="pbkdf2"
target_blocksize="4096"
efipartsize="200"
>
<luksformat>
<option name="--cipher" value="aes-xts-plain64"/>
@@ -361,20 +325,18 @@
</type>
</preferences>
<preferences profiles="x86,x86-rt">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<!-- NOTE: Added 4096 support here -->
<type
image="oem"
initrd_system="dracut"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -382,6 +344,7 @@
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="true"
target_blocksize="4096"
efipartsize="200"
>
<bootloader name="grub2" console="gfxterm" timeout="3"/>
<systemdisk>
@@ -400,13 +363,12 @@
</preferences>
<preferences profiles="x86-self_install,x86-rt-self_install">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<!-- NOTE: Added 4096 support here -->
<type
image="oem"
initrd_system="dracut"
@@ -416,8 +378,7 @@
installboot="install"
install_continue_on_timeout="false"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -425,6 +386,7 @@
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="true"
target_blocksize="4096"
efipartsize="200"
>
<bootloader name="grub2" console="gfxterm" timeout="3" />
<systemdisk>
@@ -441,97 +403,9 @@
</systemdisk>
</type>
</preferences>
<preferences profiles="aarch64,aarch64-rt,aarch64-64kb">
<version>6.2</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<!-- NOTE: Added 4096 support here -->
<type
image="oem"
initrd_system="dracut"
installiso="true"
filesystem="btrfs"
installboot="install"
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1"
bootpartition="false"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="false"
disk_start_sector="8192"
target_blocksize="4096"
>
<bootloader name="grub2" console="gfxterm" timeout="3" />
<systemdisk>
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/arm64-efi" mountpoint="boot/grub2/arm64-efi"/>
<volume name="boot/writable"/>
<volume name="usr/local"/>
<volume name="var" copy_on_write="false"/>
</systemdisk>
</type>
</preferences>
<preferences profiles="aarch64-encrypted,aarch64-rt-encrypted,aarch64-64kb-encrypted">
<version>6.2</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<!-- NOTE: Added 4096 support here -->
<type
image="oem"
initrd_system="dracut"
installiso="true"
filesystem="btrfs"
installboot="install"
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 rd.kiwi.oem.luks.reencrypt rd.kiwi.oem.luks.reencrypt_randompass quiet systemd.show_status=1"
bootpartition="false"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="false"
disk_start_sector="8192"
luks_version="luks2"
luks="1234"
luks_randomize="false"
luks_pbkdf="pbkdf2"
target_blocksize="4096"
>
<luksformat>
<option name="--cipher" value="aes-xts-plain64"/>
</luksformat>
<bootloader name="grub2" console="gfxterm" use_disk_password="true" timeout="3" />
<systemdisk>
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/arm64-efi" mountpoint="boot/grub2/arm64-efi"/>
<volume name="boot/writable"/>
<volume name="usr/local"/>
<volume name="var" copy_on_write="false"/>
</systemdisk>
</type>
</preferences>
<preferences profiles="rpi">
<version>6.2</version>
<preferences profiles="rpi,aarch64-rt-rpi">
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -546,11 +420,11 @@
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200n8 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
efipartsize="128"
editbootinstall="editbootinstall_rpi.sh"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="false"
@@ -570,33 +444,31 @@
</systemdisk>
</type>
</preferences>
<preferences profiles="aarch64-self_install,aarch64-rt-self_install,aarch64-64kb-self_install">
<version>6.2</version>
<preferences profiles="aarch64,aarch64-rt">
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
<rpm-excludedocs>true</rpm-excludedocs>
<locale>en_US</locale>
<!-- NOTE: Added 4096 support here -->
<type
image="oem"
initrd_system="dracut"
installiso="true"
installpxe="true"
filesystem="btrfs"
installboot="install"
install_continue_on_timeout="false"
fsmountoptions="noatime"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
efipartsize="128"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="true"
disk_start_sector="8192"
target_blocksize="4096"
btrfs_quota_groups="false"
disk_start_sector="4096"
>
<bootloader name="grub2" console="gfxterm" timeout="3" />
<systemdisk>
@@ -612,8 +484,8 @@
</systemdisk>
</type>
</preferences>
<preferences profiles="rpi-self_install">
<version>6.2</version>
<preferences profiles="aarch64-self_install,aarch64-rt-self_install">
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -628,14 +500,13 @@
installboot="install"
install_continue_on_timeout="false"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200n8 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
efipartsize="128"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
btrfs_root_is_readonly_snapshot="true"
editbootinstall="editbootinstall_rpi.sh"
btrfs_quota_groups="true"
disk_start_sector="4096"
>
@@ -655,7 +526,7 @@
</preferences>
<preferences profiles="s390-kvm">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -693,7 +564,7 @@
<preferences profiles="s390-dasd">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -731,7 +602,7 @@
<preferences profiles="s390-fba">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -766,7 +637,7 @@
</preferences>
<preferences profiles="s390-fcp">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -805,7 +676,7 @@
</preferences>
<preferences profiles="x86-vmware">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -816,7 +687,6 @@
filesystem="btrfs"
format="vmdk"
firmware="uefi"
efipartsize="512"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -837,11 +707,11 @@
<volume name="var" copy_on_write="false"/>
</systemdisk>
<size unit="G">24</size>
<machine memory="1024" HWversion="17" guestOS="suse-64"/>
<machine memory="1024" HWversion="10" guestOS="suse-64"/>
</type>
</preferences>
<preferences profiles="x86-qcow">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -852,14 +722,15 @@
format="qcow2"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=qemu"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=qemu"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
btrfs_root_is_snapshot="true"
btrfs_root_is_readonly_snapshot="true"
btrfs_quota_groups="true"
target_blocksize="4096"
efipartsize="200"
>
<bootloader name="grub2" console="gfxterm" timeout="3" />
<systemdisk>
@@ -877,9 +748,9 @@
<size unit="G">32</size>
</type>
</preferences>
<preferences profiles="aarch64-qcow">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -890,8 +761,8 @@
format="qcow2"
filesystem="btrfs"
firmware="uefi"
efipartsize="512"
kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=qemu"
efipartsize="128"
kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=qemu"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -902,7 +773,7 @@
<systemdisk>
<volume name="home"/>
<volume name="root"/>
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/arm64-efi" mountpoint="boot/grub2/arm64-efi"/>
<volume name="boot/writable"/>
@@ -914,7 +785,7 @@
</preferences>
<preferences profiles="ppc64le-512ss">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -925,7 +796,7 @@
image="oem"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -937,7 +808,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -947,7 +818,7 @@
</type>
</preferences>
<preferences profiles="ppc64le-4096ss">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -961,7 +832,7 @@
target_blocksize="4096"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -973,7 +844,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -984,7 +855,7 @@
</preferences>
<preferences profiles="ppc64le-512ss-self_install">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -997,7 +868,7 @@
installpxe="true"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -1014,7 +885,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -1024,7 +895,7 @@
</type>
</preferences>
<preferences profiles="ppc64le-4096ss-self_install">
<version>6.2</version>
<version>6.1</version>
<packagemanager>zypper</packagemanager>
<bootsplash-theme>SLE</bootsplash-theme>
<bootloader-theme>SLE</bootloader-theme>
@@ -1040,7 +911,7 @@
target_blocksize="4096"
filesystem="btrfs"
firmware="ofw"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=metal"
kernelcmdline="console=hvc0,115200 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=metal"
bootpartition="false"
bootkernel="custom"
devicepersistency="by-uuid"
@@ -1057,7 +928,7 @@
<volume name="home"/>
<volume name="root"/>
<!-- on tmpfs jsc#SMO-2 <volume name="tmp"/> -->
<volume name="opt"/>
<volume name="opt"/>
<volume name="srv"/>
<volume name="boot/grub2/powerpc-ieee1275"/>
<volume name="boot/writable"/>
@@ -1073,17 +944,20 @@
</repository>
<packages type="image" profiles="full">
<namedCollection name="transactional_base"/>
<package name="patterns-base-transactional_base"/>
<namedCollection name="base_transactional"/>
<package name="patterns-base-transactional"/>
<namedCollection name="salt_minion"/>
<package name="patterns-base-salt_minion"/>
<namedCollection name="kvm_host"/>
<package name="patterns-micro-kvm_host"/>
<package name="patterns-base-kvm_host"/>
<package name="lzop"/>
<namedCollection name="container_runtime_podman"/>
<package name="patterns-container-runtime_podman"/>
<package name="patterns-container-runtime_podman"/>
<namedCollection name="cockpit"/>
<package name="patterns-cockpit"/>
<package name="patterns-base-cockpit"/>
<namedCollection name="selinux"/>
<package name="patterns-base-selinux"/>
<package name="policycoreutils-python-utils"/>
<package name="suseconnect-ng"/>
<package name="SL-Micro-release"/>
<package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
@@ -1093,7 +967,7 @@
<package name="libpwquality-tools"/>
</packages>
<packages type="image" profiles="x86-encrypted,x86-rt-encrypted,aarch64-encrypted,aarch64-rt-encrypted,aarch64-64kb-encrypted">
<packages type="image" profiles="x86-encrypted,x86-rt-encrypted">
<!-- full disk encryption stuff -->
<package name="device-mapper"/>
<package name="cryptsetup"/>
@@ -1106,12 +980,13 @@
</packages>
<packages type="image" profiles="container-host">
<namedCollection name="transactional_base"/>
<package name="patterns-base-transactional_base"/>
<namedCollection name="base_transactional"/>
<package name="patterns-base-transactional"/>
<namedCollection name="container_runtime_podman"/>
<package name="patterns-container-runtime_podman"/>
<namedCollection name="selinux"/>
<package name="patterns-base-selinux"/>
<package name="policycoreutils-python-utils"/>
<package name="suseconnect-ng"/>
<package name="SL-Micro-release"/>
<package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
@@ -1135,16 +1010,16 @@
<package name="jeos-firstboot"/>
</packages>
<packages type="image" profiles="x86-qcow,x86-vmware,aarch64-qcow,ppc64le-512ss,ppc64le-4096ss,s390-dasd,s390-fcp">
<packages type="image" profiles="x86-qcow,x86-vmware,aarch64-qcow">
<package name="cloud-init"/>
<package name="cloud-init-config-suse"/>
</packages>
<packages type="image">
<namedCollection name="transactional_base"/>
<package name="patterns-base-transactional_base"/>
<namedCollection name="base_transactional"/>
<package name="patterns-base-transactional"/>
<namedCollection name="hardware"/>
<package name="patterns-micro-hardware"/>
<package name="patterns-base-hardware"/>
<package name="grub2"/>
<package name="glibc-locale-base"/>
<package name="ca-certificates"/>
@@ -1163,7 +1038,7 @@
<package name="NetworkManager"/>
<package name="NetworkManager-branding-SLE"/>
<package name="ModemManager"/>
<!-- FIXME does not build without control file which is obsolete
<!-- FIXME does not build without control file which is obsolete
<package name="live-add-yast-repos"/> -->
<package name="parted"/> <!-- seems missing to deploy the image -->
<package name="iptables"/> <!-- needed by RKE2 -->
@@ -1183,18 +1058,14 @@
<package name="kpartx" arch="s390x"/>--> <!-- previous releases picked it always, now kiwi picks partx instead -->
</packages>
<!-- rpi kernel-default-base does not provide all necessary drivers -->
<packages type="image" profiles="aarch64,rpi,rpi-self_install,aarch64-self_install,x86,x86-encrypted,aarch64-encrypted,x86-legacy,x86-self_install,x86-vmware,x86-qcow,aarch64-qcow,s390-kvm,s390-dasd,s390-fba,s390-fcp,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<packages type="image" profiles="rpi,aarch64-self_install,x86,x86-encrypted,x86-legacy,x86-self_install,x86-vmware,x86-qcow,aarch64,aarch64-qcow,s390-kvm,s390-dasd,s390-fba,s390-fcp,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<package name="kernel-default"/>
<package name="kernel-firmware-all"/>
</packages>
<packages type="image" profiles="aarch64-64kb,aarch64-64kb-encrypted,aarch64-64kb-self_install">
<package name="kernel-64kb"/>
<package name="kernel-firmware-all"/>
</packages>
<packages type="image" profiles="x86-rt,x86-rt-self_install,x86-rt-encrypted,aarch64-rt,aarch64-rt-encrypted,aarch64-rt-self_install">
<packages type="image" profiles="x86-rt,x86-rt-self_install,x86-rt-encrypted,aarch64-rt,aarch64-rt-rpi,aarch64-rt-self_install">
<package name="kernel-rt"/>
<package name="kernel-firmware-all"/>
<!-- FIXME intentionally removed from ALP code stream
<!-- FIXME intentionally removed from ALP code stream
<package name="cpuset"/> -->
</packages>
<packages type="image" profiles="s390-kvm,s390-dasd,s390-fba,s390-fcp">
@@ -1206,18 +1077,17 @@
<packages type="image" profiles="s390-fcp">
<package name="multipath-tools"/>
</packages>
<!-- "oem" images uses kiwi for partition/fs resize (-repart) and SelfInstall images in addition for deployment (-dump). -->
<packages type="image" profiles="x86,x86-encrypted,x86-rt-encrypted,x86-self_install,x86-legacy,x86-vmware,x86-rt,x86-rt-self_install,x86-qcow,aarch64-qcow,aarch64,aarch64-encrypted,aarch64-64kb-encrypted,rpi,rpi-self_install,aarch64-self_install,aarch64-64kb,aarch64-64kb-self_install,aarch64-rt,aarch64-rt-self_install,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<packages type="image" profiles="x86,x86-encrypted,x86-rt-encrypted,x86-self_install,x86-legacy,x86-vmware,x86-rt,x86-rt-self_install,x86-qcow,aarch64,aarch64-qcow,rpi,aarch64-self_install,aarch64-rt,aarch64-rt-rpi,aarch64-rt-self_install,ppc64le-512ss,ppc64le-4096ss,ppc64le-512ss-self_install,ppc64le-4096ss-self_install">
<package name="dracut-kiwi-oem-repart"/>
<package name="dracut-kiwi-oem-dump"/>
</packages>
<packages type="image" profiles="rpi,rpi-self_install">
<packages type="image" profiles="rpi,aarch64-self_install,aarch64-rt,aarch64-rt-rpi,aarch64-rt-self_install">
<package name="raspberrypi-firmware" arch="aarch64"/>
<package name="raspberrypi-firmware-config" arch="aarch64"/>
<package name="raspberrypi-firmware-dt" arch="aarch64"/>
<package name="u-boot-rpiarm64" arch="aarch64"/>
</packages>
<packages type="image" profiles="aarch64,rpi,rpi-self_install,aarch64-self_install,aarch64-rt,aarch64-64kb,aarch64-rt-self_install,aarch64-encrypted,aarch64-rt-encrypted,aarchte-64kb-encrypted">
<packages type="image" profiles="rpi,aarch64-self_install,aarch64-rt,aarch64-rt-self_install">
<package name="dracut-kiwi-oem-repart"/>
<package name="bcm43xx-firmware"/>
<package name="wireless-regdb"/>
@@ -1225,7 +1095,6 @@
<package name="wpa_supplicant"/>
<package name="grub2-arm64-efi"/>
</packages>
<!-- NOTE(edge): Added coreutils, ca-certificates and ca-certificates-mozilla to prevent SSL errors when building the images -->
<packages type="bootstrap">
<package name="filesystem"/>
<package name="coreutils"/>
@@ -1242,15 +1111,14 @@
<packages type="image" profiles="x86-qcow,aarch64-qcow">
<package name="qemu-guest-agent"/>
</packages>
<!-- jsc#PED-8599 -->
<packages type="image" profiles="Base,Base-encrypted,Base-RT,Base-RT-encrypted,Base-fba,Base-dasd,Base-fcp,Base-512,Base-4096,Default,Default-encrypted,Default-fba,Default-dasd,Default-fcp,Default-512,Default-4096,Base-64kb-encrypted,Default-64kb-encrypted">
<packages type="image" profiles="Base,Base-encrypted,Base-RT,Base-RT-encrypted,Base-fba,Base-dasd,Base-fcp,Base-512,Base-4096,Default,Default-encrypted,Default-fba,Default-dasd,Default-fcp,Default-512,Default-4096">
<package name="usbguard"/>
</packages>
<!-- jsc#PED-8788 -->
<packages type="image" profiles="Base-RT,Base-RT-encrypted,x86-rt-encrypted,x86-rt,x86-rt-self_install,aarch64-rt,aarch64-rt-encrypted,aarch64-rt-self_install">
<packages type="image" profiles="Base-RT,Base-RT-encrypted,x86-rt-encrypted,x86-rt,x86-rt-self_install,aarch64-rt,aarch64-rt-self_install">
<package name="stalld"/>
</packages>
</image>

View File

@@ -28,7 +28,7 @@ LARGEBLOCK=false
usage(){
cat <<-EOF
=====================================
SUSE Linux Micro 6.2 Kiwi SDK Builder
SUSE Linux Micro 6.1 Kiwi SDK Builder
=====================================
Usage: ${0} [-p <profile>] [-b]
@@ -36,12 +36,13 @@ usage(){
Profile Options (-p):
* Default: RAW Disk Image with default packages (incl. Podman & KVM)
* Default-SelfInstall: SelfInstall ISO with default packages
* Default-RPi: RAW Disk Image for Raspberry Pi (aarch64 only with MBR)
* Base: RAW Disk Image with reduced package set (no KVM)
* Base-SelfInstall: SelfInstall ISO with reduced packages
* Base-RT: RAW Disk Image with reduced packages and kernel-rt
* Base-RT-SelfInstall: SelfInstall ISO with reduced packages and kernel-rt
* RaspberryPi: RAW Disk Image for Raspberry Pi with default packages (aarch64 only with MBR)
* RaspberryPi-SelfInstall: SelfInstall ISO for Raspberry Pi with default packages (aarch64 only with MBR)
* Base-RT-RPi: RAW Disk image for Raspberry Pi with kernel-rt (aarch64 only with MBR)
* Base-RPi: RAW Disk Image for Raspberry Pi with reduced packages (aarch64 only with MBR)
4096 Blocksize (-b): If specified, use a 4096 blocksize (rather than 512) when generating the image.
@@ -82,34 +83,14 @@ if $LARGEBLOCK; then
mv /micro-sdk/defs/SL-Micro.kiwi.4096 /micro-sdk/defs/SL-Micro.kiwi
fi
# Create temporary directory that supports seclabel
dir=$(mktemp -d)
mkdir -p /tmp/output/tmp-dir
mount -t tmpfs $dir /tmp/output/tmp-dir
# Build the image
kiwi-ng --temp-dir /tmp/output/tmp-dir --debug --profile $PROFILE \
system build --description /micro-sdk/defs --target-dir /tmp/output \
--ignore-repos-used-for-build $REPOS
kiwi-ng --debug --profile $PROFILE system build \
--description /micro-sdk/defs --target-dir /tmp/output --ignore-repos-used-for-build $REPOS
# Print output
RESULT=$?
if [ $RESULT -eq 0 ]; then
echo -e "\n\nINFO: Image build successful, generated images are available in the 'output' directory."
# The -n flag is being used to avoid the \n at the end of the line
echo -n "INFO: Generating sha256 checksum file... " && {
# This returns the iso or raw image from the kiwi.result.json file, preferring iso
FILE_PATH=$(python3 -c 'import json, sys; data = json.load(sys.stdin); iso = data.get("installation_image", {}).get("filename"); raw = data.get("disk_image", {}).get("filename"); print(iso if iso else raw)' < /tmp/output/kiwi.result.json)
# Generate the checksum if the file path was successfully extracted
if [ -n "$FILE_PATH" ]; then
# The sed trims the full path to just the filename (e.g., "sum filename")
sha256sum "$FILE_PATH" | sed -E 's/\s+.*\/([^/]+)$/ \1/' > "$FILE_PATH.sha256" && echo "done"
else
# Or fail if it is not there
echo "ERROR: Neither ISO nor RAW file path found in JSON."
fi
# Catch-all just in case something fails inside the block
} || echo "ERROR: Command failed during processing."
else
echo -e "\n\nERROR: Failed to build the image, please see above logs."
fi

View File

@@ -188,6 +188,7 @@ cat >/etc/fstab.script <<"EOF"
#!/bin/sh
set -eux
/usr/sbin/setup-fstab-for-overlayfs
# If /var is on a different partition than /...
if [ "$(findmnt -snT / -o SOURCE)" != "$(findmnt -snT /var -o SOURCE)" ]; then
# ... set options for autoexpanding /var

View File

@@ -1,24 +0,0 @@
#!/bin/bash
# Copyright (c) 2025 SUSE LLC
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
set -euxo pipefail
/usr/libexec/setup-etc-subvol

View File

@@ -1,40 +0,0 @@
#!/bin/bash
set -euxo pipefail
diskname=$1
devname="$2"
loopname="${devname%*p?}"
loopdev=/dev/${loopname#/dev/mapper/*}
#==========================================
# The GPT spans the first 33 sectors, but we need to write our
# at sector 16. Shrink the GPT to only span 5 sectors
# (16 partitions) to give us some space.
#------------------------------------------
# echo -e 'x\ns\n16\nw\ny' > gdisk.tmp
# Shrink GPT does not work anymore, so let's use legacy MBR for now
cat > gdisk.tmp <<-'EOF'
x
r
g
t
1
c
w
y
EOF
dd if=$loopdev of=mbrid.bin bs=1 skip=440 count=4
gdisk $loopdev < gdisk.tmp
dd of=$loopdev if=mbrid.bin bs=1 seek=440 count=4
rm -f mbrid.bin
rm -f gdisk.tmp
#==========================================
# Installing All-in-one U-Boot/SPL
#------------------------------------------
echo "Installing All-in-one U-Boot/SPL..."
if ! dd if=boot/u-boot-sunxi-with-spl.bin of=$diskname bs=1024 seek=8 conv=notrunc; then
echo "Couldn't install SPL on $diskname"
exit 1
fi

View File

@@ -3,9 +3,12 @@ set -euxo pipefail
diskname=$1
devname="$2"
loopname="${devname%*p?}"
loopdev=/dev/${loopname#/dev/*}
if [ ! -f $loopdev ]; then loopdev=/dev/${loopdev#/dev/mapper/}; fi
#==========================================
# copy Raspberry Pi firmware to EFI partition
#------------------------------------------

View File

@@ -2,7 +2,7 @@
<service name="obs_scm">
<param name="url">https://github.com/brancz/kube-rbac-proxy</param>
<param name="scm">git</param>
<param name="revision">v0.19.1</param>
<param name="revision">v0.18.1</param>
<param name="version">_auto_</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>

View File

@@ -17,14 +17,14 @@
Name: kube-rbac-proxy
Version: 0.19.1
Release: 0.19.1
Version: 0.18.1
Release: 0.18.1
Summary: The kube-rbac-proxy is a small HTTP proxy for a single upstream
License: Apache-2.0
URL: https://github.com/brancz/kube-rbac-proxy
Source: kube-rbac-proxy-%{version}.tar
Source1: vendor.tar.gz
BuildRequires: golang(API) = 1.24
BuildRequires: golang(API) = 1.23
ExcludeArch: s390
ExcludeArch: %{ix86}

View File

@@ -1,6 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
#!BuildTag: %%IMG_PREFIX%%kubectl:1.34.2
#!BuildTag: %%IMG_PREFIX%%kubectl:1.34.2-%RELEASE%
#!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4
#!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4-%RELEASE%
ARG SLE_VERSION
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
@@ -15,11 +15,11 @@ FROM micro AS final
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
LABEL org.opencontainers.image.title="SLE kubectl image"
LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image."
LABEL org.opencontainers.image.version="1.34.2"
LABEL org.opencontainers.image.version="1.33.4"
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
LABEL org.opencontainers.image.created="%BUILDTIME%"
LABEL org.opencontainers.image.vendor="SUSE LLC"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.34.2-%RELEASE%"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.33.4-%RELEASE%"
LABEL org.openbuildservice.disturl="%DISTURL%"
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
LABEL com.suse.eula="SUSE Combined EULA February 2024"

View File

@@ -1,7 +1,7 @@
%global debug_package %{nil}
Name: kubectl
Version: 1.34.2
Version: 1.33.4
Release: 0
Summary: Command-line utility for interacting with a Kubernetes cluster

Binary file not shown.

Binary file not shown.

View File

@@ -1,5 +1,5 @@
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.4_up1.3.3
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.4_up1.3.3-%RELEASE%
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.2
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.2-%RELEASE%
annotations:
catalog.cattle.io/certified: rancher
catalog.cattle.io/namespace: cattle-ui-plugin-system
@@ -12,10 +12,10 @@ annotations:
catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
catalog.cattle.io/kube-version: '>= v1.26.0-0'
apiVersion: v2
appVersion: 1.3.3
appVersion: 304.0.3+up1.3.2
description: 'SUSE Edge: KubeVirt extension for Rancher Dashboard'
name: kubevirt-dashboard-extension
type: application
version: "%%CHART_MAJOR%%.0.4+up1.3.3"
version: "%%CHART_MAJOR%%.0.3+up1.3.2"
icon: >-
https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevirt/icon/color/kubevirt-icon-color.svg

View File

@@ -8,7 +8,7 @@ spec:
plugin:
name: {{ include "extension-server.fullname" . }}
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/kubevirt-dashboard-extension/1.3.3
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/kubevirt-dashboard-extension/304.0.3+up1.3.2
noCache: {{ .Values.plugin.noCache }}
noAuth: {{ .Values.plugin.noAuth }}
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}

View File

@@ -1,21 +1,21 @@
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.21_up0.13.0
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.21_up0.13.0-%RELEASE%
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.19_up0.12.9
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.19_up0.12.9-%RELEASE%
apiVersion: v2
appVersion: 0.13.0
appVersion: 0.12.9
dependencies:
- alias: metal3-baremetal-operator
name: baremetal-operator
repository: file://./charts/baremetal-operator
version: 0.11.2
version: 0.10.4
- alias: metal3-ironic
name: ironic
repository: file://./charts/ironic
version: 0.12.1
version: 0.11.6
- alias: metal3-mariadb
condition: global.enable_mariadb
name: mariadb
repository: file://./charts/mariadb
version: 0.6.2
version: 0.6.1
- alias: metal3-media
condition: global.enable_metal3_media_server
name: media
@@ -25,4 +25,4 @@ description: A Helm chart that installs all of the dependencies needed for Metal
icon: https://github.com/cncf/artwork/raw/master/projects/metal3/icon/color/metal3-icon-color.svg
name: metal3
type: application
version: "%%CHART_MAJOR%%.0.21+up0.13.0"
version: "%%CHART_MAJOR%%.0.19+up0.12.9"

View File

@@ -1,6 +1,6 @@
apiVersion: v2
appVersion: 0.11.2
appVersion: 0.10.2
description: A Helm chart for baremetal-operator, used by Metal3
name: baremetal-operator
type: application
version: 0.11.2
version: 0.10.4

View File

@@ -291,15 +291,6 @@ spec:
required:
- url
type: object
inspectionMode:
description: |-
Specifies the mode for host inspection.
"disabled" - no inspection will be performed
"agent" - normal agent-based inspection will run
enum:
- disabled
- agent
type: string
metaData:
description: |-
MetaData holds the reference to the Secret containing host metadata
@@ -587,8 +578,9 @@ spec:
description: Required. The taint key to be applied to a node.
type: string
timeAdded:
description: TimeAdded represents the time at which the taint
was added.
description: |-
TimeAdded represents the time at which the taint was added.
It is only written for NoExecute taints.
format: date-time
type: string
value:
@@ -718,19 +710,6 @@ spec:
if one is present. If both IPv4 and IPv6 addresses are present in a
dual-stack environment, two nics will be output, one with each IP.
type: string
lldp:
description: LLDP data for this interface
properties:
portID:
description: The switch port ID from LLDP
type: string
switchID:
description: The switch chassis ID from LLDP
type: string
switchSystemName:
description: The switch system name from LLDP
type: string
type: object
mac:
description: The device MAC address
pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'

View File

@@ -99,19 +99,6 @@ spec:
if one is present. If both IPv4 and IPv6 addresses are present in a
dual-stack environment, two nics will be output, one with each IP.
type: string
lldp:
description: LLDP data for this interface
properties:
portID:
description: The switch port ID from LLDP
type: string
switchID:
description: The switch chassis ID from LLDP
type: string
switchSystemName:
description: The switch system name from LLDP
type: string
type: object
mac:
description: The device MAC address
pattern: '[0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5}'

View File

@@ -28,7 +28,7 @@ images:
baremetalOperator:
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/baremetal-operator
pullPolicy: IfNotPresent
tag: "0.11.2.0"
tag: "0.10.2.1"
imagePullSecrets: []
nameOverride: "manger"

View File

@@ -1,6 +1,6 @@
apiVersion: v2
appVersion: 32.0.0
appVersion: 29.0.4
description: A Helm chart for Ironic, used by Metal3
name: ironic
type: application
version: 0.12.1
version: 0.11.6

View File

@@ -53,5 +53,5 @@ data:
IRONIC_USE_MARIADB: "false"
{{- end }}
{{- with .Values.ironicExtraEnv -}}
{{ toYaml . | nindent 2 }}
{{ toYaml . | nindent 2 }}
{{- end -}}

View File

@@ -160,7 +160,12 @@ spec:
image: {{ .Values.images.ironic.repository }}:{{ .Values.images.ironic.tag }}
imagePullPolicy: {{ .Values.images.ironic.pullPolicy }}
securityContext:
{{- merge .Values.securityContext .Values.dnsmasqSecurityContext | toYaml | nindent 10 }}
{{- toYaml .Values.securityContext | nindent 10 }}
securityContext:
capabilities:
add:
- NET_ADMIN
- NET_RAW
command:
- /bin/rundnsmasq
envFrom:

View File

@@ -64,7 +64,7 @@ images:
ironic:
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
pullPolicy: IfNotPresent
tag: 32.0.0.1
tag: 29.0.4.4
ironicIPADownloader:
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader
pullPolicy: IfNotPresent
@@ -97,12 +97,6 @@ securityContext:
type: RuntimeDefault
runAsNonRoot: true
dnsmasqSecurityContext:
capabilities:
add:
- NET_ADMIN
- NET_RAW
service:
type: LoadBalancer
annotations: {}

View File

@@ -1,6 +1,6 @@
apiVersion: v2
appVersion: "11.8"
appVersion: "10.11"
description: A Helm chart for MariaDB, used by Metal3
name: mariadb
type: application
version: 0.6.2
version: 0.6.1

View File

@@ -14,7 +14,7 @@ service:
image:
repository: registry.suse.com/suse/mariadb
pullPolicy: IfNotPresent
tag: 11.8
tag: 10.11
nameOverride: ""
fullnameOverride: ""

View File

@@ -89,6 +89,8 @@ metal3-media:
# available to the Ironic deployment services.
mediaVolume:
hostPath: /opt/media
image:
repository: "%%IMG_REPO%%/%%IMG_PREFIX%%ironic"
#
# ironic service

View File

@@ -1,17 +1,17 @@
#!BuildTag: %%CHART_PREFIX%%metallb:%%CHART_MAJOR%%.0.1_up0.15.2
#!BuildTag: %%CHART_PREFIX%%metallb:%%CHART_MAJOR%%.0.1_up0.15.2-%RELEASE%
#!BuildTag: %%CHART_PREFIX%%metallb:%%CHART_MAJOR%%.0.0_up0.14.9
#!BuildTag: %%CHART_PREFIX%%metallb:%%CHART_MAJOR%%.0.0_up0.14.9-%RELEASE%
apiVersion: v2
appVersion: v0.15.2
appVersion: v0.14.9
dependencies:
- condition: crds.enabled
name: crds
repository: file://./charts/crds
version: 0.15.2
version: 0.14.9
- alias: metallb-frr-k8s
condition: frrk8s.enabled
name: frr-k8s
repository: file://./charts/frr-k8s
version: 0.0.20
version: 0.0.16
description: A network load-balancer implementation for Kubernetes using standard
routing protocols
home: https://metallb.universe.tf
@@ -21,4 +21,4 @@ name: metallb
sources:
- https://github.com/metallb/metallb
type: application
version: "%%CHART_MAJOR%%.0.1+up0.15.2"
version: "%%CHART_MAJOR%%.0.0+up0.14.9"

View File

@@ -1,6 +1,6 @@
# metallb
![Version: 0.15.2](https://img.shields.io/badge/Version-0.15.2-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.15.2](https://img.shields.io/badge/AppVersion-v0.15.2-informational?style=flat-square)
![Version: 0.14.9](https://img.shields.io/badge/Version-0.14.9-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.14.9](https://img.shields.io/badge/AppVersion-v0.14.9-informational?style=flat-square)
A network load-balancer implementation for Kubernetes using standard routing protocols
@@ -16,8 +16,8 @@ Kubernetes: `>= 1.19.0-0`
| Repository | Name | Version |
|------------|------|---------|
| | crds | 0.15.2 |
| https://metallb.github.io/frr-k8s | frr-k8s | 0.0.20 |
| | crds | 0.14.9 |
| https://metallb.github.io/frr-k8s | frr-k8s | 0.0.16 |
## Values
@@ -99,7 +99,7 @@ Kubernetes: `>= 1.19.0-0`
| prometheus.rbacPrometheus | bool | `true` | |
| prometheus.rbacProxy.pullPolicy | string | `nil` | |
| prometheus.rbacProxy.repository | string | `"registry.opensuse.org/isv/suse/edge/metallb/images/kube-rbac-proxy"` | |
| prometheus.rbacProxy.tag | string | `"v0.19.1"` | |
| prometheus.rbacProxy.tag | string | `"v0.18.0"` | |
| prometheus.scrapeAnnotations | bool | `false` | |
| prometheus.serviceAccount | string | `""` | |
| prometheus.serviceMonitor.controller.additionalLabels | object | `{}` | |
@@ -122,7 +122,7 @@ Kubernetes: `>= 1.19.0-0`
| speaker.frr.enabled | bool | `true` | |
| speaker.frr.image.pullPolicy | string | `nil` | |
| speaker.frr.image.repository | string | `"registry.opensuse.org/isv/suse/edge/metallb/images/frr"` | |
| speaker.frr.image.tag | string | `"10.2.1"` | |
| speaker.frr.image.tag | string | `"8.5.6"` | |
| speaker.frr.metricsPort | int | `7473` | |
| speaker.frr.resources | object | `{}` | |
| speaker.frrMetrics.resources | object | `{}` | |

View File

@@ -1,5 +1,5 @@
apiVersion: v2
appVersion: v0.15.2
appVersion: v0.14.9
description: MetalLB CRDs
home: https://metallb.universe.tf
icon: https://metallb.universe.tf/images/logo/metallb-white.png
@@ -7,4 +7,4 @@ name: crds
sources:
- https://github.com/metallb/metallb
type: application
version: 0.15.2
version: 0.14.9

View File

@@ -2,7 +2,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
controller-gen.kubebuilder.io/version: v0.16.3
name: bfdprofiles.metallb.io
spec:
group: metallb.io
@@ -123,7 +123,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
controller-gen.kubebuilder.io/version: v0.16.3
name: bgpadvertisements.metallb.io
spec:
group: metallb.io
@@ -329,7 +329,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
controller-gen.kubebuilder.io/version: v0.16.3
name: bgppeers.metallb.io
spec:
conversion:
@@ -526,15 +526,7 @@ spec:
rule: duration(self).getMilliseconds() % 1000 == 0
disableMP:
default: false
description: |-
To set if we want to disable MP BGP that will separate IPv4 and IPv6 route exchanges into distinct BGP sessions.
Deprecated: DisableMP is deprecated in favor of dualStackAddressFamily.
type: boolean
dualStackAddressFamily:
default: false
description: |-
To set if we want to enable the neighbor not only for the ipfamily related to its session,
but also the other one. This allows to advertise/receive IPv4 prefixes over IPv6 sessions and vice versa.
description: To set if we want to disable MP BGP that will separate IPv4 and IPv6 route exchanges into distinct BGP sessions.
type: boolean
dynamicASN:
description: |-
@@ -563,14 +555,6 @@ spec:
holdTime:
description: Requested BGP hold time, per RFC4271.
type: string
interface:
description: |-
Interface is the node interface over which the unnumbered BGP peering will
be established. No API validation takes place as that string value
represents an interface name on the host and if user provides an invalid
value, only the actual BGP session will not be established.
Address and Interface are mutually exclusive and one of them must be specified.
type: string
keepaliveTime:
description: Requested BGP keepalive time, per RFC4271.
type: string
@@ -665,7 +649,7 @@ spec:
default: 179
description: Port to dial when establishing the session.
maximum: 16384
minimum: 1
minimum: 0
type: integer
routerID:
description: BGP router ID to advertise to the peer
@@ -680,6 +664,7 @@ spec:
type: string
required:
- myASN
- peerAddress
type: object
status:
description: BGPPeerStatus defines the observed state of Peer.
@@ -694,7 +679,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
controller-gen.kubebuilder.io/version: v0.16.3
name: communities.metallb.io
spec:
group: metallb.io
@@ -759,7 +744,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
controller-gen.kubebuilder.io/version: v0.16.3
name: ipaddresspools.metallb.io
spec:
group: metallb.io
@@ -956,28 +941,6 @@ spec:
type: object
status:
description: IPAddressPoolStatus defines the observed state of IPAddressPool.
properties:
assignedIPv4:
description: AssignedIPv4 is the number of assigned IPv4 addresses.
format: int64
type: integer
assignedIPv6:
description: AssignedIPv6 is the number of assigned IPv6 addresses.
format: int64
type: integer
availableIPv4:
description: AvailableIPv4 is the number of available IPv4 addresses.
format: int64
type: integer
availableIPv6:
description: AvailableIPv6 is the number of available IPv6 addresses.
format: int64
type: integer
required:
- assignedIPv4
- assignedIPv6
- availableIPv4
- availableIPv6
type: object
required:
- spec
@@ -991,7 +954,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
controller-gen.kubebuilder.io/version: v0.16.3
name: l2advertisements.metallb.io
spec:
group: metallb.io
@@ -1171,92 +1134,7 @@ apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
name: servicebgpstatuses.metallb.io
spec:
group: metallb.io
names:
kind: ServiceBGPStatus
listKind: ServiceBGPStatusList
plural: servicebgpstatuses
singular: servicebgpstatus
scope: Namespaced
versions:
- additionalPrinterColumns:
- jsonPath: .status.node
name: Node
type: string
- jsonPath: .status.serviceName
name: Service Name
type: string
- jsonPath: .status.serviceNamespace
name: Service Namespace
type: string
name: v1beta1
schema:
openAPIV3Schema:
description: ServiceBGPStatus exposes the BGP peers a service is configured to be advertised to, per relevant node.
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: ServiceBGPStatusSpec defines the desired state of ServiceBGPStatus.
type: object
status:
description: MetalLBServiceBGPStatus defines the observed state of ServiceBGPStatus.
properties:
node:
description: Node indicates the node announcing the service.
type: string
x-kubernetes-validations:
- message: Value is immutable
rule: self == oldSelf
peers:
description: |-
Peers indicate the BGP peers for which the service is configured to be advertised to.
The service being actually advertised to a given peer depends on the session state and is not indicated here.
items:
type: string
type: array
serviceName:
description: ServiceName indicates the service this status represents.
type: string
x-kubernetes-validations:
- message: Value is immutable
rule: self == oldSelf
serviceNamespace:
description: ServiceNamespace indicates the namespace of the service.
type: string
x-kubernetes-validations:
- message: Value is immutable
rule: self == oldSelf
type: object
type: object
served: true
storage: true
subresources:
status: {}
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.17.2
controller-gen.kubebuilder.io/version: v0.16.3
name: servicel2statuses.metallb.io
spec:
group: metallb.io

View File

@@ -1,10 +1,10 @@
apiVersion: v2
appVersion: v0.0.20
appVersion: v0.0.16
dependencies:
- condition: crds.enabled
name: crds
repository: file://./charts/crds
version: 0.0.20
version: 0.0.16
description: A cloud native wrapper of FRR
home: https://metallb.universe.tf
icon: https://metallb.universe.tf/images/logo/metallb-white.png
@@ -13,4 +13,4 @@ name: frr-k8s
sources:
- https://github.com/metallb/frr-k8s
type: application
version: 0.0.20
version: 0.0.16

View File

@@ -1,6 +1,6 @@
# frr-k8s
![Version: 0.0.20](https://img.shields.io/badge/Version-0.0.20-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.0.20](https://img.shields.io/badge/AppVersion-v0.0.20-informational?style=flat-square)
![Version: 0.0.16](https://img.shields.io/badge/Version-0.0.16-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: v0.0.16](https://img.shields.io/badge/AppVersion-v0.0.16-informational?style=flat-square)
A cloud native wrapper of FRR
@@ -16,7 +16,7 @@ Kubernetes: `>= 1.19.0-0`
| Repository | Name | Version |
|------------|------|---------|
| | crds | 0.0.20 |
| | crds | 0.0.16 |
## Values
@@ -30,7 +30,7 @@ Kubernetes: `>= 1.19.0-0`
| frrk8s.frr.acceptIncomingBGPConnections | bool | `false` | |
| frrk8s.frr.image.pullPolicy | string | `nil` | |
| frrk8s.frr.image.repository | string | `"registry.opensuse.org/isv/suse/edge/metallb/images/frr"` | |
| frrk8s.frr.image.tag | string | `"10.2.1"` | |
| frrk8s.frr.image.tag | string | `"8.5.6"` | |
| frrk8s.frr.metricsBindAddress | string | `"127.0.0.1"` | |
| frrk8s.frr.metricsPort | int | `7573` | |
| frrk8s.frr.resources | object | `{}` | |
@@ -78,7 +78,7 @@ Kubernetes: `>= 1.19.0-0`
| prometheus.rbacPrometheus | bool | `false` | |
| prometheus.rbacProxy.pullPolicy | string | `nil` | |
| prometheus.rbacProxy.repository | string | `"registry.opensuse.org/isv/suse/edge/metallb/images/kube-rbac-proxy"` | |
| prometheus.rbacProxy.tag | string | `"v0.19.1"` | |
| prometheus.rbacProxy.tag | string | `"v0.18.0"` | |
| prometheus.scrapeAnnotations | bool | `false` | |
| prometheus.secureMetricsPort | int | `9140` | |
| prometheus.serviceAccount | string | `""` | |

View File

@@ -1,5 +1,5 @@
apiVersion: v2
appVersion: v0.0.20
appVersion: v0.0.16
description: FRR K8s CRDs
home: https://metallb.universe.tf
icon: https://metallb.universe.tf/images/logo/metallb-white.png
@@ -7,4 +7,4 @@ name: crds
sources:
- https://github.com/metallb/frr-k8s
type: application
version: 0.0.20
version: 0.0.16

View File

@@ -98,7 +98,7 @@ frrk8s:
tolerateMaster: true
image:
repository: "registry.opensuse.org/isv/suse/edge/metallb/images/frr-k8s"
tag: "v0.0.20"
tag: "v0.0.16"
pullPolicy: IfNotPresent
## @param controller.updateStrategy.type FRR-K8s controller daemonset strategy type
## ref: https://kubernetes.io/docs/tasks/manage-daemon/update-daemon-set/
@@ -161,7 +161,7 @@ frrk8s:
frr:
image:
repository: "registry.opensuse.org/isv/suse/edge/metallb/images/frr"
tag: "10.2.1"
tag: "8.5.6"
pullPolicy: IfNotPresent
metricsBindAddress: 127.0.0.1
metricsPort: 7573

View File

@@ -110,9 +110,6 @@ rules:
- apiGroups: ["metallb.io"]
resources: ["communities"]
verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
resources: ["servicebgpstatuses","servicebgpstatuses/status"]
verbs: ["*"]
{{- end }}
---
apiVersion: rbac.authorization.k8s.io/v1
@@ -141,9 +138,6 @@ rules:
- apiGroups: ["metallb.io"]
resources: ["ipaddresspools"]
verbs: ["get", "list", "watch"]
- apiGroups: ["metallb.io"]
resources: ["ipaddresspools/status"]
verbs: ["update"]
- apiGroups: ["metallb.io"]
resources: ["bgppeers"]
verbs: ["get", "list"]

View File

@@ -59,7 +59,7 @@ prometheus:
# the image to be used for the kuberbacproxy container
rbacProxy:
repository: "%%IMG_REPO%%/%%IMG_PREFIX%%kube-rbac-proxy"
tag: "0.19.1"
tag: "0.18.1"
pullPolicy: IfNotPresent
# Prometheus Operator PodMonitors
@@ -201,7 +201,7 @@ controller:
# webhookMode: enabled
image:
repository: "%%IMG_REPO%%/%%IMG_PREFIX%%metallb-controller"
tag: "v0.15.2"
tag: "v0.14.9"
pullPolicy: IfNotPresent
## @param controller.updateStrategy.type Metallb controller deployment strategy type.
## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy
@@ -282,7 +282,7 @@ speaker:
image:
repository: "%%IMG_REPO%%/%%IMG_PREFIX%%metallb-speaker"
tag: "v0.15.2"
tag: "v0.14.9"
pullPolicy: IfNotPresent
## @param speaker.updateStrategy.type Speaker daemonset strategy type
## ref: https://kubernetes.io/docs/tasks/manage-daemon/update-daemon-set/
@@ -346,7 +346,7 @@ speaker:
enabled: false
image:
repository: "%%IMG_REPO%%/%%IMG_PREFIX%%frr"
tag: "10.2.1"
tag: "8.5.6"
pullPolicy: IfNotPresent
metricsPort: 7473
resources: {}

View File

@@ -2,7 +2,7 @@
<service name="obs_scm">
<param name="url">https://github.com/metallb/metallb</param>
<param name="scm">git</param>
<param name="revision">v0.15.2</param>
<param name="revision">v0.14.9</param>
<param name="version">_auto_</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
@@ -18,4 +18,4 @@
<service name="go_modules">
</service>
<service mode="buildtime" name="set_version" />
</services>
</services>

View File

@@ -17,14 +17,14 @@
Name: metallb
Version: 0.15.2
Release: 0.15.2
Version: 0.14.9
Release: 0.14.9
Summary: Load Balancer for bare metal Kubernetes clusters
License: Apache-2.0
URL: https://github.com/metallb/metallb
Source: %{name}-%{version}.tar
Source1: vendor.tar.gz
BuildRequires: golang(API) = 1.24
BuildRequires: golang(API) = 1.22
ExcludeArch: s390
ExcludeArch: %{ix86}

View File

@@ -1,34 +0,0 @@
# SPDX-License-Identifier: Apache-2.0
#!BuildTag: %%IMG_PREFIX%%network-resources-injector:v%%network-resources-injector_version%%
#!BuildTag: %%IMG_PREFIX%%network-resources-injector:v%%network-resources-injector_version%%-%RELEASE%
ARG SLE_VERSION
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
FROM registry.suse.com/bci/bci-base:$SLE_VERSION AS base
COPY --from=micro / /installroot/
RUN zypper --installroot /installroot --non-interactive install --no-recommends network-resources-injector gawk which; \
zypper -n clean; \
rm -rf /var/log/*
FROM micro AS final
# Define labels according to https://en.opensuse.org/Building_derived_containers
# labelprefix=com.suse.application.network-resources-injector
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
LABEL org.opencontainers.image.title="SLE network-resources-injector Container Image"
LABEL org.opencontainers.image.description="network-resources-injector based on the SLE Base Container Image."
LABEL org.opencontainers.image.version="%%network-resources-injector_version%%"
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
LABEL org.opencontainers.image.created="%BUILDTIME%"
LABEL org.opencontainers.image.vendor="SUSE LLC"
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%network-resources-injector:%%network-resources-injector_version%%-%RELEASE%"
LABEL org.openbuildservice.disturl="%DISTURL%"
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
LABEL com.suse.eula="SUSE Combined EULA February 2024"
LABEL com.suse.lifecycle-url="https://www.suse.com/lifecycle"
LABEL com.suse.image-type="application"
LABEL com.suse.release-stage="released"
# endlabelprefix
USER 1001
COPY --from=base /installroot /
CMD ["/usr/bin/webhook"]

View File

@@ -1,19 +0,0 @@
<services>
<service name="kiwi_metainfo_helper" mode="buildtime"/>
<service name="docker_label_helper" mode="buildtime"/>
<service name="replace_using_package_version" mode="buildtime">
<param name="file">Dockerfile</param>
<param name="regex">%%network-resources-injector_version%%</param>
<param name="package">network-resources-injector</param>
<param name="parse-version">patch</param>
</service>
<service name="replace_using_env" mode="buildtime">
<param name="file">Dockerfile</param>
<param name="eval">IMG_PREFIX=$(rpm --macros=/root/.rpmmacros -E %{?img_prefix})</param>
<param name="var">IMG_PREFIX</param>
<param name="eval">IMG_REPO=$(rpm --macros=/root/.rpmmacros -E %img_repo)</param>
<param name="var">IMG_REPO</param>
<param name="eval">SUPPORT_LEVEL=$(rpm --macros=/root/.rpmmacros -E %support_level)</param>
<param name="var">SUPPORT_LEVEL</param>
</service>
</services>

View File

@@ -1,20 +0,0 @@
<services>
<service name="obs_scm">
<param name="url">https://github.com/k8snetworkplumbingwg/network-resources-injector</param>
<param name="scm">git</param>
<param name="revision">v1.8.0</param>
<param name="version">_auto_</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="changesgenerate">enable</param>
<param name="changesauthor">antonio.alarcon@suse.com</param>
<param name="match-tag">v*</param>
<param name="versionrewrite-pattern">v(\d+\.\d+\.\d+)</param>
<param name="without-version">yes</param>
<param name="versionrewrite-replacement">\1</param>
</service>
<service mode="buildtime" name="tar">
<param name="obsinfo">network-resources-injector.obsinfo</param>
</service>
<service name="go_modules" />
<service mode="buildtime" name="set_version" />
</services>

View File

@@ -1,39 +0,0 @@
diff --git a/cmd/webhook/main.go b/cmd/webhook/main.go
index 1c8f418..b21de81 100644
--- a/cmd/webhook/main.go
+++ b/cmd/webhook/main.go
@@ -121,7 +121,7 @@ func main() {
// initialize webhook with controlSwitches
webhook.SetControlSwitches(controlSwitches)
- //initialize webhook with cache
+ // initialize webhook with cache
netAnnotationCache := netcache.Create()
netAnnotationCache.Start()
webhook.SetNetAttachDefCache(netAnnotationCache)
@@ -192,11 +192,10 @@ func main() {
certUpdated := false
keyUpdated := false
+ watcher.Add(*cert)
+ watcher.Add(*key)
for {
- watcher.Add(*cert)
- watcher.Add(*key)
-
select {
case event, ok := <-watcher.Events:
if !ok {
@@ -209,9 +208,11 @@ func main() {
glog.V(2).Infof("modified file: %v", event.Name)
if event.Name == *cert {
certUpdated = true
+ watcher.Add(*cert)
}
if event.Name == *key {
keyUpdated = true
+ watcher.Add(*key)
}
if keyUpdated && certUpdated {
if err := keyPair.Reload(); err != nil {

Some files were not shown because too many files have changed in this diff Show More