forked from suse-edge/Factory
		
	Compare commits
	
		
			55 Commits
		
	
	
		
	
	| Author | SHA256 | Date | |
|---|---|---|---|
| 45343089f7 | |||
| 3aae51cfae | |||
| 75cc915112 | |||
| ad45235c74 | |||
| 947493ce38 | |||
| 6e914e78fd | |||
| 9c481c528a | |||
| b784e686ce | |||
| c82b927ab8 | |||
| c79a6c5dcc | |||
| 04e92de18a | |||
| 1d8d3b3924 | |||
| 019c3da9db | |||
| 6029137fb3 | |||
| 51b4330cab | |||
| 8596d9328b | |||
| 7649db04b8 | |||
| 47ad45bfab | |||
| 4fdcb0ecb7 | |||
| 7723e20aa0 | |||
| 4434e36b70 | |||
| 2f235ceb1a | |||
| 8816f3b054 | |||
| 453f3564aa | |||
| 421b511d19 | |||
| 1f1e6eae55 | |||
| d32507597f | |||
| eaa7dad6f6 | |||
| 9b502acd83 | |||
| 49894ba16d | |||
| 43d5ffa2bd | |||
| 13b4cd50e2 | |||
| 93f5662ace | |||
| a7284b5d35 | |||
| 312688449c | |||
| cfc89b579d | |||
| 
						
						
							
						
						a089bf30e4
	
				 | 
					
					
						|||
| 
						
						
							
						
						6dc2406148
	
				 | 
					
					
						|||
| 
						
						
							
						
						1928a4cc98
	
				 | 
					
					
						|||
| 
						
						
							
						
						5c48860dcd
	
				 | 
					
					
						|||
| 2f6c9b294c | |||
| cfad38ccb4 | |||
| 1872e09bdf | |||
| d15eb56f43 | |||
| c97db6d3a3 | |||
| fbdab3228e | |||
| e6f27f3ecc | |||
| 4fab8da5d5 | |||
| 1583758ffa | |||
| 9cf01c4934 | |||
| 5c9ab033b3 | |||
| 8138909378 | |||
| e55661d20b | |||
| 7ba1026bf5 | |||
| 5b6a86f405 | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1,4 +1,3 @@
 | 
				
			|||||||
*/.osc
 | 
					*/.osc
 | 
				
			||||||
*/__pycache__
 | 
					*/__pycache__
 | 
				
			||||||
.venv/
 | 
					.venv/
 | 
				
			||||||
.idea/
 | 
					 | 
				
			||||||
							
								
								
									
										24
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -13,27 +13,3 @@
 | 
				
			|||||||
[submodule "autoconf"]
 | 
					[submodule "autoconf"]
 | 
				
			||||||
	path = autoconf
 | 
						path = autoconf
 | 
				
			||||||
	url = https://src.opensuse.org/SLFO-pool/autoconf.git
 | 
						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
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
PROJECT = "isv:SUSE:Edge:Factory"
 | 
					PROJECT = "isv:SUSE:Edge:3.3"
 | 
				
			||||||
REPOSITORY = "https://src.opensuse.org/suse-edge/Factory"
 | 
					REPOSITORY = "https://src.opensuse.org/suse-edge/Factory"
 | 
				
			||||||
BRANCH = "main"
 | 
					BRANCH = "3.3"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										35
									
								
								_config
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								_config
									
									
									
									
									
								
							@@ -1,5 +1,4 @@
 | 
				
			|||||||
Prefer: -libqpid-proton10 -python311-urllib3_1
 | 
					Prefer: -libqpid-proton10 -python311-urllib3_1
 | 
				
			||||||
Prefer: -cargo1.58 -cargo1.57 cargo1.89
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Macros:
 | 
					Macros:
 | 
				
			||||||
%__python3 /usr/bin/python3.11
 | 
					%__python3 /usr/bin/python3.11
 | 
				
			||||||
@@ -50,15 +49,6 @@ Macros:
 | 
				
			|||||||
BuildFlags: excludebuild:autoconf:el
 | 
					BuildFlags: excludebuild:autoconf:el
 | 
				
			||||||
BuildFlags: excludebuild:autoconf:testsuite
 | 
					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
 | 
					# Only build manifest embedding images here
 | 
				
			||||||
%if "%_repository" == "test_manifest_images"
 | 
					%if "%_repository" == "test_manifest_images"
 | 
				
			||||||
BuildFlags: onlybuild:edge-image-builder-image
 | 
					BuildFlags: onlybuild:edge-image-builder-image
 | 
				
			||||||
@@ -70,13 +60,10 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
    BuildFlags: excludebuild:endpoint-copier-operator-image
 | 
					    BuildFlags: excludebuild:endpoint-copier-operator-image
 | 
				
			||||||
    BuildFlags: excludebuild:ironic-image
 | 
					    BuildFlags: excludebuild:ironic-image
 | 
				
			||||||
    BuildFlags: excludebuild:ironic-ipa-downloader-image
 | 
					    BuildFlags: excludebuild:ironic-ipa-downloader-image
 | 
				
			||||||
    BuildFlags: excludebuild:kiwi-builder-image
 | 
					 | 
				
			||||||
    BuildFlags: excludebuild:kubectl-image
 | 
					    BuildFlags: excludebuild:kubectl-image
 | 
				
			||||||
    BuildFlags: excludebuild:kube-rbac-proxy-image
 | 
					    BuildFlags: excludebuild:kube-rbac-proxy-image
 | 
				
			||||||
    BuildFlags: excludebuild:metallb-controller-image
 | 
					    BuildFlags: excludebuild:metallb-controller-image
 | 
				
			||||||
    BuildFlags: excludebuild:metallb-speaker-image
 | 
					    BuildFlags: excludebuild:metallb-speaker-image
 | 
				
			||||||
    BuildFlags: excludebuild:nessie-image
 | 
					 | 
				
			||||||
    BuildFlags: excludebuild:suse-edge-components-versions-image
 | 
					 | 
				
			||||||
  %endif
 | 
					  %endif
 | 
				
			||||||
%else
 | 
					%else
 | 
				
			||||||
# Only a subset of stack is arm64 ready
 | 
					# Only a subset of stack is arm64 ready
 | 
				
			||||||
@@ -105,22 +92,8 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
    BuildFlags: onlybuild:metallb
 | 
					    BuildFlags: onlybuild:metallb
 | 
				
			||||||
    BuildFlags: onlybuild:metallb-controller-image
 | 
					    BuildFlags: onlybuild:metallb-controller-image
 | 
				
			||||||
    BuildFlags: onlybuild:metallb-speaker-image
 | 
					    BuildFlags: onlybuild:metallb-speaker-image
 | 
				
			||||||
    BuildFlags: onlybuild:nessie
 | 
					 | 
				
			||||||
    BuildFlags: onlybuild:nessie-image
 | 
					 | 
				
			||||||
    BuildFlags: onlybuild:nm-configurator
 | 
					    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:shim-noarch
 | 
				
			||||||
    BuildFlags: onlybuild:suse-edge-components-versions-image
 | 
					 | 
				
			||||||
  %endif
 | 
					  %endif
 | 
				
			||||||
%endif
 | 
					%endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -131,7 +104,7 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
    Patterntype: none
 | 
					    Patterntype: none
 | 
				
			||||||
    BuildEngine: podman
 | 
					    BuildEngine: podman
 | 
				
			||||||
    Prefer: sles-release
 | 
					    Prefer: sles-release
 | 
				
			||||||
    BuildFlags: dockerarg:SLE_VERSION=15.7
 | 
					    BuildFlags: dockerarg:SLE_VERSION=15.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Publish multi-arch container images only once all archs have been built
 | 
					    # Publish multi-arch container images only once all archs have been built
 | 
				
			||||||
    PublishFlags: archsync
 | 
					    PublishFlags: archsync
 | 
				
			||||||
@@ -171,17 +144,11 @@ BuildFlags: onlybuild:release-manifest-image
 | 
				
			|||||||
      BuildFlags: excludebuild:kube-rbac-proxy-image
 | 
					      BuildFlags: excludebuild:kube-rbac-proxy-image
 | 
				
			||||||
      BuildFlags: excludebuild:metallb-controller-image
 | 
					      BuildFlags: excludebuild:metallb-controller-image
 | 
				
			||||||
      BuildFlags: excludebuild:metallb-speaker-image
 | 
					      BuildFlags: excludebuild:metallb-speaker-image
 | 
				
			||||||
      BuildFlags: excludebuild:nessie-image
 | 
					 | 
				
			||||||
      BuildFlags: excludebuild:suse-edge-components-versions-image
 | 
					 | 
				
			||||||
    %endif
 | 
					    %endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%else
 | 
					%else
 | 
				
			||||||
    %if "%{sub %{reverse %_project} 1 7}" != "%{reverse :ToTest}" && "%{sub %{reverse %_project} 1 9}" != "%{reverse :Snapshot}"
 | 
					    %if "%{sub %{reverse %_project} 1 7}" != "%{reverse :ToTest}" && "%{sub %{reverse %_project} 1 9}" != "%{reverse :Snapshot}"
 | 
				
			||||||
      BuildFlags: excludebuild:kiwi-builder-image
 | 
					      BuildFlags: excludebuild:kiwi-builder-image
 | 
				
			||||||
    %else
 | 
					 | 
				
			||||||
      %ifarch aarch64
 | 
					 | 
				
			||||||
        BuildFlags: onlybuild:kiwi-builder-image
 | 
					 | 
				
			||||||
      %endif
 | 
					 | 
				
			||||||
    %endif
 | 
					    %endif
 | 
				
			||||||
%endif
 | 
					%endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										6
									
								
								_meta
									
									
									
									
									
								
							
							
						
						
									
										6
									
								
								_meta
									
									
									
									
									
								
							@@ -45,7 +45,7 @@
 | 
				
			|||||||
      <path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
 | 
					      <path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
 | 
				
			||||||
      <path project="SUSE:SLFO:Main:Build" repository="standard"/>
 | 
					      <path project="SUSE:SLFO:Main:Build" repository="standard"/>
 | 
				
			||||||
    {%- else %}
 | 
					    {%- else %}
 | 
				
			||||||
      <path project="SUSE:CA" repository="SLE_15_SP7"/>
 | 
					      <path project="SUSE:CA" repository="SLE_15_SP6"/>
 | 
				
			||||||
      <path project="{{ project }}" repository="standard"/>
 | 
					      <path project="{{ project }}" repository="standard"/>
 | 
				
			||||||
    {%- endif %}
 | 
					    {%- endif %}
 | 
				
			||||||
    <arch>x86_64</arch>
 | 
					    <arch>x86_64</arch>
 | 
				
			||||||
@@ -56,8 +56,8 @@
 | 
				
			|||||||
    {%- if release_project is defined and not for_release %}
 | 
					    {%- if release_project is defined and not for_release %}
 | 
				
			||||||
    <releasetarget project="{{ release_project }}" repository="standard" trigger="manual"/>
 | 
					    <releasetarget project="{{ release_project }}" repository="standard" trigger="manual"/>
 | 
				
			||||||
    {%- endif %}
 | 
					    {%- endif %}
 | 
				
			||||||
    <path project="{{ ironic_base }}:2025.1" repository="15.7"/>
 | 
					    <path project="{{ ironic_base }}:2024.2" repository="15.6"/>
 | 
				
			||||||
    <path project="SUSE:SLE-15-SP7:Update" repository="standard"/>
 | 
					    <path project="SUSE:SLE-15-SP6:Update" repository="standard"/>
 | 
				
			||||||
    <arch>x86_64</arch>
 | 
					    <arch>x86_64</arch>
 | 
				
			||||||
    <arch>aarch64</arch>
 | 
					    <arch>aarch64</arch>
 | 
				
			||||||
  </repository>
 | 
					  </repository>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1
 | 
					#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1
 | 
				
			||||||
 | 
					#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1-%RELEASE%
 | 
				
			||||||
annotations:
 | 
					annotations:
 | 
				
			||||||
  catalog.cattle.io/certified: rancher
 | 
					  catalog.cattle.io/certified: rancher
 | 
				
			||||||
  catalog.cattle.io/namespace: cattle-ui-plugin-system
 | 
					  catalog.cattle.io/namespace: cattle-ui-plugin-system
 | 
				
			||||||
@@ -12,10 +13,10 @@ annotations:
 | 
				
			|||||||
  catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
 | 
					  catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
 | 
				
			||||||
  catalog.cattle.io/kube-version: '>= v1.26.0-0'
 | 
					  catalog.cattle.io/kube-version: '>= v1.26.0-0'
 | 
				
			||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: 304.0.3+up1.3.1
 | 
					appVersion: 303.0.2+up1.3.1
 | 
				
			||||||
description: 'SUSE Edge: Akri extension for Rancher Dashboard'
 | 
					description: 'SUSE Edge: Akri extension for Rancher Dashboard'
 | 
				
			||||||
name: akri-dashboard-extension
 | 
					name: akri-dashboard-extension
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: "%%CHART_MAJOR%%.0.3+up1.3.1"
 | 
					version: "%%CHART_MAJOR%%.0.2+up1.3.1"
 | 
				
			||||||
icon: >-
 | 
					icon: >-
 | 
				
			||||||
  https://raw.githubusercontent.com/cncf/artwork/main/projects/akri/icon/color/akri-icon-color.svg
 | 
					  https://raw.githubusercontent.com/cncf/artwork/main/projects/akri/icon/color/akri-icon-color.svg
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ spec:
 | 
				
			|||||||
  plugin:
 | 
					  plugin:
 | 
				
			||||||
    name: {{ include "extension-server.fullname" . }}
 | 
					    name: {{ include "extension-server.fullname" . }}
 | 
				
			||||||
    version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
 | 
					    version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
 | 
				
			||||||
    endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/304.0.3+up1.3.1
 | 
					    endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/303.0.2+up1.3.1
 | 
				
			||||||
    noCache: {{ .Values.plugin.noCache }}
 | 
					    noCache: {{ .Values.plugin.noCache }}
 | 
				
			||||||
    noAuth: {{ .Values.plugin.noAuth }}
 | 
					    noAuth: {{ .Values.plugin.noAuth }}
 | 
				
			||||||
    metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
 | 
					    metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1
 | 
					#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,163 +0,0 @@
 | 
				
			|||||||
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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,91 +0,0 @@
 | 
				
			|||||||
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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,49 +0,0 @@
 | 
				
			|||||||
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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,422 +0,0 @@
 | 
				
			|||||||
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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -1,46 +0,0 @@
 | 
				
			|||||||
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
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 <service name="obs_scm">
 | 
					 <service name="obs_scm">
 | 
				
			||||||
    <param name="url">https://github.com/metal3-io/baremetal-operator</param>
 | 
					    <param name="url">https://github.com/metal3-io/baremetal-operator</param>
 | 
				
			||||||
    <param name="scm">git</param>
 | 
					    <param name="scm">git</param>
 | 
				
			||||||
    <param name="revision">v0.10.2</param>
 | 
					    <param name="revision">v0.9.1</param>
 | 
				
			||||||
    <param name="version">_auto_</param>
 | 
					    <param name="version">_auto_</param>
 | 
				
			||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="changesgenerate">enable</param>
 | 
					    <param name="changesgenerate">enable</param>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,21 +17,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           baremetal-operator
 | 
					Name:           baremetal-operator
 | 
				
			||||||
Version:        0.10.2
 | 
					Version:        0.9.1
 | 
				
			||||||
Release:        0
 | 
					Release:        0
 | 
				
			||||||
Summary:        Implements a Kubernetes API for managing bare metal hosts
 | 
					Summary:        Implements a Kubernetes API for managing bare metal hosts
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
URL:            https://github.com/metal3-io/baremetal-operator
 | 
					URL:            https://github.com/metal3-io/baremetal-operator
 | 
				
			||||||
Source:         baremetal-operator-%{version}.tar
 | 
					Source:         baremetal-operator-%{version}.tar
 | 
				
			||||||
Source1:        vendor.tar.gz
 | 
					Source1:        vendor.tar.gz
 | 
				
			||||||
# Patches related to multi-architecture support, upstream PRs #2506 #2559 #2537
 | 
					BuildRequires:  golang(API) = 1.23
 | 
				
			||||||
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
 | 
					ExcludeArch:    s390
 | 
				
			||||||
ExcludeArch:    %{ix86}
 | 
					ExcludeArch:    %{ix86}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,9 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.1_up0.6.0
 | 
					#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.0_up0.5.0
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.1_up0.6.0-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.0_up0.5.0-%RELEASE%
 | 
				
			||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: 1.62.0
 | 
					appVersion: 1.61.0
 | 
				
			||||||
description: A Helm chart for Containerized Data Importer (CDI)
 | 
					description: A Helm chart for Containerized Data Importer (CDI)
 | 
				
			||||||
icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
 | 
					icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
 | 
				
			||||||
name: cdi
 | 
					name: cdi
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: "%%CHART_MAJOR%%.0.1+up0.6.0"
 | 
					version: "%%CHART_MAJOR%%.0.0+up0.5.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,9 +109,9 @@ spec:
 | 
				
			|||||||
                  description: CDIConfig at CDI level
 | 
					                  description: CDIConfig at CDI level
 | 
				
			||||||
                  properties:
 | 
					                  properties:
 | 
				
			||||||
                    dataVolumeTTLSeconds:
 | 
					                    dataVolumeTTLSeconds:
 | 
				
			||||||
                      description: |-
 | 
					                      description: DataVolumeTTLSeconds is the time in seconds after
 | 
				
			||||||
                        DataVolumeTTLSeconds is the time in seconds after DataVolume completion it can be garbage collected. Disabled by default.
 | 
					                        DataVolume completion it can be garbage collected. Disabled
 | 
				
			||||||
                        Deprecated: Removed in v1.62.
 | 
					                        by default.
 | 
				
			||||||
                      format: int32
 | 
					                      format: int32
 | 
				
			||||||
                      type: integer
 | 
					                      type: integer
 | 
				
			||||||
                    featureGates:
 | 
					                    featureGates:
 | 
				
			||||||
@@ -2641,9 +2641,9 @@ spec:
 | 
				
			|||||||
                  description: CDIConfig at CDI level
 | 
					                  description: CDIConfig at CDI level
 | 
				
			||||||
                  properties:
 | 
					                  properties:
 | 
				
			||||||
                    dataVolumeTTLSeconds:
 | 
					                    dataVolumeTTLSeconds:
 | 
				
			||||||
                      description: |-
 | 
					                      description: DataVolumeTTLSeconds is the time in seconds after
 | 
				
			||||||
                        DataVolumeTTLSeconds is the time in seconds after DataVolume completion it can be garbage collected. Disabled by default.
 | 
					                        DataVolume completion it can be garbage collected. Disabled
 | 
				
			||||||
                        Deprecated: Removed in v1.62.
 | 
					                        by default.
 | 
				
			||||||
                      format: int32
 | 
					                      format: int32
 | 
				
			||||||
                      type: integer
 | 
					                      type: integer
 | 
				
			||||||
                    featureGates:
 | 
					                    featureGates:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -599,8 +599,6 @@ spec:
 | 
				
			|||||||
  strategy: {}
 | 
					  strategy: {}
 | 
				
			||||||
  template:
 | 
					  template:
 | 
				
			||||||
    metadata:
 | 
					    metadata:
 | 
				
			||||||
      annotations:
 | 
					 | 
				
			||||||
        openshift.io/required-scc: restricted-v2
 | 
					 | 
				
			||||||
      labels:
 | 
					      labels:
 | 
				
			||||||
        cdi.kubevirt.io: cdi-operator
 | 
					        cdi.kubevirt.io: cdi-operator
 | 
				
			||||||
        name: cdi-operator
 | 
					        name: cdi-operator
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,3 @@ spec:
 | 
				
			|||||||
  workload:
 | 
					  workload:
 | 
				
			||||||
  {{- toYaml . | nindent 4 }}
 | 
					  {{- toYaml . | nindent 4 }}
 | 
				
			||||||
  {{- end }}
 | 
					  {{- end }}
 | 
				
			||||||
  {{- with .Values.cdi.customizeComponents }}
 | 
					 | 
				
			||||||
  customizeComponents:
 | 
					 | 
				
			||||||
  {{- toYaml . | nindent 4 }}
 | 
					 | 
				
			||||||
  {{- end }}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,12 @@
 | 
				
			|||||||
deployment:
 | 
					deployment:
 | 
				
			||||||
  version: 1.62.0-150700.9.3.1
 | 
					  version: 1.61.0-150600.3.12.1
 | 
				
			||||||
  operatorImage: registry.suse.com/suse/sles/15.7/cdi-operator
 | 
					  operatorImage: registry.suse.com/suse/sles/15.6/cdi-operator
 | 
				
			||||||
  controllerImage: registry.suse.com/suse/sles/15.7/cdi-controller
 | 
					  controllerImage: registry.suse.com/suse/sles/15.6/cdi-controller
 | 
				
			||||||
  importerImage: registry.suse.com/suse/sles/15.7/cdi-importer
 | 
					  importerImage: registry.suse.com/suse/sles/15.6/cdi-importer
 | 
				
			||||||
  clonerImage: registry.suse.com/suse/sles/15.7/cdi-cloner
 | 
					  clonerImage: registry.suse.com/suse/sles/15.6/cdi-cloner
 | 
				
			||||||
  apiserverImage: registry.suse.com/suse/sles/15.7/cdi-apiserver
 | 
					  apiserverImage: registry.suse.com/suse/sles/15.6/cdi-apiserver
 | 
				
			||||||
  uploadserverImage: registry.suse.com/suse/sles/15.7/cdi-uploadserver
 | 
					  uploadserverImage: registry.suse.com/suse/sles/15.6/cdi-uploadserver
 | 
				
			||||||
  uploadproxyImage: registry.suse.com/suse/sles/15.7/cdi-uploadproxy
 | 
					  uploadproxyImage: registry.suse.com/suse/sles/15.6/cdi-uploadproxy
 | 
				
			||||||
  pullPolicy: IfNotPresent
 | 
					  pullPolicy: IfNotPresent
 | 
				
			||||||
  affinity:
 | 
					  affinity:
 | 
				
			||||||
    podAffinity:
 | 
					    podAffinity:
 | 
				
			||||||
@@ -30,7 +30,6 @@ cdi:
 | 
				
			|||||||
    featureGates:
 | 
					    featureGates:
 | 
				
			||||||
      - HonorWaitForFirstConsumer
 | 
					      - HonorWaitForFirstConsumer
 | 
				
			||||||
  imagePullPolicy: "IfNotPresent"
 | 
					  imagePullPolicy: "IfNotPresent"
 | 
				
			||||||
  customizeComponents: {}
 | 
					 | 
				
			||||||
  infra:
 | 
					  infra:
 | 
				
			||||||
    nodeSelector:
 | 
					    nodeSelector:
 | 
				
			||||||
      kubernetes.io/os: linux
 | 
					      kubernetes.io/os: linux
 | 
				
			||||||
@@ -42,7 +41,7 @@ cdi:
 | 
				
			|||||||
    nodeSelector:
 | 
					    nodeSelector:
 | 
				
			||||||
      kubernetes.io/os: linux
 | 
					      kubernetes.io/os: linux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hookImage: registry.rancher.com/rancher/kubectl:v1.33.1
 | 
					hookImage: registry.rancher.com/rancher/kubectl:v1.30.10
 | 
				
			||||||
hookRestartPolicy: OnFailure
 | 
					hookRestartPolicy: OnFailure
 | 
				
			||||||
hookSecurityContext:
 | 
					hookSecurityContext:
 | 
				
			||||||
  seccompProfile:
 | 
					  seccompProfile:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.3.0
 | 
					#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.3.0-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-base:$SLE_VERSION
 | 
					FROM registry.suse.com/bci/bci-base:$SLE_VERSION
 | 
				
			||||||
MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
					MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
				
			||||||
@@ -14,11 +15,11 @@ RUN zypper --non-interactive install --no-recommends edge-image-builder qemu-x86
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE edge-image-builder Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE edge-image-builder Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="edge-image-builder based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="edge-image-builder based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="1.3.0"
 | 
					LABEL org.opencontainers.image.version="1.2.1"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%edge-image-builder:1.3.0-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%edge-image-builder:1.2.1-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,19 +1,15 @@
 | 
				
			|||||||
metallb:
 | 
					metallb:
 | 
				
			||||||
  chart: metallb
 | 
					  chart: metallb
 | 
				
			||||||
  repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"
 | 
					  repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"
 | 
				
			||||||
  version: "%%CHART_MAJOR%%.0.1+up0.15.2"
 | 
					  version: "%%CHART_MAJOR%%.0.0+up0.14.9"
 | 
				
			||||||
endpoint-copier-operator:
 | 
					endpoint-copier-operator:
 | 
				
			||||||
  chart: endpoint-copier-operator
 | 
					  chart: endpoint-copier-operator
 | 
				
			||||||
  repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"
 | 
					  repository: "%%CHART_REPO%%/%%CHART_PREFIX%%"
 | 
				
			||||||
  version: "%%CHART_MAJOR%%.0.1+up0.3.0"
 | 
					  version: "%%CHART_MAJOR%%.0.0+up0.2.1"
 | 
				
			||||||
kubernetes:
 | 
					kubernetes:
 | 
				
			||||||
  k3s:
 | 
					  k3s:
 | 
				
			||||||
    selinuxPackage: k3s-selinux-1.6-1.slemicro.noarch
 | 
					    selinuxPackage: k3s-selinux-1.6-1.slemicro.noarch
 | 
				
			||||||
    selinuxRepository: https://rpm.rancher.io/k3s/stable/common/slemicro/noarch
 | 
					    selinuxRepository: https://rpm.rancher.io/k3s/stable/common/slemicro/noarch
 | 
				
			||||||
    selinuxRepositoryPriority: 1
 | 
					 | 
				
			||||||
    releaseURL: https://github.com/k3s-io/k3s/releases/download/
 | 
					 | 
				
			||||||
  rke2:
 | 
					  rke2:
 | 
				
			||||||
    selinuxPackage: rke2-selinux
 | 
					    selinuxPackage: rke2-selinux
 | 
				
			||||||
    selinuxRepository: https://rpm.rancher.io/rke2/stable/common/slemicro/noarch
 | 
					    selinuxRepository: https://rpm.rancher.io/rke2/stable/common/slemicro/noarch
 | 
				
			||||||
    selinuxRepositoryPriority: 1
 | 
					 | 
				
			||||||
    releaseURL: https://github.com/rancher/rke2/releases/download/
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,9 +3,9 @@
 | 
				
			|||||||
    <param name="url">https://github.com/suse-edge/edge-image-builder.git</param>
 | 
					    <param name="url">https://github.com/suse-edge/edge-image-builder.git</param>
 | 
				
			||||||
    <param name="scm">git</param>
 | 
					    <param name="scm">git</param>
 | 
				
			||||||
    <param name="exclude">.git</param>
 | 
					    <param name="exclude">.git</param>
 | 
				
			||||||
    <param name="revision">v1.3.0</param>
 | 
					    <param name="revision">v1.2.1</param>
 | 
				
			||||||
    <!-- Uncomment and set this For Pre-Release Version -->
 | 
					    <!-- Uncomment and set this For Pre-Release Version -->
 | 
				
			||||||
    <!-- <param name="version">1.3.0</param> -->
 | 
					    <!-- <param name="version">1.2.0~rc1</param> -->
 | 
				
			||||||
    <!-- Uncomment and this for regular version -->
 | 
					    <!-- Uncomment and this for regular version -->
 | 
				
			||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="versionrewrite-pattern">v(\d+).(\d+).(\d+)</param>
 | 
					    <param name="versionrewrite-pattern">v(\d+).(\d+).(\d+)</param>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           edge-image-builder
 | 
					Name:           edge-image-builder
 | 
				
			||||||
Version:        1.3.0
 | 
					Version:        1.2.1
 | 
				
			||||||
Release:        0
 | 
					Release:        0
 | 
				
			||||||
Summary:        Edge Image Builder
 | 
					Summary:        Edge Image Builder
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.1_up0.3.0
 | 
					#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.0_up0.2.1
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.1_up0.3.0-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%endpoint-copier-operator:%%CHART_MAJOR%%.0.0_up0.2.1-%RELEASE%
 | 
				
			||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: v0.3.0
 | 
					appVersion: v0.2.0
 | 
				
			||||||
description: A Helm chart for Kubernetes
 | 
					description: A Helm chart for Kubernetes
 | 
				
			||||||
name: endpoint-copier-operator
 | 
					name: endpoint-copier-operator
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: "%%CHART_MAJOR%%.0.1+up0.3.0"
 | 
					version: "%%CHART_MAJOR%%.0.0+up0.2.1"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,23 +20,8 @@ spec:
 | 
				
			|||||||
      labels:
 | 
					      labels:
 | 
				
			||||||
        {{- include "endpoint-copier-operator.selectorLabels" . | nindent 8 }}
 | 
					        {{- include "endpoint-copier-operator.selectorLabels" . | nindent 8 }}
 | 
				
			||||||
    spec:
 | 
					    spec:
 | 
				
			||||||
      {{- if .Values.priorityClassName }}
 | 
					 | 
				
			||||||
      priorityClassName: {{ .Values.priorityClassName }}
 | 
					 | 
				
			||||||
      {{- end }}
 | 
					 | 
				
			||||||
      securityContext:
 | 
					      securityContext:
 | 
				
			||||||
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
 | 
					        {{- toYaml .Values.podSecurityContext | nindent 8 }}
 | 
				
			||||||
      {{- with .Values.nodeSelector }}
 | 
					 | 
				
			||||||
      nodeSelector:
 | 
					 | 
				
			||||||
        {{- toYaml . | nindent 8 }}
 | 
					 | 
				
			||||||
      {{- end }}
 | 
					 | 
				
			||||||
      {{- with .Values.affinity }}
 | 
					 | 
				
			||||||
      affinity:
 | 
					 | 
				
			||||||
        {{- toYaml . | nindent 8 }}
 | 
					 | 
				
			||||||
      {{- end }}
 | 
					 | 
				
			||||||
      {{- with .Values.tolerations }}
 | 
					 | 
				
			||||||
      tolerations:
 | 
					 | 
				
			||||||
        {{- toYaml . | nindent 8 }}
 | 
					 | 
				
			||||||
      {{- end }}
 | 
					 | 
				
			||||||
      containers:
 | 
					      containers:
 | 
				
			||||||
      - command:
 | 
					      - command:
 | 
				
			||||||
        - /manager
 | 
					        - /manager
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,9 +7,9 @@ metadata:
 | 
				
			|||||||
  name: {{ include "endpoint-copier-operator.fullname" . }}
 | 
					  name: {{ include "endpoint-copier-operator.fullname" . }}
 | 
				
			||||||
rules:
 | 
					rules:
 | 
				
			||||||
- apiGroups:
 | 
					- apiGroups:
 | 
				
			||||||
  - "discovery.k8s.io"
 | 
					  - ""
 | 
				
			||||||
  resources:
 | 
					  resources:
 | 
				
			||||||
  - endpointslices
 | 
					  - endpoints
 | 
				
			||||||
  verbs:
 | 
					  verbs:
 | 
				
			||||||
  - create
 | 
					  - create
 | 
				
			||||||
  - delete
 | 
					  - delete
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,7 @@ image:
 | 
				
			|||||||
  repository: %%IMG_REPO%%/%%IMG_PREFIX%%endpoint-copier-operator
 | 
					  repository: %%IMG_REPO%%/%%IMG_PREFIX%%endpoint-copier-operator
 | 
				
			||||||
  pullPolicy: IfNotPresent
 | 
					  pullPolicy: IfNotPresent
 | 
				
			||||||
  # Overrides the image tag whose default is the chart appVersion.
 | 
					  # Overrides the image tag whose default is the chart appVersion.
 | 
				
			||||||
  tag: "0.3.0"
 | 
					  tag: "0.2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
nameOverride: "endpoint-copier-operator"
 | 
					nameOverride: "endpoint-copier-operator"
 | 
				
			||||||
fullnameOverride: "endpoint-copier-operator"
 | 
					fullnameOverride: "endpoint-copier-operator"
 | 
				
			||||||
@@ -29,8 +29,6 @@ podSecurityContext:
 | 
				
			|||||||
  seccompProfile:
 | 
					  seccompProfile:
 | 
				
			||||||
    type: RuntimeDefault
 | 
					    type: RuntimeDefault
 | 
				
			||||||
 | 
					
 | 
				
			||||||
priorityClassName: "system-cluster-critical"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
securityContext:
 | 
					securityContext:
 | 
				
			||||||
  allowPrivilegeEscalation: false
 | 
					  allowPrivilegeEscalation: false
 | 
				
			||||||
  capabilities:
 | 
					  capabilities:
 | 
				
			||||||
@@ -39,11 +37,11 @@ securityContext:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
resources:
 | 
					resources:
 | 
				
			||||||
  limits:
 | 
					  limits:
 | 
				
			||||||
    cpu: 100m
 | 
					    cpu: 500m
 | 
				
			||||||
    memory: 64Mi
 | 
					    memory: 128Mi
 | 
				
			||||||
  requests:
 | 
					  requests:
 | 
				
			||||||
    cpu: 5m
 | 
					    cpu: 10m
 | 
				
			||||||
    memory: 32Mi
 | 
					    memory: 64Mi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
autoscaling:
 | 
					autoscaling:
 | 
				
			||||||
  enabled: false
 | 
					  enabled: false
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 <service name="obs_scm">
 | 
					 <service name="obs_scm">
 | 
				
			||||||
    <param name="url">https://github.com/suse-edge/endpoint-copier-operator</param>
 | 
					    <param name="url">https://github.com/suse-edge/endpoint-copier-operator</param>
 | 
				
			||||||
    <param name="scm">git</param>
 | 
					    <param name="scm">git</param>
 | 
				
			||||||
    <param name="revision">v0.3.0</param>
 | 
					    <param name="revision">v0.2.0</param>
 | 
				
			||||||
    <param name="version">_auto_</param>
 | 
					    <param name="version">_auto_</param>
 | 
				
			||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="changesgenerate">enable</param>
 | 
					    <param name="changesgenerate">enable</param>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,14 +17,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           endpoint-copier-operator
 | 
					Name:           endpoint-copier-operator
 | 
				
			||||||
Version:        0.3.0
 | 
					Version:        0.2.0
 | 
				
			||||||
Release:        0.3.0
 | 
					Release:        0.2.0
 | 
				
			||||||
Summary:        Implements a Kubernetes API for copying endpoint resources
 | 
					Summary:        Implements a Kubernetes API for copying endpoint resources
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
URL:            https://github.com/suse-edge/endpoint-copier-operator
 | 
					URL:            https://github.com/suse-edge/endpoint-copier-operator
 | 
				
			||||||
Source:         endpoint-copier-operator-%{version}.tar
 | 
					Source:         endpoint-copier-operator-%{version}.tar
 | 
				
			||||||
Source1:        vendor.tar.gz
 | 
					Source1:        vendor.tar.gz
 | 
				
			||||||
BuildRequires:  golang(API) = 1.24
 | 
					BuildRequires:  golang(API) = 1.20
 | 
				
			||||||
ExcludeArch:    s390
 | 
					ExcludeArch:    s390
 | 
				
			||||||
ExcludeArch:    %{ix86}
 | 
					ExcludeArch:    %{ix86}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
# SPDX-License-Identifier: MIT
 | 
					# SPDX-License-Identifier: MIT
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr:10.2.1
 | 
					#!BuildTag: %%IMG_PREFIX%%frr:8.5.6
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr:10.2.1-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%frr:8.5.6-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14,11 +15,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="FRR Container Image"
 | 
					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.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.url="https://www.suse.com/products/server/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					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 org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 <service name="obs_scm">
 | 
					 <service name="obs_scm">
 | 
				
			||||||
    <param name="url">https://github.com/metallb/frr-k8s</param>
 | 
					    <param name="url">https://github.com/metallb/frr-k8s</param>
 | 
				
			||||||
    <param name="scm">git</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="version">_auto_</param>
 | 
				
			||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="changesgenerate">enable</param>
 | 
					    <param name="changesgenerate">enable</param>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,14 +17,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           frr-k8s
 | 
					Name:           frr-k8s
 | 
				
			||||||
Version:        0.0.20
 | 
					Version:        0.0.16
 | 
				
			||||||
Release:        0.0.20
 | 
					Release:        0.0.16
 | 
				
			||||||
Summary:        A kubernetes based daemonset that exposes a subset of the FRR API in a kubernetes compliant manner.
 | 
					Summary:        A kubernetes based daemonset that exposes a subset of the FRR API in a kubernetes compliant manner.
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
URL:            https://github.com/metallb/frr-k8s
 | 
					URL:            https://github.com/metallb/frr-k8s
 | 
				
			||||||
Source:         frr-k8s-%{version}.tar
 | 
					Source:         frr-k8s-%{version}.tar
 | 
				
			||||||
Source1:        vendor.tar.gz
 | 
					Source1:        vendor.tar.gz
 | 
				
			||||||
BuildRequires:  golang(API) = 1.24
 | 
					BuildRequires:  golang(API) = 1.22
 | 
				
			||||||
ExcludeArch:    s390
 | 
					ExcludeArch:    s390
 | 
				
			||||||
ExcludeArch:    %{ix86}
 | 
					ExcludeArch:    %{ix86}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@
 | 
				
			|||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="scm">git</param>
 | 
					    <param name="scm">git</param>
 | 
				
			||||||
    <param name="exclude">.get</param>
 | 
					    <param name="exclude">.get</param>
 | 
				
			||||||
    <param name="revision">v1.2.5</param>
 | 
					    <param name="revision">v1.2.1</param>
 | 
				
			||||||
    <param name="versionrewrite-pattern">v(.*)</param>
 | 
					    <param name="versionrewrite-pattern">v(.*)</param>
 | 
				
			||||||
    <param name="changesgenerate">enable</param>
 | 
					    <param name="changesgenerate">enable</param>
 | 
				
			||||||
  </service>
 | 
					  </service>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,7 +18,7 @@
 | 
				
			|||||||
%define project github.com/hauler-dev/hauler
 | 
					%define project github.com/hauler-dev/hauler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           hauler
 | 
					Name:           hauler
 | 
				
			||||||
Version:        1.2.5
 | 
					Version:        1.2.1
 | 
				
			||||||
Release:        0
 | 
					Release:        0
 | 
				
			||||||
Summary:        Airgap Swiss Army Knife
 | 
					Summary:        Airgap Swiss Army Knife
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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"]
 | 
					 | 
				
			||||||
@@ -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>
 | 
					 | 
				
			||||||
@@ -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.2.1</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>
 | 
					 | 
				
			||||||
@@ -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.23
 | 
					 | 
				
			||||||
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,6 +1,7 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.4
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.4
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.4-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.4-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
@@ -19,11 +20,11 @@ RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#!ArchExclusiveLine: x86_64
 | 
					#!ArchExclusiveLine: x86_64
 | 
				
			||||||
RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
					RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
				
			||||||
      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; \
 | 
					      zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi inotify-tools ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
#!ArchExclusiveLine: aarch64
 | 
					#!ArchExclusiveLine: aarch64
 | 
				
			||||||
RUN if [ "$(uname -m)" = "aarch64" ];then \
 | 
					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; \
 | 
					      zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi inotify-tools ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
# DATABASE
 | 
					# DATABASE
 | 
				
			||||||
@@ -31,9 +32,7 @@ RUN mkdir -p /installroot/var/lib/ironic && \
 | 
				
			|||||||
  /installroot/usr/bin/sqlite3 /installroot/var/lib/ironic/ironic.sqlite "pragma journal_mode=wal" && \
 | 
					  /installroot/usr/bin/sqlite3 /installroot/var/lib/ironic/ironic.sqlite "pragma journal_mode=wal" && \
 | 
				
			||||||
  zypper --installroot /installroot --non-interactive remove sqlite3
 | 
					  zypper --installroot /installroot --non-interactive remove sqlite3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# build actual image
 | 
					 | 
				
			||||||
FROM micro AS final
 | 
					FROM micro AS final
 | 
				
			||||||
 | 
					 | 
				
			||||||
MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
					MAINTAINER SUSE LLC (https://www.suse.com/)
 | 
				
			||||||
# Define labels according to https://en.opensuse.org/Building_derived_containers
 | 
					# Define labels according to https://en.opensuse.org/Building_derived_containers
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Openstack Ironic Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Openstack Ironic Container Image"
 | 
				
			||||||
@@ -41,8 +40,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.url="https://www.suse.com/products/server/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opencontainers.image.version="29.0.4.4"
 | 
					LABEL org.opencontainers.image.version="26.1.2.4"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:29.0.4.4-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:26.1.2.4-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
@@ -63,19 +62,14 @@ RUN echo 'alias mkisofs="xorriso -as mkisofs"' >> ~/.bashrc
 | 
				
			|||||||
COPY mkisofs_wrapper /usr/bin/mkisofs
 | 
					COPY mkisofs_wrapper /usr/bin/mkisofs
 | 
				
			||||||
RUN set -euo pipefail; chmod +x /usr/bin/mkisofs
 | 
					RUN set -euo pipefail; chmod +x /usr/bin/mkisofs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					COPY auth-common.sh configure-ironic.sh ironic-common.sh rundnsmasq runhttpd runironic runlogwatch.sh tls-common.sh configure-nonroot.sh ironic-probe.j2 /bin/
 | 
				
			||||||
 | 
					RUN set -euo pipefail; chmod +x /bin/auth-common.sh; chmod +x /bin/configure-ironic.sh; chmod +x /bin/ironic-common.sh; chmod +x /bin/rundnsmasq; chmod +x /bin/runhttpd; chmod +x /bin/runironic; chmod +x /bin/runlogwatch.sh; chmod +x /bin/tls-common.sh; chmod +x /bin/configure-nonroot.sh;
 | 
				
			||||||
RUN mkdir -p /tftpboot
 | 
					RUN mkdir -p /tftpboot
 | 
				
			||||||
RUN mkdir -p $GRUB_DIR
 | 
					RUN mkdir -p $GRUB_DIR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COPY scripts/ /bin/
 | 
					# No need to support the Legacy BIOS boot
 | 
				
			||||||
COPY configure-nonroot.sh /bin/
 | 
					#RUN cp /usr/share/syslinux/pxelinux.0 /tftpboot
 | 
				
			||||||
RUN set -euo pipefail; chmod +x /bin/configure-ironic.sh /bin/ironic-probe.sh /bin/rundatabase-upgrade /bin/rundnsmasq /bin/runhttpd /bin/runironic /bin/runlogwatch.sh /bin/runonline-data-migrations /bin/configure-nonroot.sh
 | 
					#RUN cp /usr/share/syslinux/chain.c32 /tftpboot/
 | 
				
			||||||
 | 
					 | 
				
			||||||
RUN mv /bin/ironic-probe.sh /bin/ironic-readiness
 | 
					 | 
				
			||||||
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 \
 | 
					 | 
				
			||||||
     /tmp/
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# IRONIC #
 | 
					# IRONIC #
 | 
				
			||||||
RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
 | 
					RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
 | 
				
			||||||
@@ -83,24 +77,31 @@ RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
 | 
				
			|||||||
RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
					RUN if [ "$(uname -m)" = "x86_64" ];then \
 | 
				
			||||||
      cp /usr/share/ipxe/ipxe-x86_64.efi /tftpboot/ipxe.efi ;\
 | 
					      cp /usr/share/ipxe/ipxe-x86_64.efi /tftpboot/ipxe.efi ;\
 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
#!ArchExclusiveLine: aarch64 
 | 
					#!ArchExclusiveLine: x86_64
 | 
				
			||||||
RUN if [ "$(uname -m)" = "aarch64" ]; then\ 
 | 
					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 ;\
 | 
					     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
 | 
					    fi
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
COPY --from=base /tmp/uefi_esp_*.img /templates/
 | 
					COPY --from=base /tmp/esp-x86_64.img /tmp/uefi_esp-x86_64.img
 | 
				
			||||||
 | 
					COPY --from=base /tmp/esp-aarch64.img /tmp/uefi_esp-arm64.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
COPY ironic-config/ironic.conf.j2 ironic-config/network-data-schema-empty.json /etc/ironic/
 | 
					COPY ironic.conf.j2 /etc/ironic/
 | 
				
			||||||
 | 
					COPY inspector.ipxe.j2 httpd-ironic-api.conf.j2 ipxe_config.template /tmp/
 | 
				
			||||||
 | 
					COPY network-data-schema-empty.json /etc/ironic/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# DNSMASQ
 | 
				
			||||||
 | 
					COPY dnsmasq.conf.j2 /etc/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Custom httpd config, removes all but the bare minimum needed modules
 | 
				
			||||||
 | 
					COPY httpd.conf.j2 /etc/httpd/conf/
 | 
				
			||||||
 | 
					COPY httpd-modules.conf /etc/httpd/conf.modules.d/
 | 
				
			||||||
 | 
					COPY apache2-vmedia.conf.j2 /etc/httpd-vmedia.conf.j2
 | 
				
			||||||
 | 
					COPY apache2-ipxe.conf.j2 /etc/httpd-ipxe.conf.j2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Workaround
 | 
					# Workaround
 | 
				
			||||||
# Removing the 010-ironic.conf file that comes with the package 
 | 
					# Removing the 010-ironic.conf file that comes with the package 
 | 
				
			||||||
RUN rm /etc/ironic/ironic.conf.d/010-ironic.conf
 | 
					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 /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
 | 
					# configure non-root user and set relevant permissions
 | 
				
			||||||
RUN configure-nonroot.sh && rm -f /bin/configure-nonroot.sh
 | 
					RUN configure-nonroot.sh && \
 | 
				
			||||||
 | 
					  rm -f /bin/configure-nonroot.sh
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
Listen 0.0.0.0:{{ env.IPXE_TLS_PORT }}
 | 
					Listen {{ env.IPXE_TLS_PORT }}
 | 
				
			||||||
Listen [::]:{{ env.IPXE_TLS_PORT }}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
<VirtualHost *:{{ env.IPXE_TLS_PORT }}>
 | 
					<VirtualHost *:{{ env.IPXE_TLS_PORT }}>
 | 
				
			||||||
    ErrorLog /dev/stderr
 | 
					    ErrorLog /dev/stderr
 | 
				
			||||||
							
								
								
									
										27
									
								
								ironic-image/apache2-vmedia.conf.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								ironic-image/apache2-vmedia.conf.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					Listen {{ env.VMEDIA_TLS_PORT }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<VirtualHost *:{{ env.VMEDIA_TLS_PORT }}>
 | 
				
			||||||
 | 
					    ErrorLog /dev/stderr
 | 
				
			||||||
 | 
					    LogLevel debug
 | 
				
			||||||
 | 
					    CustomLog /dev/stdout combined
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    SSLEngine on
 | 
				
			||||||
 | 
					    SSLProtocol {{ env.IRONIC_VMEDIA_SSL_PROTOCOL }}
 | 
				
			||||||
 | 
					    SSLCertificateFile {{ env.IRONIC_VMEDIA_CERT_FILE }}
 | 
				
			||||||
 | 
					    SSLCertificateKeyFile {{ env.IRONIC_VMEDIA_KEY_FILE }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Directory "/shared">
 | 
				
			||||||
 | 
					        AllowOverride None
 | 
				
			||||||
 | 
					        Require all granted
 | 
				
			||||||
 | 
					    </Directory>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Directory "/shared/html">
 | 
				
			||||||
 | 
					        Options Indexes FollowSymLinks
 | 
				
			||||||
 | 
					        AllowOverride None
 | 
				
			||||||
 | 
					        Require all granted
 | 
				
			||||||
 | 
					    </Directory>
 | 
				
			||||||
 | 
					</VirtualHost>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<Location ~ "^/(redfish|ilo)/">
 | 
				
			||||||
 | 
					    SSLRequireSSL
 | 
				
			||||||
 | 
					</Location>
 | 
				
			||||||
							
								
								
									
										59
									
								
								ironic-image/auth-common.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								ironic-image/auth-common.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_REVERSE_PROXY_SETUP=${IRONIC_REVERSE_PROXY_SETUP:-false}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Backward compatibility
 | 
				
			||||||
 | 
					if [[ "${IRONIC_DEPLOYMENT:-}" == "Conductor" ]]; then
 | 
				
			||||||
 | 
					    export IRONIC_EXPOSE_JSON_RPC=true
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    export IRONIC_EXPOSE_JSON_RPC="${IRONIC_EXPOSE_JSON_RPC:-false}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRONIC_HTPASSWD_FILE=/etc/ironic/htpasswd
 | 
				
			||||||
 | 
					if [[ -f "/auth/ironic/htpasswd" ]]; then
 | 
				
			||||||
 | 
					    IRONIC_HTPASSWD=$(</auth/ironic/htpasswd)
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					export IRONIC_HTPASSWD=${IRONIC_HTPASSWD:-${HTTP_BASIC_HTPASSWD:-}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_client_basic_auth()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    local auth_config_file="/auth/$1/auth-config"
 | 
				
			||||||
 | 
					    local dest="${2:-/etc/ironic/ironic.conf}"
 | 
				
			||||||
 | 
					    if [[ -f "${auth_config_file}" ]]; then
 | 
				
			||||||
 | 
					        # Merge configurations in the "auth" directory into the default ironic configuration file
 | 
				
			||||||
 | 
					        crudini --merge "${dest}" < "${auth_config_file}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_json_rpc_auth()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ "${IRONIC_EXPOSE_JSON_RPC}" == "true" ]]; then
 | 
				
			||||||
 | 
					        if [[ -z "${IRONIC_HTPASSWD}" ]]; then
 | 
				
			||||||
 | 
					            echo "FATAL: enabling JSON RPC requires authentication"
 | 
				
			||||||
 | 
					            exit 1
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}-rpc"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_ironic_auth()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    local config=/etc/ironic/ironic.conf
 | 
				
			||||||
 | 
					    # Configure HTTP basic auth for API server
 | 
				
			||||||
 | 
					    if [[ -n "${IRONIC_HTPASSWD}" ]]; then
 | 
				
			||||||
 | 
					        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
				
			||||||
 | 
					        if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "false" ]]; then
 | 
				
			||||||
 | 
					            crudini --set "${config}" DEFAULT auth_strategy http_basic
 | 
				
			||||||
 | 
					            crudini --set "${config}" DEFAULT http_basic_auth_user_file "${IRONIC_HTPASSWD_FILE}"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					write_htpasswd_files()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ -n "${IRONIC_HTPASSWD:-}" ]]; then
 | 
				
			||||||
 | 
					        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										119
									
								
								ironic-image/configure-ironic.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								ironic-image/configure-ironic.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRONIC_EXTERNAL_IP="${IRONIC_EXTERNAL_IP:-}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Define the VLAN interfaces to be included in introspection report, e.g.
 | 
				
			||||||
 | 
					#   all - all VLANs on all interfaces using LLDP information
 | 
				
			||||||
 | 
					#   <interface> - all VLANs on a particular interface using LLDP information
 | 
				
			||||||
 | 
					#   <interface.vlan> - a particular VLAN on an interface, not relying on LLDP
 | 
				
			||||||
 | 
					export IRONIC_ENABLE_VLAN_INTERFACES=${IRONIC_ENABLE_VLAN_INTERFACES:-${IRONIC_INSPECTOR_VLAN_INTERFACES:-all}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/tls-common.sh
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/ironic-common.sh
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/auth-common.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export HTTP_PORT=${HTTP_PORT:-80}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-true}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$IRONIC_USE_MARIADB" == "true" ]]; then
 | 
				
			||||||
 | 
					    MARIADB_PASSWORD=${MARIADB_PASSWORD}
 | 
				
			||||||
 | 
					    MARIADB_DATABASE=${MARIADB_DATABASE:-ironic}
 | 
				
			||||||
 | 
					    MARIADB_USER=${MARIADB_USER:-ironic}
 | 
				
			||||||
 | 
					    MARIADB_HOST=${MARIADB_HOST:-127.0.0.1}
 | 
				
			||||||
 | 
					    export MARIADB_CONNECTION="mysql+pymysql://${MARIADB_USER}:${MARIADB_PASSWORD}@${MARIADB_HOST}/${MARIADB_DATABASE}?charset=utf8"
 | 
				
			||||||
 | 
					    if [[ "$MARIADB_TLS_ENABLED" == "true" ]]; then
 | 
				
			||||||
 | 
					        export MARIADB_CONNECTION="${MARIADB_CONNECTION}&ssl=on&ssl_ca=${MARIADB_CACERT_FILE}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO(dtantsur): remove the explicit default once we get
 | 
				
			||||||
 | 
					# https://review.opendev.org/761185 in the repositories
 | 
				
			||||||
 | 
					NUMPROC="$(grep -c "^processor" /proc/cpuinfo)"
 | 
				
			||||||
 | 
					if [[ "$NUMPROC" -lt 4 ]]; then
 | 
				
			||||||
 | 
					    NUMPROC=4
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					export NUMWORKERS=${NUMWORKERS:-$NUMPROC}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Whether to enable fast_track provisioning or not
 | 
				
			||||||
 | 
					export IRONIC_FAST_TRACK=${IRONIC_FAST_TRACK:-true}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Whether cleaning disks before and after deployment
 | 
				
			||||||
 | 
					export IRONIC_AUTOMATED_CLEAN=${IRONIC_AUTOMATED_CLEAN:-true}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Wheter to enable the sensor data collection
 | 
				
			||||||
 | 
					export SEND_SENSOR_DATA=${SEND_SENSOR_DATA:-false}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Set of collectors that should be used with IPA inspection
 | 
				
			||||||
 | 
					export IRONIC_IPA_COLLECTORS=${IRONIC_IPA_COLLECTORS:-default,logs}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wait_for_interface_or_ip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Hostname to use for the current conductor instance.
 | 
				
			||||||
 | 
					export IRONIC_CONDUCTOR_HOST=${IRONIC_CONDUCTOR_HOST:-${IRONIC_URL_HOST}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_BASE_URL=${IRONIC_BASE_URL:-"${IRONIC_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_ACCESS_PORT}"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -n "$IRONIC_EXTERNAL_IP" ]]; then
 | 
				
			||||||
 | 
					    export IRONIC_EXTERNAL_CALLBACK_URL=${IRONIC_EXTERNAL_CALLBACK_URL:-"${IRONIC_SCHEME}://${IRONIC_EXTERNAL_IP}:${IRONIC_ACCESS_PORT}"}
 | 
				
			||||||
 | 
					    if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
 | 
					        export IRONIC_EXTERNAL_HTTP_URL=${IRONIC_EXTERNAL_HTTP_URL:-"https://${IRONIC_EXTERNAL_IP}:${VMEDIA_TLS_PORT}"}
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        export IRONIC_EXTERNAL_HTTP_URL=${IRONIC_EXTERNAL_HTTP_URL:-"http://${IRONIC_EXTERNAL_IP}:${HTTP_PORT}"}
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IMAGE_CACHE_PREFIX="/shared/html/images/ironic-python-agent-${DEPLOY_ARCHITECTURE}"
 | 
				
			||||||
 | 
					if [[ -f "${IMAGE_CACHE_PREFIX}.kernel" ]] && [[ -f "${IMAGE_CACHE_PREFIX}.initramfs" ]]; then
 | 
				
			||||||
 | 
					    export IRONIC_DEFAULT_KERNEL="${IMAGE_CACHE_PREFIX}.kernel"
 | 
				
			||||||
 | 
					    export IRONIC_DEFAULT_RAMDISK="${IMAGE_CACHE_PREFIX}.initramfs"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -f /etc/ironic/ironic.conf ]]; then
 | 
				
			||||||
 | 
					    # Make a copy of the original supposed empty configuration file
 | 
				
			||||||
 | 
					    cp /etc/ironic/ironic.conf /etc/ironic/ironic.conf_orig
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# oslo.config also supports Config Opts From Environment, log them to stdout
 | 
				
			||||||
 | 
					echo 'Options set from Environment variables'
 | 
				
			||||||
 | 
					env | grep "^OS_" || true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					mkdir -p /shared/html
 | 
				
			||||||
 | 
					mkdir -p /shared/ironic_prometheus_exporter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_json_rpc_auth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -f /proc/sys/crypto/fips_enabled ]]; then
 | 
				
			||||||
 | 
					    ENABLE_FIPS_IPA=$(cat /proc/sys/crypto/fips_enabled)
 | 
				
			||||||
 | 
					    export ENABLE_FIPS_IPA
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The original ironic.conf is empty, and can be found in ironic.conf_orig
 | 
				
			||||||
 | 
					render_j2_config /etc/ironic/ironic.conf.j2 /etc/ironic/ironic.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_client_basic_auth ironic-rpc
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make sure ironic traffic bypasses any proxies
 | 
				
			||||||
 | 
					export NO_PROXY="${NO_PROXY:-},$IRONIC_IP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROBE_CURL_ARGS=
 | 
				
			||||||
 | 
					if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
				
			||||||
 | 
					    if [[ "${IRONIC_PRIVATE_PORT}" == "unix" ]]; then
 | 
				
			||||||
 | 
					        PROBE_URL="http://127.0.0.1:6385"
 | 
				
			||||||
 | 
					        PROBE_CURL_ARGS="--unix-socket /shared/ironic.sock"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        PROBE_URL="http://127.0.0.1:${IRONIC_PRIVATE_PORT}"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					        PROBE_URL="${IRONIC_BASE_URL}"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					export PROBE_CURL_ARGS
 | 
				
			||||||
 | 
					export PROBE_URL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROBE_KIND=readiness render_j2_config /bin/ironic-probe.j2 /bin/ironic-readiness
 | 
				
			||||||
 | 
					PROBE_KIND=liveness render_j2_config /bin/ironic-probe.j2 /bin/ironic-liveness
 | 
				
			||||||
							
								
								
									
										57
									
								
								ironic-image/configure-nonroot.sh
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										57
									
								
								ironic-image/configure-nonroot.sh
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							@@ -1,70 +1,53 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# This script changes permissions to allow Ironic container to run as non-root
 | 
					 | 
				
			||||||
# user. As the same image is used to run ironic, ironic-httpd, ironic-dsnmasq,
 | 
					 | 
				
			||||||
# and ironic-log-watch via BMO's ironic k8s manifest, it has
 | 
					 | 
				
			||||||
# to be configured to work with multiple different users and groups, while they
 | 
					 | 
				
			||||||
# share files via bind mounts (/shared, /certs/*), which can only get one
 | 
					 | 
				
			||||||
# group id as "fsGroup". Additionally, dnsmasq needs three capabilities to run
 | 
					 | 
				
			||||||
# which we provide via "setcap", and "allowPrivilegeEscalation: true" in
 | 
					 | 
				
			||||||
# manifest.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -eux
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# user and group are from ironic rpms (uid 997, gid 994)
 | 
					 | 
				
			||||||
NONROOT_UID=10475
 | 
					NONROOT_UID=10475
 | 
				
			||||||
NONROOT_GID=10475
 | 
					NONROOT_GID=10475
 | 
				
			||||||
IRONIC_USER="ironic-suse"
 | 
					USER="ironic-suse"
 | 
				
			||||||
IRONIC_GROUP="ironic-suse"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
groupadd -r -g ${NONROOT_GID} ${IRONIC_GROUP}
 | 
					groupadd -r -g ${NONROOT_GID} ${USER}
 | 
				
			||||||
useradd -r -g ${NONROOT_GID} \
 | 
					useradd -r -g ${NONROOT_GID} \
 | 
				
			||||||
           -u ${NONROOT_UID} \
 | 
					           -u ${NONROOT_UID} \
 | 
				
			||||||
           -d /var/lib/ironic \
 | 
					           -d /var/lib/ironic \
 | 
				
			||||||
           -s /sbin/nologin \
 | 
					           -s /sbin/nologin \
 | 
				
			||||||
           ${IRONIC_USER}
 | 
					           ${USER}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# most containers mount /shared but dnsmasq can live without it
 | 
					# create ironic's http_root directory
 | 
				
			||||||
mkdir -p /shared
 | 
					mkdir -p /shared/html
 | 
				
			||||||
mkdir -p /data
 | 
					chown "${NONROOT_UID}":"${NONROOT_GID}" /shared/html
 | 
				
			||||||
mkdir -p /conf
 | 
					 | 
				
			||||||
chown "${IRONIC_USER}":"${IRONIC_GROUP}" /shared
 | 
					 | 
				
			||||||
chown "${IRONIC_USER}":"${IRONIC_GROUP}" /data
 | 
					 | 
				
			||||||
chown "${IRONIC_USER}":"${IRONIC_GROUP}" /conf
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# we'll bind mount shared ca and ironic certificate dirs here
 | 
					# we'll bind mount shared ca and ironic certificate dirs here
 | 
				
			||||||
# that need to have correct ownership as the entire ironic in BMO
 | 
					# that need to have correct ownership as the entire ironic in BMO
 | 
				
			||||||
# deployment shares a single fsGroup in manifest's securityContext
 | 
					# deployment shares a single fsGroup in manifest's securityContext
 | 
				
			||||||
mkdir -p /certs/ca
 | 
					mkdir -p /certs/ca
 | 
				
			||||||
chown "${IRONIC_USER}":"${IRONIC_GROUP}" /certs{,/ca}
 | 
					chown "${NONROOT_UID}":"${NONROOT_GID}" /certs{,/ca}
 | 
				
			||||||
chmod 2775 /certs{,/ca}
 | 
					chmod 2775 /certs{,/ca}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# apache2 permission changes
 | 
					# apache2 permission changes
 | 
				
			||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/apache2
 | 
					chown -R "${NONROOT_UID}":"${NONROOT_GID}" /etc/apache2
 | 
				
			||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /run
 | 
					chown -R "${NONROOT_UID}":"${NONROOT_GID}" /run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ironic and httpd related changes
 | 
					# ironic and httpd related changes
 | 
				
			||||||
mkdir -p /etc/httpd/conf.d
 | 
					mkdir -p /etc/httpd/conf.d
 | 
				
			||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/ironic /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d/
 | 
					chown -R "${NONROOT_UID}":"${NONROOT_GID}" /etc/ironic /etc/httpd /etc/httpd
 | 
				
			||||||
chmod 2775 /etc/ironic /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d/
 | 
					chown -R "${NONROOT_UID}":"${NONROOT_GID}" /var/log
 | 
				
			||||||
#chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.d/*
 | 
					chmod 2775 /etc/ironic /etc/httpd/conf /etc/httpd/conf.d
 | 
				
			||||||
chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.modules.d/*
 | 
					chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.d/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /var/lib/ironic
 | 
					chown -R "${NONROOT_UID}":"${NONROOT_GID}" /var/lib/ironic
 | 
				
			||||||
chmod 2775 /var/lib/ironic
 | 
					 | 
				
			||||||
chmod 664 /var/lib/ironic/ironic.sqlite
 | 
					chmod 664 /var/lib/ironic/ironic.sqlite
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# dnsmasq, and the capabilities required to run it as non-root user
 | 
					# dnsmasq, and the capabilities required to run it as non-root user
 | 
				
			||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/dnsmasq.conf
 | 
					chown -R "${NONROOT_UID}":"${NONROOT_GID}" /etc/dnsmasq.conf /var/lib/dnsmasq
 | 
				
			||||||
#handled at chart level
 | 
					chmod 2775 /var/lib/dnsmasq
 | 
				
			||||||
#setcap "cap_net_raw,cap_net_admin,cap_net_bind_service=+eip" /usr/sbin/dnsmasq
 | 
					touch /var/lib/dnsmasq/dnsmasq.leases
 | 
				
			||||||
 | 
					chmod 664 /etc/dnsmasq.conf /var/lib/dnsmasq/dnsmasq.leases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# ca-certificates permission changes
 | 
					# ca-certificates permission changes
 | 
				
			||||||
touch /var/lib/ca-certificates/ca-bundle.pem.new
 | 
					touch /var/lib/ca-certificates/ca-bundle.pem.new
 | 
				
			||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /var/lib/ca-certificates/
 | 
					chown -R "${NONROOT_UID}":"${NONROOT_GID}" /var/lib/ca-certificates/
 | 
				
			||||||
chmod -R +w /var/lib/ca-certificates/
 | 
					chmod -R +w /var/lib/ca-certificates/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# probes that are created before start
 | 
					# probes that are created before start
 | 
				
			||||||
touch /bin/ironic-{readi,live}ness
 | 
					touch /bin/ironic-{readi,live}ness
 | 
				
			||||||
chown root:"${IRONIC_GROUP}" /bin/ironic-{readi,live}ness
 | 
					chown root:"${NONROOT_GID}" /bin/ironic-{readi,live}ness
 | 
				
			||||||
chmod 775 /bin/ironic-{readi,live}ness
 | 
					chmod 775 /bin/ironic-{readi,live}ness
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,6 @@ bind-dynamic
 | 
				
			|||||||
enable-tftp
 | 
					enable-tftp
 | 
				
			||||||
tftp-root=/shared/tftpboot
 | 
					tftp-root=/shared/tftpboot
 | 
				
			||||||
log-queries
 | 
					log-queries
 | 
				
			||||||
dhcp-leasefile=/data/dnsmasq/dnsmasq.leases
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Configure listening for DNS (0 disables DNS)
 | 
					# Configure listening for DNS (0 disables DNS)
 | 
				
			||||||
port={{ env.DNS_PORT }}
 | 
					port={{ env.DNS_PORT }}
 | 
				
			||||||
@@ -32,11 +31,11 @@ dhcp-match=ipxe,175
 | 
				
			|||||||
# Client is already running iPXE; move to next stage of chainloading
 | 
					# Client is already running iPXE; move to next stage of chainloading
 | 
				
			||||||
{%- if env.IPXE_TLS_SETUP == "true"  %}
 | 
					{%- if env.IPXE_TLS_SETUP == "true"  %}
 | 
				
			||||||
# iPXE with (U)EFI
 | 
					# iPXE with (U)EFI
 | 
				
			||||||
dhcp-boot=tag:efi,tag:ipxe,{{ env.IRONIC_HTTP_URL }}/custom-ipxe/snponly.efi
 | 
					dhcp-boot=tag:efi,tag:ipxe,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/custom-ipxe/snponly.efi
 | 
				
			||||||
# iPXE with BIOS
 | 
					# iPXE with BIOS
 | 
				
			||||||
dhcp-boot=tag:ipxe,{{ env.IRONIC_HTTP_URL }}/custom-ipxe/undionly.kpxe
 | 
					dhcp-boot=tag:ipxe,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/custom-ipxe/undionly.kpxe
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
dhcp-boot=tag:ipxe,{{ env.IRONIC_HTTP_URL }}/boot.ipxe
 | 
					dhcp-boot=tag:ipxe,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/boot.ipxe
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Note: Need to test EFI booting
 | 
					# Note: Need to test EFI booting
 | 
				
			||||||
@@ -60,8 +59,8 @@ ra-param={{ env.PROVISIONING_INTERFACE }},0,0
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
dhcp-vendorclass=set:pxe6,enterprise:343,PXEClient
 | 
					dhcp-vendorclass=set:pxe6,enterprise:343,PXEClient
 | 
				
			||||||
dhcp-userclass=set:ipxe6,iPXE
 | 
					dhcp-userclass=set:ipxe6,iPXE
 | 
				
			||||||
dhcp-option=tag:pxe6,option6:bootfile-url,{{ env.IRONIC_TFTP_URL }}/snponly.efi
 | 
					dhcp-option=tag:pxe6,option6:bootfile-url,tftp://{{ env.IRONIC_URL_HOST }}/snponly.efi
 | 
				
			||||||
dhcp-option=tag:ipxe6,option6:bootfile-url,{{ env.IRONIC_HTTP_URL }}/boot.ipxe
 | 
					dhcp-option=tag:ipxe6,option6:bootfile-url,http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/boot.ipxe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# It can be used when setting DNS or GW variables.
 | 
					# It can be used when setting DNS or GW variables.
 | 
				
			||||||
{%- if env["GATEWAY_IP"] is undefined %}
 | 
					{%- if env["GATEWAY_IP"] is undefined %}
 | 
				
			||||||
@@ -12,21 +12,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
					{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
				
			||||||
Listen 0.0.0.0:{{ env.IRONIC_LISTEN_PORT }}
 | 
					Listen {{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
Listen [::]:{{ env.IRONIC_LISTEN_PORT }}
 | 
					 | 
				
			||||||
 <VirtualHost *:{{ env.IRONIC_LISTEN_PORT }}>
 | 
					 <VirtualHost *:{{ env.IRONIC_LISTEN_PORT }}>
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
{% if env.ENABLE_IPV4 %}
 | 
					Listen {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
Listen {{ env.IRONIC_IP }}:{{ env.IRONIC_LISTEN_PORT }}
 | 
					 <VirtualHost {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_LISTEN_PORT }}>
 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% if env.ENABLE_IPV6 %}
 | 
					 | 
				
			||||||
Listen [{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% if env.IRONIC_URL_HOSTNAME is defined and env.IRONIC_URL_HOSTNAME|length %}
 | 
					 | 
				
			||||||
<VirtualHost {{ env.IRONIC_URL_HOSTNAME }}:{{ env.IRONIC_LISTEN_PORT }}>
 | 
					 | 
				
			||||||
{% else %}
 | 
					 | 
				
			||||||
<VirtualHost {% if env.ENABLE_IPV4 %}{{ env.IRONIC_IP }}:{{ env.IRONIC_LISTEN_PORT }}{% endif %} {% if env.ENABLE_IPV6 %}[{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}{% endif %}>
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    {% if env.IRONIC_PRIVATE_PORT == "unix" %}
 | 
					    {% if env.IRONIC_PRIVATE_PORT == "unix" %}
 | 
				
			||||||
@@ -55,7 +45,7 @@ Listen [{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}
 | 
				
			|||||||
         {% if "IRONIC_HTPASSWD" in env and env.IRONIC_HTPASSWD | length %}
 | 
					         {% if "IRONIC_HTPASSWD" in env and env.IRONIC_HTPASSWD | length %}
 | 
				
			||||||
            AuthType Basic
 | 
					            AuthType Basic
 | 
				
			||||||
            AuthName "Restricted area"
 | 
					            AuthName "Restricted area"
 | 
				
			||||||
            AuthUserFile {{ env.HTPASSWD_FILE }}
 | 
					            AuthUserFile "/etc/ironic/htpasswd"
 | 
				
			||||||
            Require valid-user
 | 
					            Require valid-user
 | 
				
			||||||
         {% endif %}
 | 
					         {% endif %}
 | 
				
			||||||
    </Location>
 | 
					    </Location>
 | 
				
			||||||
@@ -17,4 +17,4 @@ LoadModule authn_core_module /usr/lib64/apache2/mod_authn_core.so
 | 
				
			|||||||
LoadModule auth_basic_module /usr/lib64/apache2/mod_auth_basic.so
 | 
					LoadModule auth_basic_module /usr/lib64/apache2/mod_auth_basic.so
 | 
				
			||||||
LoadModule authn_file_module /usr/lib64/apache2/mod_authn_file.so
 | 
					LoadModule authn_file_module /usr/lib64/apache2/mod_authn_file.so
 | 
				
			||||||
LoadModule authz_user_module /usr/lib64/apache2/mod_authz_user.so
 | 
					LoadModule authz_user_module /usr/lib64/apache2/mod_authz_user.so
 | 
				
			||||||
#LoadModule access_compat_module /usr/lib64/apache2/mod_access_compat.so
 | 
					LoadModule access_compat_module /usr/lib64/apache2/mod_access_compat.so
 | 
				
			||||||
@@ -1,16 +1,10 @@
 | 
				
			|||||||
ServerRoot {{ env.HTTPD_DIR }}
 | 
					ServerRoot "/etc/httpd"
 | 
				
			||||||
{%- if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
					{%- if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
				
			||||||
Listen 0.0.0.0:{{ env.HTTP_PORT }}
 | 
					Listen {{ env.HTTP_PORT }}
 | 
				
			||||||
Listen [::]:{{ env.HTTP_PORT }}
 | 
					 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
{% if env.ENABLE_IPV4 %}
 | 
					Listen {{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}
 | 
				
			||||||
Listen {{ env.IRONIC_IP }}:{{ env.HTTP_PORT }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
{% if env.ENABLE_IPV6 %}
 | 
					Include conf.modules.d/*.conf
 | 
				
			||||||
Listen [{{ env.IRONIC_IPV6 }}]:{{ env.HTTP_PORT }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
Include /etc/httpd/conf.modules.d/*.conf
 | 
					 | 
				
			||||||
User ironic-suse
 | 
					User ironic-suse
 | 
				
			||||||
Group ironic-suse
 | 
					Group ironic-suse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										57
									
								
								ironic-image/inspector-apache.conf.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								ironic-image/inspector-apache.conf.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
				
			||||||
 | 
					# not use this file except in compliance with the License. You may obtain
 | 
				
			||||||
 | 
					# a copy of the License at
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#      http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					# Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
				
			||||||
 | 
					# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
				
			||||||
 | 
					# License for the specific language governing permissions and limitations
 | 
				
			||||||
 | 
					# under the License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
				
			||||||
 | 
					Listen {{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
				
			||||||
 | 
					 <VirtualHost *:{{ env.IRONIC_INSPECTOR_LISTEN_PORT }}>
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					Listen {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
				
			||||||
 | 
					 <VirtualHost {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_INSPECTOR_LISTEN_PORT }}>
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					    {% if env.IRONIC_INSPECTOR_PRIVATE_PORT == "unix" %}
 | 
				
			||||||
 | 
					    ProxyPass "/"  "unix:/shared/inspector.sock|http://127.0.0.1/"
 | 
				
			||||||
 | 
					    ProxyPassReverse "/"  "unix:/shared/inspector.sock|http://127.0.0.1/"
 | 
				
			||||||
 | 
					    {% else %}
 | 
				
			||||||
 | 
					    ProxyPass "/"  "http://127.0.0.1:{{ env.IRONIC_INSPECTOR_PRIVATE_PORT }}/"
 | 
				
			||||||
 | 
					    ProxyPassReverse "/"  "http://127.0.0.1:{{ env.IRONIC_INSPECTOR_PRIVATE_PORT }}/"
 | 
				
			||||||
 | 
					    {% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    SetEnv APACHE_RUN_USER ironic-suse
 | 
				
			||||||
 | 
					    SetEnv APACHE_RUN_GROUP ironic-suse
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    ErrorLog /dev/stdout
 | 
				
			||||||
 | 
					    LogLevel debug
 | 
				
			||||||
 | 
					    CustomLog /dev/stdout combined
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    SSLEngine On
 | 
				
			||||||
 | 
					    SSLProtocol {{ env.IRONIC_SSL_PROTOCOL }}
 | 
				
			||||||
 | 
					    SSLCertificateFile {{ env.IRONIC_INSPECTOR_CERT_FILE }} 
 | 
				
			||||||
 | 
					    SSLCertificateKeyFile {{ env.IRONIC_INSPECTOR_KEY_FILE }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {% if "INSPECTOR_HTPASSWD" in env and env.INSPECTOR_HTPASSWD | length %}
 | 
				
			||||||
 | 
					    <Location / >
 | 
				
			||||||
 | 
					        AuthType Basic
 | 
				
			||||||
 | 
					        AuthName "Restricted area"
 | 
				
			||||||
 | 
					        AuthUserFile "/etc/ironic-inspector/htpasswd"
 | 
				
			||||||
 | 
					        Require valid-user
 | 
				
			||||||
 | 
					    </Location>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Location ~ "^/(v1/?)?$" >
 | 
				
			||||||
 | 
					        Require all granted
 | 
				
			||||||
 | 
					    </Location>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Location /v1/continue >
 | 
				
			||||||
 | 
					        Require all granted
 | 
				
			||||||
 | 
					    </Location>
 | 
				
			||||||
 | 
					    {% endif %}
 | 
				
			||||||
 | 
					</VirtualHost>
 | 
				
			||||||
							
								
								
									
										10
									
								
								ironic-image/inspector.ipxe.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								ironic-image/inspector.ipxe.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
				
			|||||||
 | 
					#!ipxe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:retry_boot
 | 
				
			||||||
 | 
					echo In inspector.ipxe
 | 
				
			||||||
 | 
					imgfree
 | 
				
			||||||
 | 
					# NOTE(dtantsur): keep inspection kernel params in [mdns]params in
 | 
				
			||||||
 | 
					# ironic-inspector-image and configuration in configure-ironic.sh
 | 
				
			||||||
 | 
					kernel --timeout 60000 http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/images/ironic-python-agent-${buildarch}.kernel ipa-insecure=1 ipa-inspection-collectors={{ env.IRONIC_IPA_COLLECTORS }} systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-debug=1 ipa-enable-vlan-interfaces={{ env.IRONIC_ENABLE_VLAN_INTERFACES }} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 {{ env.INSPECTOR_EXTRA_ARGS }} initrd=ironic-python-agent.initramfs {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} || goto retry_boot
 | 
				
			||||||
 | 
					initrd --timeout 60000 http://{{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}/images/ironic-python-agent-${buildarch}.initramfs || goto retry_boot
 | 
				
			||||||
 | 
					boot
 | 
				
			||||||
							
								
								
									
										107
									
								
								ironic-image/ironic-common.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								ironic-image/ironic-common.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,107 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRONIC_IP="${IRONIC_IP:-}"
 | 
				
			||||||
 | 
					PROVISIONING_INTERFACE="${PROVISIONING_INTERFACE:-}"
 | 
				
			||||||
 | 
					PROVISIONING_IP="${PROVISIONING_IP:-}"
 | 
				
			||||||
 | 
					PROVISIONING_MACS="${PROVISIONING_MACS:-}"
 | 
				
			||||||
 | 
					IPXE_CUSTOM_FIRMWARE_DIR="${IPXE_CUSTOM_FIRMWARE_DIR:-/shared/custom_ipxe_firmware}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					get_provisioning_interface()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ -n "$PROVISIONING_INTERFACE" ]]; then
 | 
				
			||||||
 | 
					        # don't override the PROVISIONING_INTERFACE if one is provided
 | 
				
			||||||
 | 
					        echo "$PROVISIONING_INTERFACE"
 | 
				
			||||||
 | 
					        return
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    local interface="provisioning"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if [[ -n "${PROVISIONING_IP}" ]]; then
 | 
				
			||||||
 | 
					        if ip -br addr show | grep -qi " ${PROVISIONING_IP}/"; then
 | 
				
			||||||
 | 
					            interface="$(ip -br addr show | grep -i " ${PROVISIONING_IP}/" | cut -f 1 -d ' ' | cut -f 1 -d '@')"
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for mac in ${PROVISIONING_MACS//,/ }; do
 | 
				
			||||||
 | 
					        if ip -br link show up | grep -qi "$mac"; then
 | 
				
			||||||
 | 
					            interface="$(ip -br link show up | grep -i "$mac" | cut -f 1 -d ' ' | cut -f 1 -d '@')"
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    echo "$interface"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					PROVISIONING_INTERFACE="$(get_provisioning_interface)"
 | 
				
			||||||
 | 
					export PROVISIONING_INTERFACE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export LISTEN_ALL_INTERFACES="${LISTEN_ALL_INTERFACES:-true}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Wait for the interface or IP to be up, sets $IRONIC_IP
 | 
				
			||||||
 | 
					wait_for_interface_or_ip()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    # If $PROVISIONING_IP is specified, then we wait for that to become available on an interface, otherwise we look at $PROVISIONING_INTERFACE for an IP
 | 
				
			||||||
 | 
					    if [[ -n "$PROVISIONING_IP" ]]; then
 | 
				
			||||||
 | 
					        # Convert the address using ipcalc which strips out the subnet. For IPv6 addresses, this will give the short-form address
 | 
				
			||||||
 | 
					        IRONIC_IP="$(ipcalc "${PROVISIONING_IP}" | grep "^Address:" | awk '{print $2}')"
 | 
				
			||||||
 | 
					        export IRONIC_IP
 | 
				
			||||||
 | 
					        until grep -F " ${IRONIC_IP}/" <(ip -br addr show); do
 | 
				
			||||||
 | 
					            echo "Waiting for ${IRONIC_IP} to be configured on an interface"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        until [[ -n "$IRONIC_IP" ]]; do
 | 
				
			||||||
 | 
					            echo "Waiting for ${PROVISIONING_INTERFACE} interface to be configured"
 | 
				
			||||||
 | 
					            IRONIC_IP="$(ip -br add show scope global up dev "${PROVISIONING_INTERFACE}" | awk '{print $3}' | sed -e 's%/.*%%' | head -n 1)"
 | 
				
			||||||
 | 
					            export IRONIC_IP
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # If the IP contains a colon, then it's an IPv6 address, and the HTTP
 | 
				
			||||||
 | 
					    # host needs surrounding with brackets
 | 
				
			||||||
 | 
					    if [[ "$IRONIC_IP" =~ .*:.* ]]; then
 | 
				
			||||||
 | 
					        export IPV=6
 | 
				
			||||||
 | 
					        export IRONIC_URL_HOST="[$IRONIC_IP]"
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        export IPV=4
 | 
				
			||||||
 | 
					        export IRONIC_URL_HOST="$IRONIC_IP"
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					render_j2_config()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    ls $1 # DEBUG
 | 
				
			||||||
 | 
					    python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$1"
 | 
				
			||||||
 | 
					    python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$1" > "$2"
 | 
				
			||||||
 | 
					    ls $2 # DEBUG
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					run_ironic_dbsync()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    if [[ "${IRONIC_USE_MARIADB:-true}" == "true" ]]; then
 | 
				
			||||||
 | 
					        # It's possible for the dbsync to fail if mariadb is not up yet, so
 | 
				
			||||||
 | 
					        # retry until success
 | 
				
			||||||
 | 
					        until ironic-dbsync --config-file /etc/ironic/ironic.conf upgrade; do
 | 
				
			||||||
 | 
					            echo "WARNING: ironic-dbsync failed, retrying"
 | 
				
			||||||
 | 
					            sleep 1
 | 
				
			||||||
 | 
					        done
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        # SQLite does not support some statements. Fortunately, we can just create
 | 
				
			||||||
 | 
					        # the schema in one go if not already created, instead of going through an upgrade
 | 
				
			||||||
 | 
					        DB_VERSION="$(ironic-dbsync --config-file /etc/ironic/ironic.conf version)"
 | 
				
			||||||
 | 
					        if [[ "${DB_VERSION}" == "None" ]]; then
 | 
				
			||||||
 | 
					            ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema
 | 
				
			||||||
 | 
					        fi
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Use the special value "unix" for unix sockets
 | 
				
			||||||
 | 
					export IRONIC_PRIVATE_PORT=${IRONIC_PRIVATE_PORT:-unix}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_ACCESS_PORT=${IRONIC_ACCESS_PORT:-6385}
 | 
				
			||||||
 | 
					export IRONIC_LISTEN_PORT=${IRONIC_LISTEN_PORT:-$IRONIC_ACCESS_PORT}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_ENABLE_DISCOVERY=${IRONIC_ENABLE_DISCOVERY:-${IRONIC_INSPECTOR_ENABLE_DISCOVERY:-false}}
 | 
				
			||||||
@@ -1,41 +0,0 @@
 | 
				
			|||||||
Listen 0.0.0.0:{{ env.VMEDIA_TLS_PORT }}
 | 
					 | 
				
			||||||
Listen [::]:{{ env.VMEDIA_TLS_PORT }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<VirtualHost *:{{ env.VMEDIA_TLS_PORT }}>
 | 
					 | 
				
			||||||
    ErrorLog /dev/stderr
 | 
					 | 
				
			||||||
    LogLevel debug
 | 
					 | 
				
			||||||
    CustomLog /dev/stdout combined
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    SSLEngine on
 | 
					 | 
				
			||||||
    SSLProtocol {{ env.IRONIC_VMEDIA_SSL_PROTOCOL }}
 | 
					 | 
				
			||||||
    SSLCertificateFile {{ env.IRONIC_VMEDIA_CERT_FILE }}
 | 
					 | 
				
			||||||
    SSLCertificateKeyFile {{ env.IRONIC_VMEDIA_KEY_FILE }}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    {% if "IRONIC_VMEDIA_TLS_12_CIPHERS" in env and env.IRONIC_VMEDIA_TLS_12_CIPHERS %}
 | 
					 | 
				
			||||||
    SSLCipherSuite {{ env.IRONIC_VMEDIA_TLS_12_CIPHERS }}
 | 
					 | 
				
			||||||
    {% endif %}
 | 
					 | 
				
			||||||
    {% if "IRONIC_VMEDIA_TLS_13_CIPHERS" in env and env.IRONIC_VMEDIA_TLS_13_CIPHERS %}
 | 
					 | 
				
			||||||
    SSLCipherSuite TLSv1.3 {{ env.IRONIC_VMEDIA_TLS_13_CIPHERS }}
 | 
					 | 
				
			||||||
    {% endif %}
 | 
					 | 
				
			||||||
    {% if "IRONIC_VMEDIA_CURVES" in env and env.IRONIC_VMEDIA_CURVES %}
 | 
					 | 
				
			||||||
    SSLOpenSSLConfCmd Curves {{ env.IRONIC_VMEDIA_CURVES }}
 | 
					 | 
				
			||||||
    {% endif %}
 | 
					 | 
				
			||||||
    {% if env.IRONIC_VMEDIA_TLS_ENFORCE_SERVER_CIPHER_ORDER | lower == "true" %}
 | 
					 | 
				
			||||||
    SSLHonorCipherOrder on
 | 
					 | 
				
			||||||
    {% endif %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    <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>
 | 
					 | 
				
			||||||
</VirtualHost>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
<Location ~ "^/(redfish|ilo)/">
 | 
					 | 
				
			||||||
    SSLRequireSSL
 | 
					 | 
				
			||||||
</Location>
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
#!ipxe
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
:retry_boot
 | 
					 | 
				
			||||||
echo In inspector.ipxe
 | 
					 | 
				
			||||||
imgfree
 | 
					 | 
				
			||||||
# NOTE(dtantsur): keep inspection kernel params in [mdns]params in
 | 
					 | 
				
			||||||
# ironic-inspector-image and configuration in configure-ironic.sh
 | 
					 | 
				
			||||||
kernel --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.kernel ipa-insecure={{ env.IPA_INSECURE }} ipa-inspection-collectors={{ env.IRONIC_IPA_COLLECTORS }} systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-debug=1 ipa-enable-vlan-interfaces={{ env.IRONIC_ENABLE_VLAN_INTERFACES }} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 {{ env.INSPECTOR_EXTRA_ARGS }} initrd=ironic-python-agent-${buildarch}.initramfs {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} || goto retry_boot
 | 
					 | 
				
			||||||
initrd --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.initramfs || goto retry_boot
 | 
					 | 
				
			||||||
boot
 | 
					 | 
				
			||||||
							
								
								
									
										68
									
								
								ironic-image/ironic-inspector.conf.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								ironic-image/ironic-inspector.conf.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					[DEFAULT]
 | 
				
			||||||
 | 
					auth_strategy = noauth
 | 
				
			||||||
 | 
					debug = true
 | 
				
			||||||
 | 
					transport_url = fake://
 | 
				
			||||||
 | 
					use_stderr = true
 | 
				
			||||||
 | 
					{% if env.INSPECTOR_REVERSE_PROXY_SETUP == "true" %}
 | 
				
			||||||
 | 
					{% if env.IRONIC_INSPECTOR_PRIVATE_PORT == "unix" %}
 | 
				
			||||||
 | 
					listen_unix_socket = /shared/inspector.sock
 | 
				
			||||||
 | 
					# NOTE(dtantsur): this is not ideal, but since the socket is accessed from
 | 
				
			||||||
 | 
					# another container, we need to make it world-writeable.
 | 
				
			||||||
 | 
					listen_unix_socket_mode = 0666
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					listen_port = {{ env.IRONIC_INSPECTOR_PRIVATE_PORT }}
 | 
				
			||||||
 | 
					listen_address = 127.0.0.1
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					{% elif env.LISTEN_ALL_INTERFACES | lower == "true" %}
 | 
				
			||||||
 | 
					listen_port = {{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
				
			||||||
 | 
					listen_address = ::
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					listen_port = {{ env.IRONIC_INSPECTOR_LISTEN_PORT }}
 | 
				
			||||||
 | 
					listen_address = {{ env.IRONIC_IP }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					host = {{ env.IRONIC_IP }}
 | 
				
			||||||
 | 
					{% if env.IRONIC_INSPECTOR_TLS_SETUP == "true" and env.INSPECTOR_REVERSE_PROXY_SETUP == "false" %}
 | 
				
			||||||
 | 
					use_ssl = true
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[database]
 | 
				
			||||||
 | 
					connection = sqlite:////var/lib/ironic-inspector/ironic-inspector.db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if env.IRONIC_INSPECTOR_ENABLE_DISCOVERY == "true" %}
 | 
				
			||||||
 | 
					[discovery]
 | 
				
			||||||
 | 
					enroll_node_driver = ipmi
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ironic]
 | 
				
			||||||
 | 
					auth_type = none
 | 
				
			||||||
 | 
					endpoint_override = {{ env.IRONIC_BASE_URL }}
 | 
				
			||||||
 | 
					{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
				
			||||||
 | 
					cafile = {{ env.IRONIC_CACERT_FILE }}
 | 
				
			||||||
 | 
					insecure = {{ env.IRONIC_INSECURE }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[processing]
 | 
				
			||||||
 | 
					add_ports = all
 | 
				
			||||||
 | 
					always_store_ramdisk_logs = true
 | 
				
			||||||
 | 
					keep_ports = present
 | 
				
			||||||
 | 
					{% if env.IRONIC_INSPECTOR_ENABLE_DISCOVERY == "true" %}
 | 
				
			||||||
 | 
					node_not_found_hook = enroll
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
 | 
					permit_active_introspection = true
 | 
				
			||||||
 | 
					power_off = false
 | 
				
			||||||
 | 
					processing_hooks = $default_processing_hooks,lldp_basic
 | 
				
			||||||
 | 
					ramdisk_logs_dir = /shared/log/ironic-inspector/ramdisk
 | 
				
			||||||
 | 
					store_data = database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[pxe_filter]
 | 
				
			||||||
 | 
					driver = noop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[service_catalog]
 | 
				
			||||||
 | 
					auth_type = none
 | 
				
			||||||
 | 
					endpoint_override = {{ env.IRONIC_INSPECTOR_BASE_URL }}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% if env.IRONIC_INSPECTOR_TLS_SETUP == "true" and env.INSPECTOR_REVERSE_PROXY_SETUP == "false" %}
 | 
				
			||||||
 | 
					[ssl]
 | 
				
			||||||
 | 
					cert_file = {{ env.IRONIC_INSPECTOR_CERT_FILE }}
 | 
				
			||||||
 | 
					key_file = {{ env.IRONIC_INSPECTOR_KEY_FILE }}
 | 
				
			||||||
 | 
					{% endif %}
 | 
				
			||||||
							
								
								
									
										9
									
								
								ironic-image/ironic-probe.j2
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								ironic-image/ironic-probe.j2
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -eu -o pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					curl -sSf {{ env.PROBE_CURL_ARGS }} "{{ env.PROBE_URL }}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# TODO(dtantsur): when PROBE_KIND==readiness, try the conductor and driver API
 | 
				
			||||||
 | 
					# to make sure the conductor is ready. This requires having access to secrets
 | 
				
			||||||
 | 
					# since these endpoints are authenticated.
 | 
				
			||||||
@@ -25,15 +25,8 @@ rpc_transport = none
 | 
				
			|||||||
use_stderr = true
 | 
					use_stderr = true
 | 
				
			||||||
# NOTE(dtantsur): the default md5 is not compatible with FIPS mode
 | 
					# NOTE(dtantsur): the default md5 is not compatible with FIPS mode
 | 
				
			||||||
hash_ring_algorithm = sha256
 | 
					hash_ring_algorithm = sha256
 | 
				
			||||||
{% if env.ENABLE_IPV4 %}
 | 
					 | 
				
			||||||
my_ip = {{ env.IRONIC_IP }}
 | 
					my_ip = {{ env.IRONIC_IP }}
 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% if env.ENABLE_IPV6 %}
 | 
					 | 
				
			||||||
my_ipv6 = {{ env.IRONIC_IPV6 }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
host = {{ env.IRONIC_CONDUCTOR_HOST }}
 | 
					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 a path to a certificate is defined, use that first for webserver
 | 
				
			||||||
{% if env.WEBSERVER_CACERT_FILE %}
 | 
					{% if env.WEBSERVER_CACERT_FILE %}
 | 
				
			||||||
@@ -56,7 +49,6 @@ deploy_logs_local_path = /shared/log/ironic/deploy
 | 
				
			|||||||
# retries here works around such problems without affecting the normal path.
 | 
					# retries here works around such problems without affecting the normal path.
 | 
				
			||||||
# See https://bugzilla.redhat.com/show_bug.cgi?id=1822763
 | 
					# See https://bugzilla.redhat.com/show_bug.cgi?id=1822763
 | 
				
			||||||
max_command_attempts = 30
 | 
					max_command_attempts = 30
 | 
				
			||||||
certificates_path = {{ env.IRONIC_GEN_CERT_DIR }}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
[api]
 | 
					[api]
 | 
				
			||||||
{% if env.IRONIC_REVERSE_PROXY_SETUP == "true" %}
 | 
					{% if env.IRONIC_REVERSE_PROXY_SETUP == "true" %}
 | 
				
			||||||
@@ -71,7 +63,7 @@ port = {{ env.IRONIC_PRIVATE_PORT }}
 | 
				
			|||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
public_endpoint = {{ env.IRONIC_BASE_URL }}
 | 
					public_endpoint = {{ env.IRONIC_BASE_URL }}
 | 
				
			||||||
{% else %}
 | 
					{% else %}
 | 
				
			||||||
host_ip = {{ env.IRONIC_HOST_IP }}
 | 
					host_ip = {% if env.LISTEN_ALL_INTERFACES | lower == "true" %}::{% else %}{{ env.IRONIC_IP }}{% endif %}
 | 
				
			||||||
port = {{ env.IRONIC_LISTEN_PORT }}
 | 
					port = {{ env.IRONIC_LISTEN_PORT }}
 | 
				
			||||||
{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
					{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
				
			||||||
enable_ssl_api = true
 | 
					enable_ssl_api = true
 | 
				
			||||||
@@ -91,37 +83,28 @@ send_sensor_data = {{ env.SEND_SENSOR_DATA }}
 | 
				
			|||||||
# Power state is checked every 60 seconds and BMC activity should
 | 
					# Power state is checked every 60 seconds and BMC activity should
 | 
				
			||||||
# be avoided more often than once every sixty seconds.
 | 
					# be avoided more often than once every sixty seconds.
 | 
				
			||||||
send_sensor_data_interval = 160
 | 
					send_sensor_data_interval = 160
 | 
				
			||||||
bootloader_by_arch = {{ env.BOOTLOADER_BY_ARCH }}
 | 
					bootloader = {{ env.IRONIC_BOOT_BASE_URL }}/uefi_esp-{{ env.DEPLOY_ARCHITECTURE }}.img
 | 
				
			||||||
verify_step_priority_override = management.clear_job_queue:90
 | 
					verify_step_priority_override = management.clear_job_queue:90
 | 
				
			||||||
# We don't use this feature, and it creates an additional load on the database
 | 
					# We don't use this feature, and it creates an additional load on the database
 | 
				
			||||||
node_history = False
 | 
					node_history = False
 | 
				
			||||||
# Provide for a timeout longer than 60 seconds for certain vendor's hardware
 | 
					# Provide for a timeout longer than 60 seconds for certain vendor's hardware
 | 
				
			||||||
power_state_change_timeout = 120
 | 
					power_state_change_timeout = 120
 | 
				
			||||||
{% if env.DEPLOY_KERNEL_URL is defined %}
 | 
					{% if env.IRONIC_DEFAULT_KERNEL is defined %}
 | 
				
			||||||
deploy_kernel = {{ env.DEPLOY_KERNEL_URL }}
 | 
					deploy_kernel = file://{{ env.IRONIC_DEFAULT_KERNEL }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
{% if env.DEPLOY_KERNEL_BY_ARCH is defined %}
 | 
					{% if env.IRONIC_DEFAULT_RAMDISK is defined %}
 | 
				
			||||||
deploy_kernel_by_arch = {{ env.DEPLOY_KERNEL_BY_ARCH }}
 | 
					deploy_ramdisk = file://{{ env.IRONIC_DEFAULT_RAMDISK }}
 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% if env.DEPLOY_RAMDISK_URL is defined %}
 | 
					 | 
				
			||||||
deploy_ramdisk = {{ env.DEPLOY_RAMDISK_URL }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% if env.DEPLOY_RAMDISK_BY_ARCH is defined %}
 | 
					 | 
				
			||||||
deploy_ramdisk_by_arch = {{ env.DEPLOY_RAMDISK_BY_ARCH }}
 | 
					 | 
				
			||||||
{% endif %}
 | 
					 | 
				
			||||||
{% if env.DISABLE_DEEP_IMAGE_INSPECTION | lower == "true" %}
 | 
					 | 
				
			||||||
disable_deep_image_inspection = True
 | 
					 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[database]
 | 
					[database]
 | 
				
			||||||
{% if env.IRONIC_USE_MARIADB | lower == "true" %}
 | 
					{% if env.IRONIC_USE_MARIADB | lower == "false" %}
 | 
				
			||||||
connection = {{ env.MARIADB_CONNECTION }}
 | 
					connection = sqlite:////var/lib/ironic/ironic.sqlite
 | 
				
			||||||
{% else %}
 | 
					 | 
				
			||||||
connection = {{ env.LOCAL_DB_URI }}
 | 
					 | 
				
			||||||
# Synchronous mode is required for data integrity in case of operating system
 | 
					# Synchronous mode is required for data integrity in case of operating system
 | 
				
			||||||
# crash. In our case we restart the container from scratch, so we can save some
 | 
					# crash. In our case we restart the container from scratch, so we can save some
 | 
				
			||||||
# IO by not doing syncs all the time.
 | 
					# IO by not doing syncs all the time.
 | 
				
			||||||
sqlite_synchronous = False
 | 
					sqlite_synchronous = False
 | 
				
			||||||
 | 
					{% else %}
 | 
				
			||||||
 | 
					connection = {{ env.MARIADB_CONNECTION }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[deploy]
 | 
					[deploy]
 | 
				
			||||||
@@ -129,15 +112,15 @@ default_boot_option = local
 | 
				
			|||||||
erase_devices_metadata_priority = 10
 | 
					erase_devices_metadata_priority = 10
 | 
				
			||||||
erase_devices_priority = 0
 | 
					erase_devices_priority = 0
 | 
				
			||||||
http_root = /shared/html/
 | 
					http_root = /shared/html/
 | 
				
			||||||
http_url = {% if env.VMEDIA_TLS_PORT %}{{ env.IRONIC_HTTPS_VMEDIA_URL }}{% else %}{{ env.IRONIC_HTTP_URL }}{% endif %}
 | 
					http_url = {{ env.IRONIC_BOOT_BASE_URL }}
 | 
				
			||||||
fast_track = {{ env.IRONIC_FAST_TRACK }}
 | 
					fast_track = {{ env.IRONIC_FAST_TRACK }}
 | 
				
			||||||
{% if env.IRONIC_BOOT_ISO_SOURCE %}
 | 
					{% if env.IRONIC_BOOT_ISO_SOURCE %}
 | 
				
			||||||
ramdisk_image_download_source = {{ env.IRONIC_BOOT_ISO_SOURCE }}
 | 
					ramdisk_image_download_source = {{ env.IRONIC_BOOT_ISO_SOURCE }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
{% if env.IRONIC_EXTERNAL_HTTP_URL %}
 | 
					{% if env.IRONIC_EXTERNAL_HTTP_URL %}
 | 
				
			||||||
external_http_url = {{ env.IRONIC_EXTERNAL_HTTP_URL }}
 | 
					external_http_url = {{ env.IRONIC_EXTERNAL_HTTP_URL }}
 | 
				
			||||||
{% elif env.VMEDIA_TLS_PORT %}
 | 
					{% elif env.IRONIC_VMEDIA_TLS_SETUP == "true" %}
 | 
				
			||||||
external_http_url = {{ env.IRONIC_HTTPS_VMEDIA_URL }}
 | 
					external_http_url = https://{{ env.IRONIC_URL_HOST }}:{{ env.VMEDIA_TLS_PORT }}
 | 
				
			||||||
{% endif %}
 | 
					{% endif %}
 | 
				
			||||||
{% if env.IRONIC_EXTERNAL_CALLBACK_URL %}
 | 
					{% if env.IRONIC_EXTERNAL_CALLBACK_URL %}
 | 
				
			||||||
external_callback_url = {{ env.IRONIC_EXTERNAL_CALLBACK_URL }}
 | 
					external_callback_url = {{ env.IRONIC_EXTERNAL_CALLBACK_URL }}
 | 
				
			||||||
@@ -192,8 +175,8 @@ cipher_suite_versions = 3,17
 | 
				
			|||||||
# unauthenticated connections from other processes in the same host since the
 | 
					# unauthenticated connections from other processes in the same host since the
 | 
				
			||||||
# containers are in host networking.
 | 
					# containers are in host networking.
 | 
				
			||||||
auth_strategy = http_basic
 | 
					auth_strategy = http_basic
 | 
				
			||||||
http_basic_auth_user_file = {{ env.IRONIC_RPC_HTPASSWD_FILE }}
 | 
					http_basic_auth_user_file = /etc/ironic/htpasswd-rpc
 | 
				
			||||||
host_ip = {{ env.IRONIC_HOST_IP }}
 | 
					host_ip = {% if env.LISTEN_ALL_INTERFACES | lower == "true" %}::{% else %}{{ env.IRONIC_IP }}{% endif %}
 | 
				
			||||||
{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
					{% if env.IRONIC_TLS_SETUP == "true" %}
 | 
				
			||||||
use_ssl = true
 | 
					use_ssl = true
 | 
				
			||||||
cafile = {{ env.IRONIC_CACERT_FILE }}
 | 
					cafile = {{ env.IRONIC_CACERT_FILE }}
 | 
				
			||||||
@@ -204,6 +187,11 @@ insecure = {{ env.IRONIC_INSECURE }}
 | 
				
			|||||||
[nova]
 | 
					[nova]
 | 
				
			||||||
send_power_notifications = false
 | 
					send_power_notifications = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[oslo_messaging_notifications]
 | 
				
			||||||
 | 
					driver = prometheus_exporter
 | 
				
			||||||
 | 
					location = /shared/ironic_prometheus_exporter
 | 
				
			||||||
 | 
					transport_url = fake://
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[pxe]
 | 
					[pxe]
 | 
				
			||||||
# NOTE(dtantsur): keep this value at least 3x lower than
 | 
					# NOTE(dtantsur): keep this value at least 3x lower than
 | 
				
			||||||
# [conductor]deploy_callback_timeout so that at least some retries happen.
 | 
					# [conductor]deploy_callback_timeout so that at least some retries happen.
 | 
				
			||||||
@@ -9,7 +9,7 @@ declare -A efi_arch=(
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
for arch in "${!efi_arch[@]}"; do
 | 
					for arch in "${!efi_arch[@]}"; do
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  DEST=/tmp/uefi_esp_${arch}.img
 | 
					  DEST=/tmp/esp-${arch}.img
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dd bs=1024 count=6400 if=/dev/zero of=$DEST
 | 
					  dd bs=1024 count=6400 if=/dev/zero of=$DEST
 | 
				
			||||||
  mkfs.msdos -F 12 -n 'ESP_IMAGE' $DEST
 | 
					  mkfs.msdos -F 12 -n 'ESP_IMAGE' $DEST
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								ironic-image/scripts/rundnsmasq → ironic-image/rundnsmasq
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										16
									
								
								ironic-image/scripts/rundnsmasq → ironic-image/rundnsmasq
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							@@ -13,11 +13,7 @@ export DNS_PORT=${DNS_PORT:-0}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
wait_for_interface_or_ip
 | 
					wait_for_interface_or_ip
 | 
				
			||||||
if [[ "${DNS_IP:-}" == "provisioning" ]]; then
 | 
					if [[ "${DNS_IP:-}" == "provisioning" ]]; then
 | 
				
			||||||
    if [[ "${IPV}" == "4" ]]; then
 | 
					    export DNS_IP="$IRONIC_URL_HOST"
 | 
				
			||||||
      export DNS_IP="${IRONIC_IP}"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
      export DNS_IP="[${IRONIC_IP}]"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mkdir -p /shared/tftpboot
 | 
					mkdir -p /shared/tftpboot
 | 
				
			||||||
@@ -36,12 +32,12 @@ fi
 | 
				
			|||||||
# Template and write dnsmasq.conf
 | 
					# Template and write dnsmasq.conf
 | 
				
			||||||
# we template via /tmp as sed otherwise creates temp files in /etc directory
 | 
					# we template via /tmp as sed otherwise creates temp files in /etc directory
 | 
				
			||||||
# where we can't write
 | 
					# where we can't write
 | 
				
			||||||
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"
 | 
					python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' </etc/dnsmasq.conf.j2 >/tmp/dnsmasq.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for iface in $(echo "$DNSMASQ_EXCEPT_INTERFACE" | tr ',' ' '); do
 | 
					for iface in $(echo "$DNSMASQ_EXCEPT_INTERFACE" | tr ',' ' '); do
 | 
				
			||||||
    sed -i -e "/^interface=.*/ a\except-interface=${iface}" "${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"
 | 
					    sed -i -e "/^interface=.*/ a\except-interface=${iface}" /tmp/dnsmasq.conf
 | 
				
			||||||
done
 | 
					done
 | 
				
			||||||
cat "${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf" > "${DNSMASQ_CONF_DIR}/dnsmasq.conf"
 | 
					cat /tmp/dnsmasq.conf > /etc/dnsmasq.conf
 | 
				
			||||||
rm "${DNSMASQ_TEMP_DIR}/dnsmasq_temp.conf"
 | 
					rm /tmp/dnsmasq.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec /usr/sbin/dnsmasq -d -q -C "${DNSMASQ_CONF_DIR}/dnsmasq.conf"
 | 
					exec /usr/sbin/dnsmasq -d -q -C /etc/dnsmasq.conf
 | 
				
			||||||
							
								
								
									
										38
									
								
								ironic-image/scripts/runhttpd → ironic-image/runhttpd
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										38
									
								
								ironic-image/scripts/runhttpd → ironic-image/runhttpd
									
									
									
									
									
										
										
										Executable file → Normal file
									
								
							@@ -28,28 +28,25 @@ wait_for_interface_or_ip
 | 
				
			|||||||
mkdir -p /shared/html
 | 
					mkdir -p /shared/html
 | 
				
			||||||
chmod 0777 /shared/html
 | 
					chmod 0777 /shared/html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
INSPECTOR_EXTRA_ARGS=" ipa-inspection-callback-url=${IRONIC_BASE_URL}/v1/continue_inspection"
 | 
					IRONIC_BASE_URL="${IRONIC_SCHEME}://${IRONIC_URL_HOST}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					INSPECTOR_EXTRA_ARGS=" ipa-inspection-callback-url=${IRONIC_BASE_URL}:${IRONIC_ACCESS_PORT}/v1/continue_inspection"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ "$IRONIC_FAST_TRACK" == "true" ]]; then
 | 
					if [[ "$IRONIC_FAST_TRACK" == "true" ]]; then
 | 
				
			||||||
    INSPECTOR_EXTRA_ARGS+=" ipa-api-url=${IRONIC_BASE_URL}"
 | 
					    INSPECTOR_EXTRA_ARGS+=" ipa-api-url=${IRONIC_BASE_URL}:${IRONIC_ACCESS_PORT}"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
export INSPECTOR_EXTRA_ARGS
 | 
					export INSPECTOR_EXTRA_ARGS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Copy files to shared mount
 | 
					# Copy files to shared mount
 | 
				
			||||||
render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe
 | 
					render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe
 | 
				
			||||||
# cp -r /etc/httpd/* "${HTTPD_DIR}"
 | 
					cp /tmp/uefi_esp*.img /shared/html/
 | 
				
			||||||
if [[ -f "${HTTPD_CONF_DIR}/httpd.conf" ]]; then
 | 
					 | 
				
			||||||
    mv "${HTTPD_CONF_DIR}/httpd.conf" "${HTTPD_CONF_DIR}/httpd.conf.example"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Render the core httpd config
 | 
					# Render the core httpd config
 | 
				
			||||||
render_j2_config "/etc/httpd/conf/httpd.conf.j2" \
 | 
					render_j2_config /etc/httpd/conf/httpd.conf.j2 /etc/httpd/conf/httpd.conf
 | 
				
			||||||
    "${HTTPD_CONF_DIR}/httpd.conf"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ "$IRONIC_TLS_SETUP" == "true" ]]; then
 | 
					if [[ "$IRONIC_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
    if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
					    if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
				
			||||||
        render_j2_config "/tmp/httpd-ironic-api.conf.j2" \
 | 
					        render_j2_config /tmp/httpd-ironic-api.conf.j2 /etc/httpd/conf.d/ironic.conf
 | 
				
			||||||
            "${HTTPD_CONF_DIR_D}/ironic.conf"
 | 
					 | 
				
			||||||
    fi
 | 
					    fi
 | 
				
			||||||
else
 | 
					else
 | 
				
			||||||
    export IRONIC_REVERSE_PROXY_SETUP="false" # If TLS is not used, we have no reason to use the reverse proxy
 | 
					    export IRONIC_REVERSE_PROXY_SETUP="false" # If TLS is not used, we have no reason to use the reverse proxy
 | 
				
			||||||
@@ -59,24 +56,33 @@ write_htpasswd_files
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Render httpd TLS configuration for /shared/html/<redifsh;ilo>
 | 
					# Render httpd TLS configuration for /shared/html/<redifsh;ilo>
 | 
				
			||||||
if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
					if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
    render_j2_config "/tmp/httpd-vmedia.conf.j2" \
 | 
					    render_j2_config /etc/httpd-vmedia.conf.j2 /etc/httpd/conf.d/vmedia.conf
 | 
				
			||||||
        "${HTTPD_CONF_DIR_D}/vmedia.conf"
 | 
					 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Render httpd TLS configuration for /shared/html
 | 
					# Render httpd TLS configuration for /shared/html
 | 
				
			||||||
if [[ "$IPXE_TLS_SETUP" == "true" ]]; then
 | 
					if [[ "$IPXE_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
    mkdir -p /shared/html/custom-ipxe
 | 
					    mkdir -p /shared/html/custom-ipxe
 | 
				
			||||||
    chmod 0777 /shared/html/custom-ipxe
 | 
					    chmod 0777 /shared/html/custom-ipxe
 | 
				
			||||||
    render_j2_config "/tmp/httpd-ipxe.conf.j2" "${HTTPD_CONF_DIR_D}/ipxe.conf"
 | 
					    render_j2_config "/etc/httpd-ipxe.conf.j2" "/etc/httpd/conf.d/ipxe.conf"
 | 
				
			||||||
    cp "${IPXE_CUSTOM_FIRMWARE_DIR}/undionly.kpxe" \
 | 
					    cp "${IPXE_CUSTOM_FIRMWARE_DIR}/undionly.kpxe" \
 | 
				
			||||||
       "${IPXE_CUSTOM_FIRMWARE_DIR}/snponly.efi" \
 | 
					       "${IPXE_CUSTOM_FIRMWARE_DIR}/snponly.efi" \
 | 
				
			||||||
       "/shared/html/custom-ipxe"
 | 
					       "/shared/html/custom-ipxe"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set up inotify to kill the container (restart) whenever cert files for ironic api change
 | 
					# Set up inotify to kill the container (restart) whenever cert files for ironic api change
 | 
				
			||||||
configure_restart_on_certificate_update "${IRONIC_TLS_SETUP}" httpd "${IRONIC_CERT_FILE}"
 | 
					if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
				
			||||||
 | 
					    # shellcheck disable=SC2034
 | 
				
			||||||
 | 
					    inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
 | 
				
			||||||
 | 
					        kill -WINCH $(pgrep httpd)
 | 
				
			||||||
 | 
					    done &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Set up inotify to kill the container (restart) whenever cert of httpd for /shared/html/<redifsh;ilo> path change
 | 
					# Set up inotify to kill the container (restart) whenever cert of httpd for /shared/html/<redifsh;ilo> path change
 | 
				
			||||||
configure_restart_on_certificate_update "${IRONIC_VMEDIA_TLS_SETUP}" httpd "${IRONIC_VMEDIA_CERT_FILE}"
 | 
					if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
				
			||||||
 | 
					    # shellcheck disable=SC2034
 | 
				
			||||||
 | 
					    inotifywait -m -e delete_self "${IRONIC_VMEDIA_CERT_FILE}" | while read -r file event; do
 | 
				
			||||||
 | 
					        kill -WINCH $(pgrep httpd)
 | 
				
			||||||
 | 
					    done &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec /usr/sbin/httpd -DFOREGROUND -f "${HTTPD_CONF_DIR}/httpd.conf"
 | 
					exec /usr/sbin/httpd -DFOREGROUND -f /etc/httpd/conf/httpd.conf
 | 
				
			||||||
							
								
								
									
										23
									
								
								ironic-image/runironic
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								ironic-image/runironic
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# This setting must go before configure-ironic since it has different defaults.
 | 
				
			||||||
 | 
					export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-false}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/configure-ironic.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ramdisk logs
 | 
				
			||||||
 | 
					mkdir -p /shared/log/ironic/deploy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					run_ironic_dbsync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
				
			||||||
 | 
					    # shellcheck disable=SC2034
 | 
				
			||||||
 | 
					    inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
 | 
				
			||||||
 | 
					        kill $(pgrep ironic)
 | 
				
			||||||
 | 
					    done &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_ironic_auth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec /usr/bin/ironic
 | 
				
			||||||
							
								
								
									
										13
									
								
								ironic-image/runironic-api
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								ironic-image/runironic-api
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_DEPLOYMENT="API"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/configure-ironic.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_REVERSE_PROXY_SETUP=false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < /tmp/httpd-ironic-api.conf.j2 > /etc/httpd/conf.d/ironic.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/runhttpd
 | 
				
			||||||
							
								
								
									
										20
									
								
								ironic-image/runironic-conductor
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ironic-image/runironic-conductor
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_DEPLOYMENT="Conductor"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/configure-ironic.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ramdisk logs
 | 
				
			||||||
 | 
					mkdir -p /shared/log/ironic/deploy
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					run_ironic_dbsync
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
				
			||||||
 | 
					    # shellcheck disable=SC2034
 | 
				
			||||||
 | 
					    inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
 | 
				
			||||||
 | 
					        kill $(pgrep ironic)
 | 
				
			||||||
 | 
					    done &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec /usr/bin/ironic-conductor
 | 
				
			||||||
							
								
								
									
										12
									
								
								ironic-image/runironic-exporter
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								ironic-image/runironic-exporter
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/configure-ironic.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FLASK_RUN_HOST=${FLASK_RUN_HOST:-0.0.0.0}
 | 
				
			||||||
 | 
					FLASK_RUN_PORT=${FLASK_RUN_PORT:-9608}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_CONFIG="/etc/ironic/ironic.conf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec gunicorn -b "${FLASK_RUN_HOST}:${FLASK_RUN_PORT}" -w 4 \
 | 
				
			||||||
 | 
					    ironic_prometheus_exporter.app.wsgi:application
 | 
				
			||||||
							
								
								
									
										62
									
								
								ironic-image/runironic-inspector
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								ironic-image/runironic-inspector
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set -euxo pipefail
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					CONFIG=/etc/ironic-inspector/ironic-inspector.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_INSPECTOR_ENABLE_DISCOVERY=${IRONIC_INSPECTOR_ENABLE_DISCOVERY:-false}
 | 
				
			||||||
 | 
					export INSPECTOR_REVERSE_PROXY_SETUP=${INSPECTOR_REVERSE_PROXY_SETUP:-false}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/tls-common.sh
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/ironic-common.sh
 | 
				
			||||||
 | 
					# shellcheck disable=SC1091
 | 
				
			||||||
 | 
					. /bin/auth-common.sh
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$USE_IRONIC_INSPECTOR" == "false" ]]; then
 | 
				
			||||||
 | 
					    echo "FATAL: ironic-inspector is disabled via USE_IRONIC_INSPECTOR"
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					wait_for_interface_or_ip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IRONIC_INSPECTOR_PORT=${IRONIC_INSPECTOR_ACCESS_PORT}
 | 
				
			||||||
 | 
					if [[ "$IRONIC_INSPECTOR_TLS_SETUP" == "true" ]]; then
 | 
				
			||||||
 | 
					    if [[ "${INSPECTOR_REVERSE_PROXY_SETUP}" == "true" ]] && [[ "${IRONIC_INSPECTOR_PRIVATE_PORT}" != "unix" ]]; then
 | 
				
			||||||
 | 
					        IRONIC_INSPECTOR_PORT=$IRONIC_INSPECTOR_PRIVATE_PORT
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					else
 | 
				
			||||||
 | 
					    export INSPECTOR_REVERSE_PROXY_SETUP="false" # If TLS is not used, we have no reason to use the reverse proxy
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export IRONIC_INSPECTOR_BASE_URL="${IRONIC_INSPECTOR_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_INSPECTOR_PORT}"
 | 
				
			||||||
 | 
					export IRONIC_BASE_URL="${IRONIC_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_ACCESS_PORT}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					build_j2_config()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    local CONFIG_FILE="$1"
 | 
				
			||||||
 | 
					    python3 -c 'import os; import sys; import jinja2; sys.stdout.write(jinja2.Template(sys.stdin.read()).render(env=os.environ))' < "$CONFIG_FILE.j2"
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Merge with the original configuration file from the package.
 | 
				
			||||||
 | 
					build_j2_config "$CONFIG" | crudini --merge "$CONFIG"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_inspector_auth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					configure_client_basic_auth ironic "${CONFIG}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ironic-inspector-dbsync --config-file "${CONFIG}" upgrade
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ "$INSPECTOR_REVERSE_PROXY_SETUP" == "false" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
				
			||||||
 | 
					    # shellcheck disable=SC2034
 | 
				
			||||||
 | 
					    inotifywait -m -e delete_self "${IRONIC_INSPECTOR_CERT_FILE}" | while read -r file event; do
 | 
				
			||||||
 | 
					        kill $(pgrep ironic)
 | 
				
			||||||
 | 
					    done &
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Make sure ironic traffic bypasses any proxies
 | 
				
			||||||
 | 
					export NO_PROXY="${NO_PROXY:-},$IRONIC_IP"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# shellcheck disable=SC2086
 | 
				
			||||||
 | 
					exec /usr/bin/ironic-inspector
 | 
				
			||||||
							
								
								
									
										19
									
								
								ironic-image/runlogwatch.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								ironic-image/runlogwatch.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Ramdisk logs path
 | 
				
			||||||
 | 
					LOG_DIR="/shared/log/ironic/deploy"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The ironic container creates the directory, wait for
 | 
				
			||||||
 | 
					# it to exist before running inotifywait or it can fail causing
 | 
				
			||||||
 | 
					# a spurious restart
 | 
				
			||||||
 | 
					while [ ! -d "${LOG_DIR}" ]; do
 | 
				
			||||||
 | 
					  echo "Waiting for ${LOG_DIR}"
 | 
				
			||||||
 | 
					  sleep 5
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					inotifywait -m "${LOG_DIR}" -e close_write |
 | 
				
			||||||
 | 
					    while read -r path _action file; do
 | 
				
			||||||
 | 
					        echo "************ Contents of ${path}/${file} ramdisk log file bundle **************"
 | 
				
			||||||
 | 
					        tar -xOzvvf "${path}/${file}" | sed -e "s/^/${file}: /"
 | 
				
			||||||
 | 
					        rm -f "${path}/${file}"
 | 
				
			||||||
 | 
					    done
 | 
				
			||||||
@@ -1,97 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_REVERSE_PROXY_SETUP=${IRONIC_REVERSE_PROXY_SETUP:-false}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# CUSTOM_CONFIG_DIR is also managed in the ironic-common.sh, in order to
 | 
					 | 
				
			||||||
# keep auth-common and ironic-common separate (to stay consistent with the
 | 
					 | 
				
			||||||
# architecture) part of the ironic-common logic had to be duplicated
 | 
					 | 
				
			||||||
CUSTOM_CONFIG_DIR="${CUSTOM_CONFIG_DIR:-/conf}"
 | 
					 | 
				
			||||||
IRONIC_CONF_DIR="${CUSTOM_CONFIG_DIR}/ironic"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Backward compatibility
 | 
					 | 
				
			||||||
if [[ "${IRONIC_DEPLOYMENT:-}" == "Conductor" ]]; then
 | 
					 | 
				
			||||||
    export IRONIC_EXPOSE_JSON_RPC=true
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
    export IRONIC_EXPOSE_JSON_RPC="${IRONIC_EXPOSE_JSON_RPC:-false}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRONIC_HTPASSWD_FILE="${IRONIC_CONF_DIR}/htpasswd"
 | 
					 | 
				
			||||||
export IRONIC_RPC_HTPASSWD_FILE="${IRONIC_HTPASSWD_FILE}-rpc"
 | 
					 | 
				
			||||||
if [[ -f "/auth/ironic/htpasswd" ]]; then
 | 
					 | 
				
			||||||
    IRONIC_HTPASSWD=$(</auth/ironic/htpasswd)
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
if [[ -f "/auth/ironic-rpc/htpasswd" ]]; then
 | 
					 | 
				
			||||||
    IRONIC_RPC_HTPASSWD=$(</auth/ironic-rpc/htpasswd)
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
export IRONIC_HTPASSWD=${IRONIC_HTPASSWD:-${HTTP_BASIC_HTPASSWD:-}}
 | 
					 | 
				
			||||||
export IRONIC_RPC_HTPASSWD=${IRONIC_RPC_HTPASSWD:-${IRONIC_HTPASSWD}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -n "${MARIADB_PASSWORD:-}" ]]; then
 | 
					 | 
				
			||||||
    echo "WARNING: passing MARIADB_PASSWORD is deprecated, mount a secret under /auth/mariadb instead"
 | 
					 | 
				
			||||||
elif [[ -f /auth/mariadb/password ]]; then
 | 
					 | 
				
			||||||
    MARIADB_PASSWORD=$(</auth/mariadb/password)
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -z "${MARIADB_USER:-}" ]] && [[ -f /auth/mariadb/username ]]; then
 | 
					 | 
				
			||||||
    MARIADB_USER=$(</auth/mariadb/username)
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRONIC_CONFIG="${IRONIC_CONF_DIR}/ironic.conf"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_json_rpc_auth()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ "${IRONIC_EXPOSE_JSON_RPC}" != "true" ]]; then
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local auth_config_file="/auth/ironic-rpc/auth-config"
 | 
					 | 
				
			||||||
    local username_file="/auth/ironic-rpc/username"
 | 
					 | 
				
			||||||
    local password_file="/auth/ironic-rpc/password"
 | 
					 | 
				
			||||||
    if [[ -f "${username_file}" ]] && [[ -f "${password_file}" ]]; then
 | 
					 | 
				
			||||||
        crudini --set "${IRONIC_CONFIG}" json_rpc username "$(<${username_file})"
 | 
					 | 
				
			||||||
        set +x
 | 
					 | 
				
			||||||
        crudini --set "${IRONIC_CONFIG}" json_rpc password "$(<${password_file})"
 | 
					 | 
				
			||||||
        set -x
 | 
					 | 
				
			||||||
    elif [[ -f "${auth_config_file}" ]]; then
 | 
					 | 
				
			||||||
        echo "WARNING: using auth-config is deprecated, mount a secret directly"
 | 
					 | 
				
			||||||
        # Merge configurations in the "auth" directory into the default ironic configuration file
 | 
					 | 
				
			||||||
        crudini --merge "${IRONIC_CONFIG}" < "${auth_config_file}"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        echo "FATAL: no client-side credentials provided for JSON RPC"
 | 
					 | 
				
			||||||
        echo "HINT: mount a secret with username and password fields under /auth/ironic-rpc"
 | 
					 | 
				
			||||||
        exit 1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ -z "${IRONIC_RPC_HTPASSWD}" ]]; then
 | 
					 | 
				
			||||||
        if [[ -f "${username_file}" ]] && [[ -f "${password_file}" ]]; then
 | 
					 | 
				
			||||||
            htpasswd -c -i -B "${IRONIC_RPC_HTPASSWD_FILE}" "$(<${username_file})" <"${password_file}"
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            echo "FATAL: enabling JSON RPC requires authentication"
 | 
					 | 
				
			||||||
            echo "HINT: mount a secret with either username and password or htpasswd under /auth/ironic-rpc"
 | 
					 | 
				
			||||||
            exit 1
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        printf "%s\n" "${IRONIC_RPC_HTPASSWD}" > "${IRONIC_RPC_HTPASSWD_FILE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_ironic_auth()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    # Configure HTTP basic auth for API server
 | 
					 | 
				
			||||||
    if [[ -n "${IRONIC_HTPASSWD}" ]]; then
 | 
					 | 
				
			||||||
        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
					 | 
				
			||||||
        if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "false" ]]; then
 | 
					 | 
				
			||||||
            crudini --set "${IRONIC_CONFIG}" DEFAULT auth_strategy http_basic
 | 
					 | 
				
			||||||
            crudini --set "${IRONIC_CONFIG}" DEFAULT http_basic_auth_user_file "${IRONIC_HTPASSWD_FILE}"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
write_htpasswd_files()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ -n "${IRONIC_HTPASSWD:-}" ]]; then
 | 
					 | 
				
			||||||
        printf "%s\n" "${IRONIC_HTPASSWD}" > "${IRONIC_HTPASSWD_FILE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,153 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IRONIC_EXTERNAL_IP="${IRONIC_EXTERNAL_IP:-}"
 | 
					 | 
				
			||||||
export VMEDIA_TLS_PORT="${VMEDIA_TLS_PORT:-}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Define the VLAN interfaces to be included in introspection report, e.g.
 | 
					 | 
				
			||||||
#   all - all VLANs on all interfaces using LLDP information
 | 
					 | 
				
			||||||
#   <interface> - all VLANs on a particular interface using LLDP information
 | 
					 | 
				
			||||||
#   <interface.vlan> - a particular VLAN on an interface, not relying on LLDP
 | 
					 | 
				
			||||||
export IRONIC_ENABLE_VLAN_INTERFACES=${IRONIC_ENABLE_VLAN_INTERFACES:-${IRONIC_INSPECTOR_VLAN_INTERFACES:-all}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/tls-common.sh
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/ironic-common.sh
 | 
					 | 
				
			||||||
# 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"
 | 
					 | 
				
			||||||
        exit 1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    MARIADB_DATABASE=${MARIADB_DATABASE:-ironic}
 | 
					 | 
				
			||||||
    MARIADB_USER=${MARIADB_USER:-ironic}
 | 
					 | 
				
			||||||
    MARIADB_HOST=${MARIADB_HOST:-127.0.0.1}
 | 
					 | 
				
			||||||
    export MARIADB_CONNECTION="mysql+pymysql://${MARIADB_USER}:${MARIADB_PASSWORD}@${MARIADB_HOST}/${MARIADB_DATABASE}?charset=utf8"
 | 
					 | 
				
			||||||
    if [[ "$MARIADB_TLS_ENABLED" == "true" ]]; then
 | 
					 | 
				
			||||||
        export MARIADB_CONNECTION="${MARIADB_CONNECTION}&ssl=on&ssl_ca=${MARIADB_CACERT_FILE}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# zero makes it do cpu number detection on Ironic side
 | 
					 | 
				
			||||||
export NUMWORKERS=${NUMWORKERS:-0}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Whether to enable fast_track provisioning or not
 | 
					 | 
				
			||||||
export IRONIC_FAST_TRACK=${IRONIC_FAST_TRACK:-true}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Whether cleaning disks before and after deployment
 | 
					 | 
				
			||||||
export IRONIC_AUTOMATED_CLEAN=${IRONIC_AUTOMATED_CLEAN:-true}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Wheter to enable the sensor data collection
 | 
					 | 
				
			||||||
export SEND_SENSOR_DATA=${SEND_SENSOR_DATA:-false}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Set of collectors that should be used with IPA inspection
 | 
					 | 
				
			||||||
export IRONIC_IPA_COLLECTORS=${IRONIC_IPA_COLLECTORS:-default,logs}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wait_for_interface_or_ip
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ "$(echo "$LISTEN_ALL_INTERFACES" | tr '[:upper:]' '[:lower:]')" == "true" ]]; then
 | 
					 | 
				
			||||||
export IRONIC_HOST_IP="::"
 | 
					 | 
				
			||||||
elif [[ -n "${ENABLE_IPV6}" ]]; then
 | 
					 | 
				
			||||||
export IRONIC_HOST_IP="$IRONIC_IPV6"
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
export IRONIC_HOST_IP="$IRONIC_IP"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ "${VMEDIA_TLS_PORT}" ]]; then
 | 
					 | 
				
			||||||
   export IRONIC_HTTPS_VMEDIA_URL="https://${IRONIC_URL_HOST}:${VMEDIA_TLS_PORT}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Hostname to use for the current conductor instance.
 | 
					 | 
				
			||||||
export IRONIC_CONDUCTOR_HOST=${IRONIC_CONDUCTOR_HOST:-${IRONIC_URL_HOST}}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -n "$IRONIC_EXTERNAL_IP" ]]; then
 | 
					 | 
				
			||||||
    export IRONIC_EXTERNAL_CALLBACK_URL=${IRONIC_EXTERNAL_CALLBACK_URL:-"${IRONIC_SCHEME}://${IRONIC_EXTERNAL_IP}:${IRONIC_ACCESS_PORT}"}
 | 
					 | 
				
			||||||
    if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]]; then
 | 
					 | 
				
			||||||
        export IRONIC_EXTERNAL_HTTP_URL=${IRONIC_EXTERNAL_HTTP_URL:-"https://${IRONIC_EXTERNAL_IP}:${VMEDIA_TLS_PORT}"}
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        export IRONIC_EXTERNAL_HTTP_URL=${IRONIC_EXTERNAL_HTTP_URL:-"http://${IRONIC_EXTERNAL_IP}:${HTTP_PORT}"}
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
IMAGE_CACHE_PREFIX="/shared/html/images/ironic-python-agent"
 | 
					 | 
				
			||||||
if [[ -z "${DEPLOY_KERNEL_URL:-}" ]] && [[ -z "${DEPLOY_RAMDISK_URL:-}" ]] && \
 | 
					 | 
				
			||||||
       [[ -f "${IMAGE_CACHE_PREFIX}.kernel" ]] && [[ -f "${IMAGE_CACHE_PREFIX}.initramfs" ]]; then
 | 
					 | 
				
			||||||
    export DEPLOY_KERNEL_URL="file://${IMAGE_CACHE_PREFIX}.kernel"
 | 
					 | 
				
			||||||
    export DEPLOY_RAMDISK_URL="file://${IMAGE_CACHE_PREFIX}.initramfs"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
declare -A detected_arch
 | 
					 | 
				
			||||||
for var_arch in "${!DEPLOY_KERNEL_URL_@}"; do
 | 
					 | 
				
			||||||
    IPA_ARCH="${var_arch#DEPLOY_KERNEL_URL}"
 | 
					 | 
				
			||||||
    detected_arch["${IPA_ARCH,,}"]=1
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
for file_arch in "${IMAGE_CACHE_PREFIX}"_*.kernel; do
 | 
					 | 
				
			||||||
    if [[ -f "${file_arch}" ]]; then
 | 
					 | 
				
			||||||
        IPA_ARCH="$(basename "${file_arch#"${IMAGE_CACHE_PREFIX}"_}" .kernel)"
 | 
					 | 
				
			||||||
        detected_arch["${IPA_ARCH}"]=1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
DEPLOY_KERNEL_BY_ARCH=""
 | 
					 | 
				
			||||||
DEPLOY_RAMDISK_BY_ARCH=""
 | 
					 | 
				
			||||||
for IPA_ARCH in "${!detected_arch[@]}"; do
 | 
					 | 
				
			||||||
    kernel_var="DEPLOY_KERNEL_URL_${IPA_ARCH^^}"
 | 
					 | 
				
			||||||
    ramdisk_var="DEPLOY_RAMDISK_URL_${IPA_ARCH^^}"
 | 
					 | 
				
			||||||
    if [[ -z "${!kernel_var:-}" ]] && [[ -z "${!ramdisk_var:-}" ]] && \
 | 
					 | 
				
			||||||
        [[ -f "${IMAGE_CACHE_PREFIX}_${IPA_ARCH}.kernel" ]] && [[ -f "${IMAGE_CACHE_PREFIX}_${IPA_ARCH}.initramfs" ]]; then
 | 
					 | 
				
			||||||
      export "${kernel_var}"="file://${IMAGE_CACHE_PREFIX}_${IPA_ARCH}.kernel"
 | 
					 | 
				
			||||||
      export "${ramdisk_var}"="file://${IMAGE_CACHE_PREFIX}_${IPA_ARCH}.initramfs"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    DEPLOY_KERNEL_BY_ARCH+="${!kernel_var:+${IPA_ARCH}:${!kernel_var},}"
 | 
					 | 
				
			||||||
    DEPLOY_RAMDISK_BY_ARCH+="${!ramdisk_var:+${IPA_ARCH}:${!ramdisk_var},}"
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
if [[ -n "${DEPLOY_KERNEL_BY_ARCH}" ]] && [[ -n "${DEPLOY_RAMDISK_BY_ARCH}" ]]; then
 | 
					 | 
				
			||||||
    export DEPLOY_KERNEL_BY_ARCH="${DEPLOY_KERNEL_BY_ARCH%?}"
 | 
					 | 
				
			||||||
    export DEPLOY_RAMDISK_BY_ARCH="${DEPLOY_RAMDISK_BY_ARCH%?}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -f "${IRONIC_CONF_DIR}/ironic.conf" ]]; then
 | 
					 | 
				
			||||||
    # Make a copy of the original supposed empty configuration file
 | 
					 | 
				
			||||||
    cp "${IRONIC_CONF_DIR}/ironic.conf" "${IRONIC_CONF_DIR}/ironic.conf.orig"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
BOOTLOADER_BY_ARCH=""
 | 
					 | 
				
			||||||
for bootloader in /templates/uefi_esp_*.img; do
 | 
					 | 
				
			||||||
    BOOTLOADER_ARCH="$(basename "${bootloader#/templates/uefi_esp_}" .img)"
 | 
					 | 
				
			||||||
    BOOTLOADER_BY_ARCH+="${BOOTLOADER_ARCH}:file://${bootloader},"
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
export BOOTLOADER_BY_ARCH="${BOOTLOADER_BY_ARCH%?}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# oslo.config also supports Config Opts From Environment, log them to stdout
 | 
					 | 
				
			||||||
echo 'Options set from Environment variables'
 | 
					 | 
				
			||||||
env | grep "^OS_" || true
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkdir -p /shared/html
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -f /proc/sys/crypto/fips_enabled ]]; then
 | 
					 | 
				
			||||||
    ENABLE_FIPS_IPA=$(cat /proc/sys/crypto/fips_enabled)
 | 
					 | 
				
			||||||
    export ENABLE_FIPS_IPA
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The original ironic.conf is empty, and can be found in ironic.conf_orig
 | 
					 | 
				
			||||||
render_j2_config "/etc/ironic/ironic.conf.j2" \
 | 
					 | 
				
			||||||
    "${IRONIC_CONF_DIR}/ironic.conf"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_json_rpc_auth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Make sure ironic traffic bypasses any proxies
 | 
					 | 
				
			||||||
export NO_PROXY="${NO_PROXY:-}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if [[ -n "$IRONIC_IPV6" ]]; then
 | 
					 | 
				
			||||||
export NO_PROXY="${NO_PROXY},${IRONIC_IPV6}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
if [[ -n "$IRONIC_IP" ]]; then
 | 
					 | 
				
			||||||
export NO_PROXY="${NO_PROXY},${IRONIC_IP}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
@@ -1,295 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Export IRONIC_IP to avoid needing to lean on IRONIC_URL_HOST for consumption in
 | 
					 | 
				
			||||||
# e.g. dnsmasq configuration
 | 
					 | 
				
			||||||
export IRONIC_IP="${IRONIC_IP:-}"
 | 
					 | 
				
			||||||
IRONIC_IPV6="${IRONIC_IPV6:-}"
 | 
					 | 
				
			||||||
PROVISIONING_INTERFACE="${PROVISIONING_INTERFACE:-}"
 | 
					 | 
				
			||||||
PROVISIONING_IP="${PROVISIONING_IP:-}"
 | 
					 | 
				
			||||||
PROVISIONING_MACS="${PROVISIONING_MACS:-}"
 | 
					 | 
				
			||||||
IRONIC_URL_HOSTNAME="${IRONIC_URL_HOSTNAME:-}"
 | 
					 | 
				
			||||||
IPXE_CUSTOM_FIRMWARE_DIR="${IPXE_CUSTOM_FIRMWARE_DIR:-/shared/custom_ipxe_firmware}"
 | 
					 | 
				
			||||||
CUSTOM_CONFIG_DIR="${CUSTOM_CONFIG_DIR:-/conf}"
 | 
					 | 
				
			||||||
CUSTOM_DATA_DIR="${CUSTOM_DATA_DIR:-/data}"
 | 
					 | 
				
			||||||
export DNSMASQ_CONF_DIR="${CUSTOM_CONFIG_DIR}/dnsmasq"
 | 
					 | 
				
			||||||
export DNSMASQ_DATA_DIR="${CUSTOM_DATA_DIR}/dnsmasq"
 | 
					 | 
				
			||||||
export DNSMASQ_TEMP_DIR="${CUSTOM_CONFIG_DIR}/dnsmasq"
 | 
					 | 
				
			||||||
export HTTPD_DIR="${CUSTOM_CONFIG_DIR}/httpd"
 | 
					 | 
				
			||||||
export HTTPD_CONF_DIR="${HTTPD_DIR}/conf"
 | 
					 | 
				
			||||||
export HTTPD_CONF_DIR_D="${HTTPD_DIR}/conf.d"
 | 
					 | 
				
			||||||
export IRONIC_CONF_DIR="${CUSTOM_CONFIG_DIR}/ironic"
 | 
					 | 
				
			||||||
export IRONIC_DB_DIR="${CUSTOM_DATA_DIR}/db"
 | 
					 | 
				
			||||||
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"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
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}" \
 | 
					 | 
				
			||||||
    "${IRONIC_TMP_DATA_DIR}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export HTPASSWD_FILE="${IRONIC_CONF_DIR}/htpasswd"
 | 
					 | 
				
			||||||
export LOCAL_DB_URI="sqlite:///${IRONIC_DB_DIR}/ironic.sqlite"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-false}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
get_ip_of_hostname()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ "$#" -ne 2 ]]; then
 | 
					 | 
				
			||||||
        echo "${FUNCNAME}: two parameters required, $# provided" >&2
 | 
					 | 
				
			||||||
        return 1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    case $2 in
 | 
					 | 
				
			||||||
        4)
 | 
					 | 
				
			||||||
            QUERY="a";;
 | 
					 | 
				
			||||||
        6)
 | 
					 | 
				
			||||||
            QUERY="aaaa";;
 | 
					 | 
				
			||||||
        *)
 | 
					 | 
				
			||||||
            echo "${FUNCNAME}: the second parameter should be [a|aaaa] for A and AAAA records"
 | 
					 | 
				
			||||||
            return 1;;
 | 
					 | 
				
			||||||
    esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local HOSTNAME=$1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    echo $(nslookup -type=${QUERY} "${HOSTNAME}" | tail -n2 | grep -w "Address:" | cut -d " " -f2)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
get_interface_of_ip()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    local IP_VERS=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ "$#" -gt 2 ]]; then
 | 
					 | 
				
			||||||
        echo "${FUNCNAME}: too many parameters" >&2
 | 
					 | 
				
			||||||
        return 1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ "$#" -eq 2 ]]; then
 | 
					 | 
				
			||||||
        case $2 in
 | 
					 | 
				
			||||||
        4|6)
 | 
					 | 
				
			||||||
            local IP_VERS="-${2}"
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        *)
 | 
					 | 
				
			||||||
            echo "${FUNCNAME}: the second parameter should be [4|6] (or missing for both)" >&2
 | 
					 | 
				
			||||||
            return 2
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        esac
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local IP_ADDR=$1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Convert the address using ipcalc which strips out the subnet.
 | 
					 | 
				
			||||||
    # For IPv6 addresses, this will give the short-form address
 | 
					 | 
				
			||||||
    IP_ADDR="$(ipcalc "${IP_ADDR}" | grep "^Address:" | awk '{print $2}')"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    echo $(ip ${IP_VERS} -br addr show scope global | grep -i " ${IP_ADDR}/" | cut -f 1 -d ' ' | cut -f 1 -d '@')
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
get_ip_of_interface()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    local IP_VERS=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ "$#" -gt 2 ]]; then
 | 
					 | 
				
			||||||
        echo "${FUNCNAME}: too many parameters" >&2
 | 
					 | 
				
			||||||
        return 1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ "$#" -eq 2 ]]; then
 | 
					 | 
				
			||||||
        case $2 in
 | 
					 | 
				
			||||||
        4|6)
 | 
					 | 
				
			||||||
            local IP_VERS="-${2}"
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        *)
 | 
					 | 
				
			||||||
            echo "${FUNCNAME}: the second parameter should be [4|6] (or missing for both)" >&2
 | 
					 | 
				
			||||||
            return 2
 | 
					 | 
				
			||||||
            ;;
 | 
					 | 
				
			||||||
        esac
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local IFACE=$1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    echo $(ip ${IP_VERS} -br addr show scope global up dev ${IFACE} | awk '{print $3}' | sed -e 's%/.*%%' | head -n 1)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
get_provisioning_interface()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ -n "$PROVISIONING_INTERFACE" ]]; then
 | 
					 | 
				
			||||||
        # don't override the PROVISIONING_INTERFACE if one is provided
 | 
					 | 
				
			||||||
        echo "$PROVISIONING_INTERFACE"
 | 
					 | 
				
			||||||
        return
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    local interface=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    for mac in ${PROVISIONING_MACS//,/ }; do
 | 
					 | 
				
			||||||
        if ip -br link show up | grep -i "$mac" &>/dev/null; then
 | 
					 | 
				
			||||||
            interface="$(ip -br link show up | grep -i "$mac" | cut -f 1 -d ' ' | cut -f 1 -d '@')"
 | 
					 | 
				
			||||||
            break
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    echo "$interface"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PROVISIONING_INTERFACE="$(get_provisioning_interface)"
 | 
					 | 
				
			||||||
export PROVISIONING_INTERFACE
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export LISTEN_ALL_INTERFACES="${LISTEN_ALL_INTERFACES:-true}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Wait for the interface or IP to be up, sets $IRONIC_IP
 | 
					 | 
				
			||||||
wait_for_interface_or_ip()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    # If $PROVISIONING_IP is specified, then we wait for that to become
 | 
					 | 
				
			||||||
    # available on an interface, otherwise we look at $PROVISIONING_INTERFACE
 | 
					 | 
				
			||||||
    # for an IP
 | 
					 | 
				
			||||||
    if [[ -n "${PROVISIONING_IP}" ]]; then
 | 
					 | 
				
			||||||
        local IFACE_OF_IP=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        until [[ -n "$IFACE_OF_IP" ]]; do
 | 
					 | 
				
			||||||
            echo "Waiting for ${PROVISIONING_IP} to be configured on an interface..."
 | 
					 | 
				
			||||||
            IFACE_OF_IP="$(get_interface_of_ip "${PROVISIONING_IP}")"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        echo "Found $PROVISIONING_IP on interface \"${IFACE_OF_IP}\"!"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        export PROVISIONING_INTERFACE="$IFACE_OF_IP"
 | 
					 | 
				
			||||||
	# If the IP contains a colon, then it's an IPv6 address
 | 
					 | 
				
			||||||
        if [[ "$PROVISIONING_IP" =~ .*:.* ]]; then
 | 
					 | 
				
			||||||
            export IRONIC_IPV6="$PROVISIONING_IP"
 | 
					 | 
				
			||||||
            export IRONIC_IP=""
 | 
					 | 
				
			||||||
        else
 | 
					 | 
				
			||||||
            export IRONIC_IP="$PROVISIONING_IP"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    elif [[ -n "${IRONIC_IP}" ]]; then
 | 
					 | 
				
			||||||
        if [[ "$IRONIC_IP" =~ .*:.* ]]; then
 | 
					 | 
				
			||||||
            export IRONIC_IPV6="$IRONIC_IP"
 | 
					 | 
				
			||||||
            export IRONIC_IP=""
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    elif [[ -n "${PROVISIONING_INTERFACE}" ]]; then
 | 
					 | 
				
			||||||
        until [[ -n "$IRONIC_IPV6" ]] || [[ -n "$IRONIC_IP" ]]; do
 | 
					 | 
				
			||||||
            echo "Waiting for ${PROVISIONING_INTERFACE} interface to be configured..."
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            IRONIC_IPV6="$(get_ip_of_interface "${PROVISIONING_INTERFACE}" 6)"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            IRONIC_IP="$(get_ip_of_interface "${PROVISIONING_INTERFACE}" 4)"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if [[ -n "$IRONIC_IPV6" ]]; then
 | 
					 | 
				
			||||||
            echo "Found $IRONIC_IPV6 on interface \"${PROVISIONING_INTERFACE}\"!"
 | 
					 | 
				
			||||||
	    export IRONIC_IPV6
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        if [[ -n "$IRONIC_IP" ]]; then
 | 
					 | 
				
			||||||
            echo "Found $IRONIC_IP on interface \"${PROVISIONING_INTERFACE}\"!"
 | 
					 | 
				
			||||||
	    export IRONIC_IP
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    elif [[ -n "$IRONIC_URL_HOSTNAME" ]]; then
 | 
					 | 
				
			||||||
        local IPV6_IFACE=""
 | 
					 | 
				
			||||||
        local IPV4_IFACE=""
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        # we should get at least one IP address
 | 
					 | 
				
			||||||
        until [[ -n "$IPV6_IFACE" ]] || [[ -n "$IPV4_IFACE" ]]; do
 | 
					 | 
				
			||||||
            local IPV6_RECORD=""
 | 
					 | 
				
			||||||
            local IPV4_RECORD=""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            IPV6_RECORD="$(get_ip_of_hostname "${IRONIC_URL_HOSTNAME}" 6)"
 | 
					 | 
				
			||||||
            IPV4_RECORD="$(get_ip_of_hostname "${IRONIC_URL_HOSTNAME}" 4)"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            # We couldn't get any IP
 | 
					 | 
				
			||||||
            if [[ -z "$IPV4_RECORD" ]] && [[ -z "$IPV6_RECORD" ]]; then
 | 
					 | 
				
			||||||
                echo "${FUNCNAME}: no valid IP found for hostname ${IRONIC_URL_HOSTNAME}" >&2
 | 
					 | 
				
			||||||
                return 1
 | 
					 | 
				
			||||||
            fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            echo "Waiting for ${IPV6_RECORD} to be configured on an interface"
 | 
					 | 
				
			||||||
            IPV6_IFACE="$(get_interface_of_ip "${IPV6_RECORD}" 6)"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            echo "Waiting for ${IPV4_RECORD} to be configured on an interface"
 | 
					 | 
				
			||||||
            IPV4_IFACE="$(get_interface_of_ip "${IPV4_RECORD}" 4)"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Add some debugging output
 | 
					 | 
				
			||||||
        if [[ -n "$IPV6_IFACE" ]]; then
 | 
					 | 
				
			||||||
            echo "Found $IPV6_RECORD on interface \"${IPV6_IFACE}\"!"
 | 
					 | 
				
			||||||
            export IRONIC_IPV6="$IPV6_RECORD"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        if [[ -n "$IPV4_IFACE" ]]; then
 | 
					 | 
				
			||||||
            echo "Found $IPV4_RECORD on interface \"${IPV4_IFACE}\"!"
 | 
					 | 
				
			||||||
            export IRONIC_IP="$IPV4_RECORD"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        # Make sure both IPs are asigned to the same interface
 | 
					 | 
				
			||||||
        if [[ -n "$IPV6_IFACE" ]] && [[ -n "$IPV4_IFACE" ]] && [[ "$IPV6_IFACE" != "$IPV4_IFACE" ]]; then
 | 
					 | 
				
			||||||
            echo "Warning, the IPv4 and IPv6 addresses from \"${HOSTNAME}\" are assigned to different " \
 | 
					 | 
				
			||||||
            "interfaces (\"${IPV6_IFACE}\" and \"${IPV4_IFACE}\")" >&2
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        echo "Cannot determine an interface or an IP for binding and creating URLs"
 | 
					 | 
				
			||||||
        return 1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Define the URLs based on the what we have found,
 | 
					 | 
				
			||||||
    # prioritize IPv6 for IRONIC_URL_HOST
 | 
					 | 
				
			||||||
    if [[ -n "$IRONIC_IP" ]]; then
 | 
					 | 
				
			||||||
        export ENABLE_IPV4=yes
 | 
					 | 
				
			||||||
        export IRONIC_URL_HOST="$IRONIC_IP"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
    if [[ -n "$IRONIC_IPV6" ]]; then
 | 
					 | 
				
			||||||
        export ENABLE_IPV6=yes
 | 
					 | 
				
			||||||
        export IRONIC_URL_HOST="[${IRONIC_IPV6}]" # The HTTP host needs surrounding with brackets
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Once determined if we have IPv4 and/or IPv6, override the hostname if provided
 | 
					 | 
				
			||||||
    if [[ -n "$IRONIC_URL_HOSTNAME" ]]; then
 | 
					 | 
				
			||||||
        IRONIC_URL_HOST=$IRONIC_URL_HOSTNAME
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Avoid having to construct full URL multiple times while allowing
 | 
					 | 
				
			||||||
    # the override of IRONIC_HTTP_URL for environments in which IRONIC_IP
 | 
					 | 
				
			||||||
    # is unreachable from hosts being provisioned.
 | 
					 | 
				
			||||||
    export IRONIC_HTTP_URL="${IRONIC_HTTP_URL:-http://${IRONIC_URL_HOST}:${HTTP_PORT}}"
 | 
					 | 
				
			||||||
    export IRONIC_TFTP_URL="${IRONIC_TFTP_URL:-tftp://${IRONIC_URL_HOST}}"
 | 
					 | 
				
			||||||
    export IRONIC_BASE_URL=${IRONIC_BASE_URL:-"${IRONIC_SCHEME}://${IRONIC_URL_HOST}:${IRONIC_ACCESS_PORT}"}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
render_j2_config()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    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()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    if [[ "${IRONIC_USE_MARIADB}" == "true" ]]; then
 | 
					 | 
				
			||||||
        # It's possible for the dbsync to fail if mariadb is not up yet, so
 | 
					 | 
				
			||||||
        # retry until success
 | 
					 | 
				
			||||||
        until ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" upgrade; do
 | 
					 | 
				
			||||||
            echo "WARNING: ironic-dbsync failed, retrying"
 | 
					 | 
				
			||||||
            sleep 1
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        # SQLite does not support some statements. Fortunately, we can just
 | 
					 | 
				
			||||||
        # create the schema in one go if not already created, instead of going
 | 
					 | 
				
			||||||
        # through an upgrade
 | 
					 | 
				
			||||||
        cp "/var/lib/ironic/ironic.sqlite" "${IRONIC_DB_DIR}/ironic.sqlite"
 | 
					 | 
				
			||||||
        DB_VERSION="$(ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" version)"
 | 
					 | 
				
			||||||
        if [[ "${DB_VERSION}" == "None" ]]; then
 | 
					 | 
				
			||||||
            ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" create_schema
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Use the special value "unix" for unix sockets
 | 
					 | 
				
			||||||
export IRONIC_PRIVATE_PORT=${IRONIC_PRIVATE_PORT:-unix}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_ACCESS_PORT=${IRONIC_ACCESS_PORT:-6385}
 | 
					 | 
				
			||||||
export IRONIC_LISTEN_PORT=${IRONIC_LISTEN_PORT:-$IRONIC_ACCESS_PORT}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export IRONIC_ENABLE_DISCOVERY=${IRONIC_ENABLE_DISCOVERY:-${IRONIC_INSPECTOR_ENABLE_DISCOVERY:-false}}
 | 
					 | 
				
			||||||
@@ -1,23 +0,0 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -eu -o pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/ironic-common.sh
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/auth-common.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
PROBE_CURL_ARGS=
 | 
					 | 
				
			||||||
if [[ "${IRONIC_REVERSE_PROXY_SETUP}" == "true" ]]; then
 | 
					 | 
				
			||||||
    if [[ "${IRONIC_PRIVATE_PORT}" == "unix" ]]; then
 | 
					 | 
				
			||||||
        PROBE_URL="http://127.0.0.1:6385"
 | 
					 | 
				
			||||||
        PROBE_CURL_ARGS="--unix-socket /shared/ironic.sock"
 | 
					 | 
				
			||||||
    else
 | 
					 | 
				
			||||||
        PROBE_URL="http://127.0.0.1:${IRONIC_PRIVATE_PORT}"
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
else
 | 
					 | 
				
			||||||
        PROBE_URL="${IRONIC_BASE_URL}"
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC2086
 | 
					 | 
				
			||||||
curl -sSf ${PROBE_CURL_ARGS} "${PROBE_URL}"
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/configure-ironic.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# NOTE(dtantsur): no retries here: this script is supposed to be run as a Job
 | 
					 | 
				
			||||||
# that is retried on failure.
 | 
					 | 
				
			||||||
exec ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" upgrade
 | 
					 | 
				
			||||||
@@ -1,18 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/configure-ironic.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ramdisk logs
 | 
					 | 
				
			||||||
mkdir -p /shared/log/ironic/deploy
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Allows skipping dbsync if it's done by an external job
 | 
					 | 
				
			||||||
if [[ "${IRONIC_SKIP_DBSYNC:-false}" != true ]]; then
 | 
					 | 
				
			||||||
    run_ironic_dbsync
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_restart_on_certificate_update "${IRONIC_TLS_SETUP}" ironic "${IRONIC_CERT_FILE}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_ironic_auth
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
exec /usr/bin/ironic --config-dir "${IRONIC_CONF_DIR}"
 | 
					 | 
				
			||||||
@@ -1,17 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# Ramdisk logs path
 | 
					 | 
				
			||||||
LOG_DIR="/shared/log/ironic/deploy"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
mkdir -p "${LOG_DIR}"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# 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
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -euxo pipefail
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# shellcheck disable=SC1091
 | 
					 | 
				
			||||||
. /bin/configure-ironic.sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# NOTE(dtantsur): no retries here: this script is supposed to be run as a Job
 | 
					 | 
				
			||||||
# that is retried on failure.
 | 
					 | 
				
			||||||
exec ironic-dbsync --config-file "${IRONIC_CONF_DIR}/ironic.conf" online_data_migrations
 | 
					 | 
				
			||||||
@@ -95,21 +95,3 @@ if [[ -f "$MARIADB_CACERT_FILE" ]]; then
 | 
				
			|||||||
else
 | 
					else
 | 
				
			||||||
    export MARIADB_TLS_ENABLED="false"
 | 
					    export MARIADB_TLS_ENABLED="false"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					 | 
				
			||||||
configure_restart_on_certificate_update()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    local enabled="$1"
 | 
					 | 
				
			||||||
    local service="$2"
 | 
					 | 
				
			||||||
    local cert_file="$3"
 | 
					 | 
				
			||||||
    local signal="TERM"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [[ "${enabled}" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
 | 
					 | 
				
			||||||
        if [[ "${service}" == httpd ]]; then
 | 
					 | 
				
			||||||
            signal="WINCH"
 | 
					 | 
				
			||||||
        fi
 | 
					 | 
				
			||||||
        python3 -m pyinotify --raw-format -e IN_DELETE_SELF -v "${cert_file}" |
 | 
					 | 
				
			||||||
            while read -r; do
 | 
					 | 
				
			||||||
                pkill "-${signal}" "${service}"
 | 
					 | 
				
			||||||
            done &
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.10
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,11 +18,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="3.0.10"
 | 
					LABEL org.opencontainers.image.version="3.0.8"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.10
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.10-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8-%RELEASE%
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,11 +18,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="3.0.10"
 | 
					LABEL org.opencontainers.image.version="3.0.8"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.10
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.10-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8-%RELEASE%
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -18,11 +18,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
					LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="3.0.10"
 | 
					LABEL org.opencontainers.image.version="3.0.8"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,12 +29,13 @@ if [ -z "${IPA_BASEURI}" ]; then
 | 
				
			|||||||
  # SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages
 | 
					  # SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages
 | 
				
			||||||
  mkdir -p /shared/html/images
 | 
					  mkdir -p /shared/html/images
 | 
				
			||||||
  if [ -f ${IMAGES_BASE_PATH}/initrd-x86_64.zst ]; then
 | 
					  if [ -f ${IMAGES_BASE_PATH}/initrd-x86_64.zst ]; then
 | 
				
			||||||
    cp ${IMAGES_BASE_PATH}/initrd-x86_64.zst /shared/html/images/ironic-python-agent_x86_64.initramfs
 | 
					    cp ${IMAGES_BASE_PATH}/initrd-x86_64.zst /shared/html/images/ironic-python-agent-x86_64.initramfs
 | 
				
			||||||
    cp ${IMAGES_BASE_PATH}/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent_x86_64.kernel
 | 
					    cp ${IMAGES_BASE_PATH}/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent-x86_64.kernel
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					  # Use arm64 as destination for iPXE compatibility
 | 
				
			||||||
  if [ -f ${IMAGES_BASE_PATH}/initrd-aarch64.zst ]; then
 | 
					  if [ -f ${IMAGES_BASE_PATH}/initrd-aarch64.zst ]; then
 | 
				
			||||||
    cp ${IMAGES_BASE_PATH}/initrd-aarch64.zst /shared/html/images/ironic-python-agent_aarch64.initramfs
 | 
					    cp ${IMAGES_BASE_PATH}/initrd-aarch64.zst /shared/html/images/ironic-python-agent-arm64.initramfs
 | 
				
			||||||
    cp ${IMAGES_BASE_PATH}/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent_aarch64.kernel
 | 
					    cp ${IMAGES_BASE_PATH}/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent-arm64.kernel
 | 
				
			||||||
  fi
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  cp /tmp/images.sha256 /shared/images.sha256
 | 
					  cp /tmp/images.sha256 /shared/images.sha256
 | 
				
			||||||
@@ -86,8 +87,8 @@ else
 | 
				
			|||||||
      chmod 755 "$TMPDIR"
 | 
					      chmod 755 "$TMPDIR"
 | 
				
			||||||
      mv "$TMPDIR" "$FILENAME-$ETAG"
 | 
					      mv "$TMPDIR" "$FILENAME-$ETAG"
 | 
				
			||||||
      ln -sf "$FILENAME-$ETAG/$FFILENAME.headers" "$FFILENAME.headers"
 | 
					      ln -sf "$FILENAME-$ETAG/$FFILENAME.headers" "$FFILENAME.headers"
 | 
				
			||||||
      ln -sf "$FILENAME-$ETAG/$FILENAME.initramfs" "${FILENAME}_${ARCH,,}.initramfs"
 | 
					      ln -sf "$FILENAME-$ETAG/$FILENAME.initramfs" "$FILENAME-${ARCH,,}.initramfs"
 | 
				
			||||||
      ln -sf "$FILENAME-$ETAG/$FILENAME.kernel" "${FILENAME}_${ARCH,,}.kernel"
 | 
					      ln -sf "$FILENAME-$ETAG/$FILENAME.kernel" "$FILENAME-${ARCH,,}.kernel"
 | 
				
			||||||
      
 | 
					      
 | 
				
			||||||
      IMAGE_CHANGED=1
 | 
					      IMAGE_CHANGED=1
 | 
				
			||||||
  else
 | 
					  else
 | 
				
			||||||
@@ -99,7 +100,7 @@ if [ "${CERTS_CHANGED:-0}" = "1" ] || [ "${IMAGE_CHANGED:-0}" = "1" ]; then
 | 
				
			|||||||
  mkdir -p /tmp/ca/tmp-initrd && cd /tmp/ca/tmp-initrd
 | 
					  mkdir -p /tmp/ca/tmp-initrd && cd /tmp/ca/tmp-initrd
 | 
				
			||||||
  mkdir -p etc/ironic-python-agent.d/ca-certs
 | 
					  mkdir -p etc/ironic-python-agent.d/ca-certs
 | 
				
			||||||
  cp /tmp/ironic-certificates/* etc/ironic-python-agent.d/ca-certs/
 | 
					  cp /tmp/ironic-certificates/* etc/ironic-python-agent.d/ca-certs/
 | 
				
			||||||
  for initramfs in /shared/html/images/ironic-python-agent_*.initramfs; do
 | 
					  for initramfs in /shared/html/images/ironic-python-agent-*.initramfs; do
 | 
				
			||||||
    find . | cpio -o -H newc --reproducible | zstd -c >> "${initramfs}"
 | 
					    find . | cpio -o -H newc --reproducible | zstd -c >> "${initramfs}"
 | 
				
			||||||
  done
 | 
					  done
 | 
				
			||||||
  cp /tmp/certificates.sha256 /shared/certificates.sha256
 | 
					  cp /tmp/certificates.sha256 /shared/certificates.sha256
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           ironic-ipa-ramdisk
 | 
					Name:           ironic-ipa-ramdisk
 | 
				
			||||||
Version:        3.0.8
 | 
					Version:        3.0.7
 | 
				
			||||||
Release:        0
 | 
					Release:        0
 | 
				
			||||||
Summary:        Kernel and ramdisk image for OpenStack Ironic
 | 
					Summary:        Kernel and ramdisk image for OpenStack Ironic
 | 
				
			||||||
License:        SUSE-EULA
 | 
					License:        SUSE-EULA
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,8 @@
 | 
				
			|||||||
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.29.0-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.12.0-%RELEASE%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.29.0
 | 
					#!BuildTag: %%IMG_PREFIX%%kiwi-builder:10.2.12.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Base image version, should match the tag above
 | 
					# 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}
 | 
					FROM registry.suse.com/bci/kiwi:${KIWIVERSION}
 | 
				
			||||||
ARG KIWIVERSION
 | 
					ARG KIWIVERSION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,13 +30,16 @@
 | 
				
			|||||||
        <profile name="x86-self_install" description="Raw disk for x86_64 - uEFI" arch="x86_64">
 | 
					        <profile name="x86-self_install" description="Raw disk for x86_64 - uEFI" arch="x86_64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="aarch64-self_install" description="Raw disk for aarch64" arch="aarch64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </profile>
 | 
				
			||||||
        <profile name="aarch64-rt" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
 | 
					        <profile name="aarch64-rt" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </profile>
 | 
				
			||||||
        <profile name="aarch64-rt-self_install" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
 | 
					        <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">
 | 
					        <profile name="rpi" description="Raw disk for Raspberry Pi" arch="aarch64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="x86-qcow" description="qcow2 for x86_64 - uEFI" arch="x86_64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </profile>
 | 
				
			||||||
@@ -96,15 +90,6 @@
 | 
				
			|||||||
        <profile name="ppc64le-4096ss-self_install" description="Raw disk for PPc64 - 4096 sector size" arch="ppc64le">
 | 
					        <profile name="ppc64le-4096ss-self_install" description="Raw disk for PPc64 - 4096 sector size" arch="ppc64le">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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) -->
 | 
					        <!-- Images (flavor + platform) -->
 | 
				
			||||||
        <profile name="Default" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="x86_64">
 | 
					        <profile name="Default" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="x86_64">
 | 
				
			||||||
            <requires profile="full"/>
 | 
					            <requires profile="full"/>
 | 
				
			||||||
@@ -169,10 +154,18 @@
 | 
				
			|||||||
            <requires profile="full"/>
 | 
					            <requires profile="full"/>
 | 
				
			||||||
            <requires profile="aarch64"/>
 | 
					            <requires profile="aarch64"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="Base" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
 | 
				
			||||||
            <requires profile="container-host"/>
 | 
					            <requires profile="container-host"/>
 | 
				
			||||||
            <requires profile="aarch64"/>
 | 
					            <requires profile="aarch64"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="Base-RT" description="SL Micro with Podman as raw image with uEFI boot" arch="x86_64">
 | 
				
			||||||
            <requires profile="container-host"/>
 | 
					            <requires profile="container-host"/>
 | 
				
			||||||
            <requires profile="x86-rt"/>
 | 
					            <requires profile="x86-rt"/>
 | 
				
			||||||
@@ -186,6 +179,10 @@
 | 
				
			|||||||
            <requires profile="container-host"/>
 | 
					            <requires profile="container-host"/>
 | 
				
			||||||
            <requires profile="aarch64-rt"/>
 | 
					            <requires profile="aarch64-rt"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <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="container-host"/>
 | 
				
			||||||
            <requires profile="aarch64-rt-self_install"/>
 | 
					            <requires profile="aarch64-rt-self_install"/>
 | 
				
			||||||
@@ -280,42 +277,10 @@
 | 
				
			|||||||
            <requires profile="ppc64le-4096ss-self_install"/>
 | 
					            <requires profile="ppc64le-4096ss-self_install"/>
 | 
				
			||||||
            <requires profile="self_install"/>
 | 
					            <requires profile="self_install"/>
 | 
				
			||||||
        </profile>
 | 
					        </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>
 | 
					    </profiles>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="x86-encrypted,x86-rt-encrypted">
 | 
					    <preferences profiles="x86-encrypted,x86-rt-encrypted">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -326,8 +291,7 @@
 | 
				
			|||||||
            initrd_system="dracut"
 | 
					            initrd_system="dracut"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            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"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -359,7 +323,7 @@
 | 
				
			|||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="x86,x86-rt">
 | 
					    <preferences profiles="x86,x86-rt">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -370,8 +334,7 @@
 | 
				
			|||||||
            initrd_system="dracut"
 | 
					            initrd_system="dracut"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -396,7 +359,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="x86-self_install,x86-rt-self_install">
 | 
					    <preferences profiles="x86-self_install,x86-rt-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -411,8 +374,7 @@
 | 
				
			|||||||
            installboot="install"
 | 
					            installboot="install"
 | 
				
			||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -435,8 +397,9 @@
 | 
				
			|||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </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>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -451,96 +414,11 @@
 | 
				
			|||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
            fsmountoptions="noatime"
 | 
					            fsmountoptions="noatime"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            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"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
            btrfs_root_is_snapshot="true"
 | 
					            btrfs_root_is_snapshot="true"
 | 
				
			||||||
 | 
					            efipartsize="128"
 | 
				
			||||||
            editbootinstall="editbootinstall_rpi.sh"
 | 
					            editbootinstall="editbootinstall_rpi.sh"
 | 
				
			||||||
            btrfs_root_is_readonly_snapshot="true"
 | 
					            btrfs_root_is_readonly_snapshot="true"
 | 
				
			||||||
            btrfs_quota_groups="false"
 | 
					            btrfs_quota_groups="false"
 | 
				
			||||||
@@ -560,8 +438,9 @@
 | 
				
			|||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </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>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -571,20 +450,19 @@
 | 
				
			|||||||
            image="oem"
 | 
					            image="oem"
 | 
				
			||||||
            initrd_system="dracut"
 | 
					            initrd_system="dracut"
 | 
				
			||||||
            installiso="true"
 | 
					            installiso="true"
 | 
				
			||||||
            installpxe="true"
 | 
					 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            installboot="install"
 | 
					            installboot="install"
 | 
				
			||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
 | 
					            fsmountoptions="noatime"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
            btrfs_root_is_snapshot="true"
 | 
					            btrfs_root_is_snapshot="true"
 | 
				
			||||||
 | 
					            efipartsize="128"
 | 
				
			||||||
            btrfs_root_is_readonly_snapshot="true"
 | 
					            btrfs_root_is_readonly_snapshot="true"
 | 
				
			||||||
            btrfs_quota_groups="true"
 | 
					            btrfs_quota_groups="false"
 | 
				
			||||||
            disk_start_sector="8192"
 | 
					            disk_start_sector="4096"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
            <bootloader name="grub2" console="gfxterm" timeout="3" />
 | 
					            <bootloader name="grub2" console="gfxterm" timeout="3" />
 | 
				
			||||||
            <systemdisk>
 | 
					            <systemdisk>
 | 
				
			||||||
@@ -600,8 +478,8 @@
 | 
				
			|||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="rpi-self_install">
 | 
					    <preferences profiles="aarch64-self_install,aarch64-rt-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -616,14 +494,13 @@
 | 
				
			|||||||
            installboot="install"
 | 
					            installboot="install"
 | 
				
			||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            efipartsize="128"
 | 
				
			||||||
            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
            btrfs_root_is_snapshot="true"
 | 
					            btrfs_root_is_snapshot="true"
 | 
				
			||||||
            btrfs_root_is_readonly_snapshot="true"
 | 
					            btrfs_root_is_readonly_snapshot="true"
 | 
				
			||||||
            editbootinstall="editbootinstall_rpi.sh"
 | 
					 | 
				
			||||||
            btrfs_quota_groups="true"
 | 
					            btrfs_quota_groups="true"
 | 
				
			||||||
            disk_start_sector="4096"
 | 
					            disk_start_sector="4096"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
@@ -643,7 +520,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-kvm">
 | 
					    <preferences profiles="s390-kvm">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -681,7 +558,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-dasd">
 | 
					    <preferences profiles="s390-dasd">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -719,7 +596,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-fba">
 | 
					    <preferences profiles="s390-fba">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -754,7 +631,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-fcp">
 | 
					    <preferences profiles="s390-fcp">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -793,7 +670,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="x86-vmware">
 | 
					    <preferences profiles="x86-vmware">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -804,7 +681,6 @@
 | 
				
			|||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            format="vmdk"
 | 
					            format="vmdk"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -825,11 +701,11 @@
 | 
				
			|||||||
                <volume name="var" copy_on_write="false"/>
 | 
					                <volume name="var" copy_on_write="false"/>
 | 
				
			||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
            <size unit="G">24</size>
 | 
					            <size unit="G">24</size>
 | 
				
			||||||
            <machine memory="1024" HWversion="17" guestOS="suse-64"/>
 | 
					            <machine memory="1024" HWversion="10" guestOS="suse-64"/>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="x86-qcow">
 | 
					    <preferences profiles="x86-qcow">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -840,8 +716,7 @@
 | 
				
			|||||||
            format="qcow2"
 | 
					            format="qcow2"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=qemu"
 | 
				
			||||||
            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=qemu"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -867,7 +742,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="aarch64-qcow">
 | 
					    <preferences profiles="aarch64-qcow">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -878,8 +753,8 @@
 | 
				
			|||||||
            format="qcow2"
 | 
					            format="qcow2"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            efipartsize="128"
 | 
				
			||||||
            kernelcmdline="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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -902,7 +777,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="ppc64le-512ss">
 | 
					    <preferences profiles="ppc64le-512ss">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -913,7 +788,7 @@
 | 
				
			|||||||
            image="oem"
 | 
					            image="oem"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -935,7 +810,7 @@
 | 
				
			|||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="ppc64le-4096ss">
 | 
					    <preferences profiles="ppc64le-4096ss">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -949,7 +824,7 @@
 | 
				
			|||||||
            target_blocksize="4096"
 | 
					            target_blocksize="4096"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -972,7 +847,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="ppc64le-512ss-self_install">
 | 
					    <preferences profiles="ppc64le-512ss-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -985,7 +860,7 @@
 | 
				
			|||||||
            installpxe="true"
 | 
					            installpxe="true"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -1012,7 +887,7 @@
 | 
				
			|||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="ppc64le-4096ss-self_install">
 | 
					    <preferences profiles="ppc64le-4096ss-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -1028,7 +903,7 @@
 | 
				
			|||||||
            target_blocksize="4096"
 | 
					            target_blocksize="4096"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -1061,17 +936,20 @@
 | 
				
			|||||||
    </repository>
 | 
					    </repository>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image" profiles="full">
 | 
					    <packages type="image" profiles="full">
 | 
				
			||||||
        <namedCollection name="transactional_base"/>
 | 
					        <namedCollection name="base_transactional"/>
 | 
				
			||||||
        <package name="patterns-base-transactional_base"/>
 | 
					        <package name="patterns-base-transactional"/>
 | 
				
			||||||
 | 
					        <namedCollection name="salt_minion"/>
 | 
				
			||||||
 | 
						<package name="patterns-base-salt_minion"/>
 | 
				
			||||||
        <namedCollection name="kvm_host"/>
 | 
					        <namedCollection name="kvm_host"/>
 | 
				
			||||||
	<package name="patterns-micro-kvm_host"/>
 | 
						<package name="patterns-base-kvm_host"/>
 | 
				
			||||||
	<package name="lzop"/>
 | 
						<package name="lzop"/>
 | 
				
			||||||
        <namedCollection name="container_runtime_podman"/>
 | 
					        <namedCollection name="container_runtime_podman"/>
 | 
				
			||||||
        <package name="patterns-container-runtime_podman"/>
 | 
					        <package name="patterns-container-runtime_podman"/>
 | 
				
			||||||
        <namedCollection name="cockpit"/>
 | 
					        <namedCollection name="cockpit"/>
 | 
				
			||||||
        <package name="patterns-cockpit"/>
 | 
					        <package name="patterns-base-cockpit"/>
 | 
				
			||||||
        <namedCollection name="selinux"/>
 | 
					        <namedCollection name="selinux"/>
 | 
				
			||||||
        <package name="patterns-base-selinux"/>
 | 
					        <package name="patterns-base-selinux"/>
 | 
				
			||||||
 | 
					        <package name="policycoreutils-python-utils"/>
 | 
				
			||||||
        <package name="suseconnect-ng"/>
 | 
					        <package name="suseconnect-ng"/>
 | 
				
			||||||
        <package name="SL-Micro-release"/>
 | 
					        <package name="SL-Micro-release"/>
 | 
				
			||||||
        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
					        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
				
			||||||
@@ -1081,7 +959,7 @@
 | 
				
			|||||||
	<package name="libpwquality-tools"/>
 | 
						<package name="libpwquality-tools"/>
 | 
				
			||||||
    </packages>
 | 
					    </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 -->
 | 
					        <!-- full disk encryption stuff -->
 | 
				
			||||||
        <package name="device-mapper"/>
 | 
					        <package name="device-mapper"/>
 | 
				
			||||||
        <package name="cryptsetup"/>
 | 
					        <package name="cryptsetup"/>
 | 
				
			||||||
@@ -1094,12 +972,13 @@
 | 
				
			|||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image" profiles="container-host">
 | 
					    <packages type="image" profiles="container-host">
 | 
				
			||||||
        <namedCollection name="transactional_base"/>
 | 
					        <namedCollection name="base_transactional"/>
 | 
				
			||||||
        <package name="patterns-base-transactional_base"/>
 | 
					        <package name="patterns-base-transactional"/>
 | 
				
			||||||
        <namedCollection name="container_runtime_podman"/>
 | 
					        <namedCollection name="container_runtime_podman"/>
 | 
				
			||||||
        <package name="patterns-container-runtime_podman"/>
 | 
					        <package name="patterns-container-runtime_podman"/>
 | 
				
			||||||
        <namedCollection name="selinux"/>
 | 
					        <namedCollection name="selinux"/>
 | 
				
			||||||
        <package name="patterns-base-selinux"/>
 | 
					        <package name="patterns-base-selinux"/>
 | 
				
			||||||
 | 
					        <package name="policycoreutils-python-utils"/>
 | 
				
			||||||
        <package name="suseconnect-ng"/>
 | 
					        <package name="suseconnect-ng"/>
 | 
				
			||||||
        <package name="SL-Micro-release"/>
 | 
					        <package name="SL-Micro-release"/>
 | 
				
			||||||
        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
					        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
				
			||||||
@@ -1123,16 +1002,16 @@
 | 
				
			|||||||
	<package name="jeos-firstboot"/>
 | 
						<package name="jeos-firstboot"/>
 | 
				
			||||||
    </packages>
 | 
					    </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"/>
 | 
				
			||||||
        <package name="cloud-init-config-suse"/>
 | 
					        <package name="cloud-init-config-suse"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image">
 | 
					    <packages type="image">
 | 
				
			||||||
        <namedCollection name="transactional_base"/>
 | 
					        <namedCollection name="base_transactional"/>
 | 
				
			||||||
        <package name="patterns-base-transactional_base"/>
 | 
					        <package name="patterns-base-transactional"/>
 | 
				
			||||||
        <namedCollection name="hardware"/>
 | 
					        <namedCollection name="hardware"/>
 | 
				
			||||||
        <package name="patterns-micro-hardware"/>
 | 
					        <package name="patterns-base-hardware"/>
 | 
				
			||||||
        <package name="grub2"/>
 | 
					        <package name="grub2"/>
 | 
				
			||||||
        <package name="glibc-locale-base"/>
 | 
					        <package name="glibc-locale-base"/>
 | 
				
			||||||
        <package name="ca-certificates"/>
 | 
					        <package name="ca-certificates"/>
 | 
				
			||||||
@@ -1154,7 +1033,6 @@
 | 
				
			|||||||
	<!-- 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="live-add-yast-repos"/> -->
 | 
				
			||||||
	<package name="parted"/> <!-- seems missing to deploy the image -->
 | 
						<package name="parted"/> <!-- seems missing to deploy the image -->
 | 
				
			||||||
	<package name="iptables"/> <!-- needed by RKE2 -->
 | 
					 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image" profiles="bootloader">
 | 
					    <packages type="image" profiles="bootloader">
 | 
				
			||||||
@@ -1171,15 +1049,11 @@
 | 
				
			|||||||
	    <package name="kpartx" arch="s390x"/>--> <!-- previous releases picked it always, now kiwi picks partx instead -->
 | 
						    <package name="kpartx" arch="s390x"/>--> <!-- previous releases picked it always, now kiwi picks partx instead -->
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
    <!-- rpi kernel-default-base does not provide all necessary drivers -->
 | 
					    <!-- 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-default"/>
 | 
				
			||||||
        <package name="kernel-firmware-all"/>
 | 
					        <package name="kernel-firmware-all"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
    <packages type="image" profiles="aarch64-64kb,aarch64-64kb-encrypted,aarch64-64kb-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-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">
 | 
					 | 
				
			||||||
        <package name="kernel-rt"/>
 | 
					        <package name="kernel-rt"/>
 | 
				
			||||||
        <package name="kernel-firmware-all"/>
 | 
					        <package name="kernel-firmware-all"/>
 | 
				
			||||||
	<!-- FIXME intentionally removed from ALP code stream
 | 
						<!-- FIXME intentionally removed from ALP code stream
 | 
				
			||||||
@@ -1194,18 +1068,17 @@
 | 
				
			|||||||
    <packages type="image" profiles="s390-fcp">
 | 
					    <packages type="image" profiles="s390-fcp">
 | 
				
			||||||
        <package name="multipath-tools"/>
 | 
					        <package name="multipath-tools"/>
 | 
				
			||||||
    </packages>
 | 
					    </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,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">
 | 
				
			||||||
    <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">
 | 
					 | 
				
			||||||
        <package name="dracut-kiwi-oem-repart"/>
 | 
					        <package name="dracut-kiwi-oem-repart"/>
 | 
				
			||||||
        <package name="dracut-kiwi-oem-dump"/>
 | 
					        <package name="dracut-kiwi-oem-dump"/>
 | 
				
			||||||
    </packages>
 | 
					    </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" arch="aarch64"/>
 | 
				
			||||||
        <package name="raspberrypi-firmware-config" arch="aarch64"/>
 | 
					        <package name="raspberrypi-firmware-config" arch="aarch64"/>
 | 
				
			||||||
        <package name="raspberrypi-firmware-dt" arch="aarch64"/>
 | 
					        <package name="raspberrypi-firmware-dt" arch="aarch64"/>
 | 
				
			||||||
        <package name="u-boot-rpiarm64" arch="aarch64"/>
 | 
					        <package name="u-boot-rpiarm64" arch="aarch64"/>
 | 
				
			||||||
    </packages>
 | 
					    </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="dracut-kiwi-oem-repart"/>
 | 
				
			||||||
        <package name="bcm43xx-firmware"/>
 | 
					        <package name="bcm43xx-firmware"/>
 | 
				
			||||||
        <package name="wireless-regdb"/>
 | 
					        <package name="wireless-regdb"/>
 | 
				
			||||||
@@ -1231,12 +1104,12 @@
 | 
				
			|||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- jsc#PED-8599 -->
 | 
					    <!-- 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"/>
 | 
					        <package name="usbguard"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- jsc#PED-8788 -->
 | 
					    <!-- 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"/>
 | 
					        <package name="stalld"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
</image>
 | 
					</image>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,13 +30,16 @@
 | 
				
			|||||||
        <profile name="x86-self_install" description="Raw disk for x86_64 - uEFI" arch="x86_64">
 | 
					        <profile name="x86-self_install" description="Raw disk for x86_64 - uEFI" arch="x86_64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="aarch64-self_install" description="Raw disk for aarch64" arch="aarch64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </profile>
 | 
				
			||||||
        <profile name="aarch64-rt" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
 | 
					        <profile name="aarch64-rt" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </profile>
 | 
				
			||||||
        <profile name="aarch64-rt-self_install" description="Raw disk for aarch64 with RT kernel" arch="aarch64">
 | 
					        <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">
 | 
					        <profile name="rpi" description="Raw disk for Raspberry Pi" arch="aarch64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="x86-qcow" description="qcow2 for x86_64 - uEFI" arch="x86_64">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </profile>
 | 
				
			||||||
@@ -96,15 +90,6 @@
 | 
				
			|||||||
        <profile name="ppc64le-4096ss-self_install" description="Raw disk for PPc64 - 4096 sector size" arch="ppc64le">
 | 
					        <profile name="ppc64le-4096ss-self_install" description="Raw disk for PPc64 - 4096 sector size" arch="ppc64le">
 | 
				
			||||||
            <requires profile="bootloader"/>
 | 
					            <requires profile="bootloader"/>
 | 
				
			||||||
        </profile>
 | 
					        </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) -->
 | 
					        <!-- Images (flavor + platform) -->
 | 
				
			||||||
        <profile name="Default" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="x86_64">
 | 
					        <profile name="Default" description="SL Micro with Podman and KVM as raw image with uEFI boot" arch="x86_64">
 | 
				
			||||||
            <requires profile="full"/>
 | 
					            <requires profile="full"/>
 | 
				
			||||||
@@ -169,10 +154,18 @@
 | 
				
			|||||||
            <requires profile="full"/>
 | 
					            <requires profile="full"/>
 | 
				
			||||||
            <requires profile="aarch64"/>
 | 
					            <requires profile="aarch64"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="Base" description="SL Micro with Podman as raw image with uEFI boot" arch="aarch64">
 | 
				
			||||||
            <requires profile="container-host"/>
 | 
					            <requires profile="container-host"/>
 | 
				
			||||||
            <requires profile="aarch64"/>
 | 
					            <requires profile="aarch64"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <profile name="Base-RT" description="SL Micro with Podman as raw image with uEFI boot" arch="x86_64">
 | 
				
			||||||
            <requires profile="container-host"/>
 | 
					            <requires profile="container-host"/>
 | 
				
			||||||
            <requires profile="x86-rt"/>
 | 
					            <requires profile="x86-rt"/>
 | 
				
			||||||
@@ -186,6 +179,10 @@
 | 
				
			|||||||
            <requires profile="container-host"/>
 | 
					            <requires profile="container-host"/>
 | 
				
			||||||
            <requires profile="aarch64-rt"/>
 | 
					            <requires profile="aarch64-rt"/>
 | 
				
			||||||
        </profile>
 | 
					        </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">
 | 
					        <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="container-host"/>
 | 
				
			||||||
            <requires profile="aarch64-rt-self_install"/>
 | 
					            <requires profile="aarch64-rt-self_install"/>
 | 
				
			||||||
@@ -280,42 +277,10 @@
 | 
				
			|||||||
            <requires profile="ppc64le-4096ss-self_install"/>
 | 
					            <requires profile="ppc64le-4096ss-self_install"/>
 | 
				
			||||||
            <requires profile="self_install"/>
 | 
					            <requires profile="self_install"/>
 | 
				
			||||||
        </profile>
 | 
					        </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>
 | 
					    </profiles>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="x86-encrypted,x86-rt-encrypted">
 | 
					    <preferences profiles="x86-encrypted,x86-rt-encrypted">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -326,8 +291,7 @@
 | 
				
			|||||||
            initrd_system="dracut"
 | 
					            initrd_system="dracut"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            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"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -361,7 +325,7 @@
 | 
				
			|||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="x86,x86-rt">
 | 
					    <preferences profiles="x86,x86-rt">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -372,8 +336,7 @@
 | 
				
			|||||||
            initrd_system="dracut"
 | 
					            initrd_system="dracut"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -400,7 +363,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="x86-self_install,x86-rt-self_install">
 | 
					    <preferences profiles="x86-self_install,x86-rt-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -415,8 +378,7 @@
 | 
				
			|||||||
            installboot="install"
 | 
					            installboot="install"
 | 
				
			||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -441,8 +403,9 @@
 | 
				
			|||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </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>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -457,98 +420,11 @@
 | 
				
			|||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
            fsmountoptions="noatime"
 | 
					            fsmountoptions="noatime"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            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>
 | 
					 | 
				
			||||||
        <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>
 | 
					 | 
				
			||||||
        <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"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
            btrfs_root_is_snapshot="true"
 | 
					            btrfs_root_is_snapshot="true"
 | 
				
			||||||
 | 
					            efipartsize="128"
 | 
				
			||||||
            editbootinstall="editbootinstall_rpi.sh"
 | 
					            editbootinstall="editbootinstall_rpi.sh"
 | 
				
			||||||
            btrfs_root_is_readonly_snapshot="true"
 | 
					            btrfs_root_is_readonly_snapshot="true"
 | 
				
			||||||
            btrfs_quota_groups="false"
 | 
					            btrfs_quota_groups="false"
 | 
				
			||||||
@@ -568,8 +444,9 @@
 | 
				
			|||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </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>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -579,21 +456,19 @@
 | 
				
			|||||||
            image="oem"
 | 
					            image="oem"
 | 
				
			||||||
            initrd_system="dracut"
 | 
					            initrd_system="dracut"
 | 
				
			||||||
            installiso="true"
 | 
					            installiso="true"
 | 
				
			||||||
            installpxe="true"
 | 
					 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            installboot="install"
 | 
					            installboot="install"
 | 
				
			||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
 | 
					            fsmountoptions="noatime"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0"
 | 
				
			||||||
            kernelcmdline="security=selinux selinux=1 quiet systemd.show_status=1"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
            btrfs_root_is_snapshot="true"
 | 
					            btrfs_root_is_snapshot="true"
 | 
				
			||||||
 | 
					            efipartsize="128"
 | 
				
			||||||
            btrfs_root_is_readonly_snapshot="true"
 | 
					            btrfs_root_is_readonly_snapshot="true"
 | 
				
			||||||
            btrfs_quota_groups="true"
 | 
					            btrfs_quota_groups="false"
 | 
				
			||||||
            disk_start_sector="8192"
 | 
					            disk_start_sector="4096"
 | 
				
			||||||
            target_blocksize="4096"
 | 
					 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
            <bootloader name="grub2" console="gfxterm" timeout="3" />
 | 
					            <bootloader name="grub2" console="gfxterm" timeout="3" />
 | 
				
			||||||
            <systemdisk>
 | 
					            <systemdisk>
 | 
				
			||||||
@@ -609,8 +484,8 @@
 | 
				
			|||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="rpi-self_install">
 | 
					    <preferences profiles="aarch64-self_install,aarch64-rt-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -625,14 +500,13 @@
 | 
				
			|||||||
            installboot="install"
 | 
					            installboot="install"
 | 
				
			||||||
            install_continue_on_timeout="false"
 | 
					            install_continue_on_timeout="false"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            efipartsize="128"
 | 
				
			||||||
            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
            btrfs_root_is_snapshot="true"
 | 
					            btrfs_root_is_snapshot="true"
 | 
				
			||||||
            btrfs_root_is_readonly_snapshot="true"
 | 
					            btrfs_root_is_readonly_snapshot="true"
 | 
				
			||||||
            editbootinstall="editbootinstall_rpi.sh"
 | 
					 | 
				
			||||||
            btrfs_quota_groups="true"
 | 
					            btrfs_quota_groups="true"
 | 
				
			||||||
            disk_start_sector="4096"
 | 
					            disk_start_sector="4096"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
@@ -652,7 +526,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-kvm">
 | 
					    <preferences profiles="s390-kvm">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -690,7 +564,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-dasd">
 | 
					    <preferences profiles="s390-dasd">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -728,7 +602,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-fba">
 | 
					    <preferences profiles="s390-fba">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -763,7 +637,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="s390-fcp">
 | 
					    <preferences profiles="s390-fcp">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -802,7 +676,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="x86-vmware">
 | 
					    <preferences profiles="x86-vmware">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -813,7 +687,6 @@
 | 
				
			|||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            format="vmdk"
 | 
					            format="vmdk"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -834,11 +707,11 @@
 | 
				
			|||||||
                <volume name="var" copy_on_write="false"/>
 | 
					                <volume name="var" copy_on_write="false"/>
 | 
				
			||||||
            </systemdisk>
 | 
					            </systemdisk>
 | 
				
			||||||
            <size unit="G">24</size>
 | 
					            <size unit="G">24</size>
 | 
				
			||||||
            <machine memory="1024" HWversion="17" guestOS="suse-64"/>
 | 
					            <machine memory="1024" HWversion="10" guestOS="suse-64"/>
 | 
				
			||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="x86-qcow">
 | 
					    <preferences profiles="x86-qcow">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -849,14 +722,15 @@
 | 
				
			|||||||
            format="qcow2"
 | 
					            format="qcow2"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 net.ifnames=0 ignition.platform.id=qemu"
 | 
				
			||||||
            kernelcmdline="console=ttyS0,115200 console=tty0 security=selinux selinux=1 quiet systemd.show_status=1 ignition.platform.id=qemu"
 | 
					 | 
				
			||||||
            bootpartition="false"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
            btrfs_root_is_snapshot="true"
 | 
					            btrfs_root_is_snapshot="true"
 | 
				
			||||||
            btrfs_root_is_readonly_snapshot="true"
 | 
					            btrfs_root_is_readonly_snapshot="true"
 | 
				
			||||||
            btrfs_quota_groups="true"
 | 
					            btrfs_quota_groups="true"
 | 
				
			||||||
 | 
					            target_blocksize="4096"
 | 
				
			||||||
 | 
					            efipartsize="200"
 | 
				
			||||||
        >
 | 
					        >
 | 
				
			||||||
            <bootloader name="grub2" console="gfxterm" timeout="3" />
 | 
					            <bootloader name="grub2" console="gfxterm" timeout="3" />
 | 
				
			||||||
            <systemdisk>
 | 
					            <systemdisk>
 | 
				
			||||||
@@ -876,7 +750,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="aarch64-qcow">
 | 
					    <preferences profiles="aarch64-qcow">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -887,8 +761,8 @@
 | 
				
			|||||||
            format="qcow2"
 | 
					            format="qcow2"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="uefi"
 | 
					            firmware="uefi"
 | 
				
			||||||
            efipartsize="512"
 | 
					            efipartsize="128"
 | 
				
			||||||
            kernelcmdline="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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -911,7 +785,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="ppc64le-512ss">
 | 
					    <preferences profiles="ppc64le-512ss">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -922,7 +796,7 @@
 | 
				
			|||||||
            image="oem"
 | 
					            image="oem"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -944,7 +818,7 @@
 | 
				
			|||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="ppc64le-4096ss">
 | 
					    <preferences profiles="ppc64le-4096ss">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -958,7 +832,7 @@
 | 
				
			|||||||
            target_blocksize="4096"
 | 
					            target_blocksize="4096"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -981,7 +855,7 @@
 | 
				
			|||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <preferences profiles="ppc64le-512ss-self_install">
 | 
					    <preferences profiles="ppc64le-512ss-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -994,7 +868,7 @@
 | 
				
			|||||||
            installpxe="true"
 | 
					            installpxe="true"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -1021,7 +895,7 @@
 | 
				
			|||||||
        </type>
 | 
					        </type>
 | 
				
			||||||
    </preferences>
 | 
					    </preferences>
 | 
				
			||||||
    <preferences profiles="ppc64le-4096ss-self_install">
 | 
					    <preferences profiles="ppc64le-4096ss-self_install">
 | 
				
			||||||
        <version>6.2</version>
 | 
					        <version>6.1</version>
 | 
				
			||||||
        <packagemanager>zypper</packagemanager>
 | 
					        <packagemanager>zypper</packagemanager>
 | 
				
			||||||
        <bootsplash-theme>SLE</bootsplash-theme>
 | 
					        <bootsplash-theme>SLE</bootsplash-theme>
 | 
				
			||||||
        <bootloader-theme>SLE</bootloader-theme>
 | 
					        <bootloader-theme>SLE</bootloader-theme>
 | 
				
			||||||
@@ -1037,7 +911,7 @@
 | 
				
			|||||||
            target_blocksize="4096"
 | 
					            target_blocksize="4096"
 | 
				
			||||||
            filesystem="btrfs"
 | 
					            filesystem="btrfs"
 | 
				
			||||||
            firmware="ofw"
 | 
					            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"
 | 
					            bootpartition="false"
 | 
				
			||||||
            bootkernel="custom"
 | 
					            bootkernel="custom"
 | 
				
			||||||
            devicepersistency="by-uuid"
 | 
					            devicepersistency="by-uuid"
 | 
				
			||||||
@@ -1070,17 +944,20 @@
 | 
				
			|||||||
    </repository>
 | 
					    </repository>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image" profiles="full">
 | 
					    <packages type="image" profiles="full">
 | 
				
			||||||
        <namedCollection name="transactional_base"/>
 | 
					        <namedCollection name="base_transactional"/>
 | 
				
			||||||
        <package name="patterns-base-transactional_base"/>
 | 
					        <package name="patterns-base-transactional"/>
 | 
				
			||||||
 | 
					        <namedCollection name="salt_minion"/>
 | 
				
			||||||
 | 
						<package name="patterns-base-salt_minion"/>
 | 
				
			||||||
        <namedCollection name="kvm_host"/>
 | 
					        <namedCollection name="kvm_host"/>
 | 
				
			||||||
	<package name="patterns-micro-kvm_host"/>
 | 
						<package name="patterns-base-kvm_host"/>
 | 
				
			||||||
	<package name="lzop"/>
 | 
						<package name="lzop"/>
 | 
				
			||||||
        <namedCollection name="container_runtime_podman"/>
 | 
					        <namedCollection name="container_runtime_podman"/>
 | 
				
			||||||
        <package name="patterns-container-runtime_podman"/>
 | 
					        <package name="patterns-container-runtime_podman"/>
 | 
				
			||||||
        <namedCollection name="cockpit"/>
 | 
					        <namedCollection name="cockpit"/>
 | 
				
			||||||
        <package name="patterns-cockpit"/>
 | 
					        <package name="patterns-base-cockpit"/>
 | 
				
			||||||
        <namedCollection name="selinux"/>
 | 
					        <namedCollection name="selinux"/>
 | 
				
			||||||
        <package name="patterns-base-selinux"/>
 | 
					        <package name="patterns-base-selinux"/>
 | 
				
			||||||
 | 
					        <package name="policycoreutils-python-utils"/>
 | 
				
			||||||
        <package name="suseconnect-ng"/>
 | 
					        <package name="suseconnect-ng"/>
 | 
				
			||||||
        <package name="SL-Micro-release"/>
 | 
					        <package name="SL-Micro-release"/>
 | 
				
			||||||
        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
					        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
				
			||||||
@@ -1090,7 +967,7 @@
 | 
				
			|||||||
	<package name="libpwquality-tools"/>
 | 
						<package name="libpwquality-tools"/>
 | 
				
			||||||
    </packages>
 | 
					    </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 -->
 | 
					        <!-- full disk encryption stuff -->
 | 
				
			||||||
        <package name="device-mapper"/>
 | 
					        <package name="device-mapper"/>
 | 
				
			||||||
        <package name="cryptsetup"/>
 | 
					        <package name="cryptsetup"/>
 | 
				
			||||||
@@ -1103,12 +980,13 @@
 | 
				
			|||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image" profiles="container-host">
 | 
					    <packages type="image" profiles="container-host">
 | 
				
			||||||
        <namedCollection name="transactional_base"/>
 | 
					        <namedCollection name="base_transactional"/>
 | 
				
			||||||
        <package name="patterns-base-transactional_base"/>
 | 
					        <package name="patterns-base-transactional"/>
 | 
				
			||||||
        <namedCollection name="container_runtime_podman"/>
 | 
					        <namedCollection name="container_runtime_podman"/>
 | 
				
			||||||
        <package name="patterns-container-runtime_podman"/>
 | 
					        <package name="patterns-container-runtime_podman"/>
 | 
				
			||||||
        <namedCollection name="selinux"/>
 | 
					        <namedCollection name="selinux"/>
 | 
				
			||||||
        <package name="patterns-base-selinux"/>
 | 
					        <package name="patterns-base-selinux"/>
 | 
				
			||||||
 | 
					        <package name="policycoreutils-python-utils"/>
 | 
				
			||||||
        <package name="suseconnect-ng"/>
 | 
					        <package name="suseconnect-ng"/>
 | 
				
			||||||
        <package name="SL-Micro-release"/>
 | 
					        <package name="SL-Micro-release"/>
 | 
				
			||||||
        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
					        <package name="grub2-branding-SLE" arch="x86_64,aarch64"/>
 | 
				
			||||||
@@ -1132,16 +1010,16 @@
 | 
				
			|||||||
	<package name="jeos-firstboot"/>
 | 
						<package name="jeos-firstboot"/>
 | 
				
			||||||
    </packages>
 | 
					    </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"/>
 | 
				
			||||||
        <package name="cloud-init-config-suse"/>
 | 
					        <package name="cloud-init-config-suse"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image">
 | 
					    <packages type="image">
 | 
				
			||||||
        <namedCollection name="transactional_base"/>
 | 
					        <namedCollection name="base_transactional"/>
 | 
				
			||||||
        <package name="patterns-base-transactional_base"/>
 | 
					        <package name="patterns-base-transactional"/>
 | 
				
			||||||
        <namedCollection name="hardware"/>
 | 
					        <namedCollection name="hardware"/>
 | 
				
			||||||
        <package name="patterns-micro-hardware"/>
 | 
					        <package name="patterns-base-hardware"/>
 | 
				
			||||||
        <package name="grub2"/>
 | 
					        <package name="grub2"/>
 | 
				
			||||||
        <package name="glibc-locale-base"/>
 | 
					        <package name="glibc-locale-base"/>
 | 
				
			||||||
        <package name="ca-certificates"/>
 | 
					        <package name="ca-certificates"/>
 | 
				
			||||||
@@ -1163,7 +1041,6 @@
 | 
				
			|||||||
	<!-- 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="live-add-yast-repos"/> -->
 | 
				
			||||||
	<package name="parted"/> <!-- seems missing to deploy the image -->
 | 
						<package name="parted"/> <!-- seems missing to deploy the image -->
 | 
				
			||||||
	<package name="iptables"/> <!-- needed by RKE2 -->
 | 
					 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <packages type="image" profiles="bootloader">
 | 
					    <packages type="image" profiles="bootloader">
 | 
				
			||||||
@@ -1180,15 +1057,11 @@
 | 
				
			|||||||
	    <package name="kpartx" arch="s390x"/>--> <!-- previous releases picked it always, now kiwi picks partx instead -->
 | 
						    <package name="kpartx" arch="s390x"/>--> <!-- previous releases picked it always, now kiwi picks partx instead -->
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
    <!-- rpi kernel-default-base does not provide all necessary drivers -->
 | 
					    <!-- 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-default"/>
 | 
				
			||||||
        <package name="kernel-firmware-all"/>
 | 
					        <package name="kernel-firmware-all"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
    <packages type="image" profiles="aarch64-64kb,aarch64-64kb-encrypted,aarch64-64kb-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-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">
 | 
					 | 
				
			||||||
        <package name="kernel-rt"/>
 | 
					        <package name="kernel-rt"/>
 | 
				
			||||||
        <package name="kernel-firmware-all"/>
 | 
					        <package name="kernel-firmware-all"/>
 | 
				
			||||||
	<!-- FIXME intentionally removed from ALP code stream
 | 
						<!-- FIXME intentionally removed from ALP code stream
 | 
				
			||||||
@@ -1203,18 +1076,17 @@
 | 
				
			|||||||
    <packages type="image" profiles="s390-fcp">
 | 
					    <packages type="image" profiles="s390-fcp">
 | 
				
			||||||
        <package name="multipath-tools"/>
 | 
					        <package name="multipath-tools"/>
 | 
				
			||||||
    </packages>
 | 
					    </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,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">
 | 
				
			||||||
    <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">
 | 
					 | 
				
			||||||
        <package name="dracut-kiwi-oem-repart"/>
 | 
					        <package name="dracut-kiwi-oem-repart"/>
 | 
				
			||||||
        <package name="dracut-kiwi-oem-dump"/>
 | 
					        <package name="dracut-kiwi-oem-dump"/>
 | 
				
			||||||
    </packages>
 | 
					    </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" arch="aarch64"/>
 | 
				
			||||||
        <package name="raspberrypi-firmware-config" arch="aarch64"/>
 | 
					        <package name="raspberrypi-firmware-config" arch="aarch64"/>
 | 
				
			||||||
        <package name="raspberrypi-firmware-dt" arch="aarch64"/>
 | 
					        <package name="raspberrypi-firmware-dt" arch="aarch64"/>
 | 
				
			||||||
        <package name="u-boot-rpiarm64" arch="aarch64"/>
 | 
					        <package name="u-boot-rpiarm64" arch="aarch64"/>
 | 
				
			||||||
    </packages>
 | 
					    </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="dracut-kiwi-oem-repart"/>
 | 
				
			||||||
        <package name="bcm43xx-firmware"/>
 | 
					        <package name="bcm43xx-firmware"/>
 | 
				
			||||||
        <package name="wireless-regdb"/>
 | 
					        <package name="wireless-regdb"/>
 | 
				
			||||||
@@ -1240,12 +1112,12 @@
 | 
				
			|||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- jsc#PED-8599 -->
 | 
					    <!-- 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"/>
 | 
					        <package name="usbguard"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <!-- jsc#PED-8788 -->
 | 
					    <!-- 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"/>
 | 
					        <package name="stalld"/>
 | 
				
			||||||
    </packages>
 | 
					    </packages>
 | 
				
			||||||
</image>
 | 
					</image>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ LARGEBLOCK=false
 | 
				
			|||||||
usage(){
 | 
					usage(){
 | 
				
			||||||
  cat <<-EOF
 | 
					  cat <<-EOF
 | 
				
			||||||
  =====================================
 | 
					  =====================================
 | 
				
			||||||
  SUSE Linux Micro 6.2 Kiwi SDK Builder
 | 
					  SUSE Linux Micro 6.1 Kiwi SDK Builder
 | 
				
			||||||
  =====================================
 | 
					  =====================================
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Usage: ${0} [-p <profile>] [-b]
 | 
					  Usage: ${0} [-p <profile>] [-b]
 | 
				
			||||||
@@ -36,12 +36,13 @@ usage(){
 | 
				
			|||||||
  Profile Options (-p):
 | 
					  Profile Options (-p):
 | 
				
			||||||
  * Default: RAW Disk Image with default packages (incl. Podman & KVM)
 | 
					  * Default: RAW Disk Image with default packages (incl. Podman & KVM)
 | 
				
			||||||
  * Default-SelfInstall: SelfInstall ISO with default packages
 | 
					  * 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: RAW Disk Image with reduced package set (no KVM)
 | 
				
			||||||
  * Base-SelfInstall: SelfInstall ISO with reduced packages
 | 
					  * Base-SelfInstall: SelfInstall ISO with reduced packages
 | 
				
			||||||
  * Base-RT: RAW Disk Image with reduced packages and kernel-rt
 | 
					  * Base-RT: RAW Disk Image with reduced packages and kernel-rt
 | 
				
			||||||
  * Base-RT-SelfInstall: SelfInstall ISO 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)
 | 
					  * Base-RT-RPi: RAW Disk image for Raspberry Pi with kernel-rt (aarch64 only with MBR)
 | 
				
			||||||
  * RaspberryPi-SelfInstall: SelfInstall ISO for Raspberry Pi with default packages (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.
 | 
					  4096 Blocksize (-b): If specified, use a 4096 blocksize (rather than 512) when generating the image.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -82,15 +83,9 @@ if $LARGEBLOCK; then
 | 
				
			|||||||
  mv /micro-sdk/defs/SL-Micro.kiwi.4096 /micro-sdk/defs/SL-Micro.kiwi
 | 
					  mv /micro-sdk/defs/SL-Micro.kiwi.4096 /micro-sdk/defs/SL-Micro.kiwi
 | 
				
			||||||
fi
 | 
					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
 | 
					# Build the image
 | 
				
			||||||
kiwi-ng --temp-dir /tmp/output/tmp-dir --debug --profile $PROFILE \
 | 
					kiwi-ng --debug --profile $PROFILE system build \
 | 
				
			||||||
    system build --description /micro-sdk/defs --target-dir /tmp/output \
 | 
					    --description /micro-sdk/defs --target-dir /tmp/output --ignore-repos-used-for-build $REPOS
 | 
				
			||||||
    --ignore-repos-used-for-build $REPOS
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Print output
 | 
					# Print output
 | 
				
			||||||
RESULT=$?
 | 
					RESULT=$?
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -188,6 +188,7 @@ cat >/etc/fstab.script <<"EOF"
 | 
				
			|||||||
#!/bin/sh
 | 
					#!/bin/sh
 | 
				
			||||||
set -eux
 | 
					set -eux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/usr/sbin/setup-fstab-for-overlayfs
 | 
				
			||||||
# If /var is on a different partition than /...
 | 
					# If /var is on a different partition than /...
 | 
				
			||||||
if [ "$(findmnt -snT / -o SOURCE)" != "$(findmnt -snT /var -o SOURCE)" ]; then
 | 
					if [ "$(findmnt -snT / -o SOURCE)" != "$(findmnt -snT /var -o SOURCE)" ]; then
 | 
				
			||||||
	# ... set options for autoexpanding /var
 | 
						# ... set options for autoexpanding /var
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%
 | 
					#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
 <service name="obs_scm">
 | 
					 <service name="obs_scm">
 | 
				
			||||||
    <param name="url">https://github.com/brancz/kube-rbac-proxy</param>
 | 
					    <param name="url">https://github.com/brancz/kube-rbac-proxy</param>
 | 
				
			||||||
    <param name="scm">git</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="version">_auto_</param>
 | 
				
			||||||
    <param name="versionformat">@PARENT_TAG@</param>
 | 
					    <param name="versionformat">@PARENT_TAG@</param>
 | 
				
			||||||
    <param name="changesgenerate">enable</param>
 | 
					    <param name="changesgenerate">enable</param>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,14 +17,14 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name:           kube-rbac-proxy
 | 
					Name:           kube-rbac-proxy
 | 
				
			||||||
Version:        0.19.1
 | 
					Version:        0.18.1
 | 
				
			||||||
Release:        0.19.1
 | 
					Release:        0.18.1
 | 
				
			||||||
Summary:        The kube-rbac-proxy is a small HTTP proxy for a single upstream
 | 
					Summary:        The kube-rbac-proxy is a small HTTP proxy for a single upstream
 | 
				
			||||||
License:        Apache-2.0
 | 
					License:        Apache-2.0
 | 
				
			||||||
URL:            https://github.com/brancz/kube-rbac-proxy
 | 
					URL:            https://github.com/brancz/kube-rbac-proxy
 | 
				
			||||||
Source:         kube-rbac-proxy-%{version}.tar
 | 
					Source:         kube-rbac-proxy-%{version}.tar
 | 
				
			||||||
Source1:        vendor.tar.gz
 | 
					Source1:        vendor.tar.gz
 | 
				
			||||||
BuildRequires:  golang(API) = 1.24
 | 
					BuildRequires:  golang(API) = 1.23
 | 
				
			||||||
ExcludeArch:    s390
 | 
					ExcludeArch:    s390
 | 
				
			||||||
ExcludeArch:    %{ix86}
 | 
					ExcludeArch:    %{ix86}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,7 @@
 | 
				
			|||||||
# SPDX-License-Identifier: Apache-2.0
 | 
					# SPDX-License-Identifier: Apache-2.0
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4
 | 
					#!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4
 | 
				
			||||||
#!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4-%RELEASE%
 | 
					#!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4-%RELEASE%
 | 
				
			||||||
 | 
					#!BuildVersion: 15.6
 | 
				
			||||||
ARG SLE_VERSION
 | 
					ARG SLE_VERSION
 | 
				
			||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
					FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -15,11 +16,11 @@ FROM micro AS final
 | 
				
			|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
					LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
 | 
				
			||||||
LABEL org.opencontainers.image.title="SLE kubectl image"
 | 
					LABEL org.opencontainers.image.title="SLE kubectl image"
 | 
				
			||||||
LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image."
 | 
					LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image."
 | 
				
			||||||
LABEL org.opencontainers.image.version="1.33.4"
 | 
					LABEL org.opencontainers.image.version="1.32.4"
 | 
				
			||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
					LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
 | 
				
			||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
					LABEL org.opencontainers.image.created="%BUILDTIME%"
 | 
				
			||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
					LABEL org.opencontainers.image.vendor="SUSE LLC"
 | 
				
			||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.33.4-%RELEASE%"
 | 
					LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.32.4-%RELEASE%"
 | 
				
			||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
					LABEL org.openbuildservice.disturl="%DISTURL%"
 | 
				
			||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
					LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
 | 
				
			||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
					LABEL com.suse.eula="SUSE Combined EULA February 2024"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
%global debug_package %{nil}
 | 
					%global debug_package %{nil}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Name: kubectl
 | 
					Name: kubectl
 | 
				
			||||||
Version: 1.33.4
 | 
					Version: 1.32.4
 | 
				
			||||||
Release: 0
 | 
					Release: 0
 | 
				
			||||||
Summary: Command-line utility for interacting with a Kubernetes cluster
 | 
					Summary: Command-line utility for interacting with a Kubernetes cluster
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										
											BIN
										
									
								
								kubectl/kubectl_1.32.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								kubectl/kubectl_1.32.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								kubectl/kubectl_1.33.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								kubectl/kubectl_1.33.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@@ -1,9 +1,9 @@
 | 
				
			|||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.1_up0.6.0-%RELEASE%
 | 
					#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.0_up0.5.0-%RELEASE%
 | 
				
			||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.1_up0.6.0
 | 
					#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.0_up0.5.0
 | 
				
			||||||
apiVersion: v2
 | 
					apiVersion: v2
 | 
				
			||||||
appVersion: 1.5.2
 | 
					appVersion: 1.4.0
 | 
				
			||||||
description: A Helm chart for KubeVirt
 | 
					description: A Helm chart for KubeVirt
 | 
				
			||||||
icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
 | 
					icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
 | 
				
			||||||
name: kubevirt
 | 
					name: kubevirt
 | 
				
			||||||
type: application
 | 
					type: application
 | 
				
			||||||
version: "%%CHART_MAJOR%%.0.1+up0.6.0"
 | 
					version: "%%CHART_MAJOR%%.0.0+up0.5.0"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -593,13 +593,6 @@ spec:
 | 
				
			|||||||
                            If set to true, migrations will still start in pre-copy, but switch to post-copy when
 | 
					                            If set to true, migrations will still start in pre-copy, but switch to post-copy when
 | 
				
			||||||
                            CompletionTimeoutPerGiB triggers. Defaults to false
 | 
					                            CompletionTimeoutPerGiB triggers. Defaults to false
 | 
				
			||||||
                          type: boolean
 | 
					                          type: boolean
 | 
				
			||||||
                        allowWorkloadDisruption:
 | 
					 | 
				
			||||||
                          description: |-
 | 
					 | 
				
			||||||
                            AllowWorkloadDisruption indicates that the migration shouldn't be
 | 
					 | 
				
			||||||
                            canceled after acceptableCompletionTime is exceeded. Instead, if
 | 
					 | 
				
			||||||
                            permitted, migration will be switched to post-copy or the VMI will be
 | 
					 | 
				
			||||||
                            paused to allow the migration to complete
 | 
					 | 
				
			||||||
                          type: boolean
 | 
					 | 
				
			||||||
                        bandwidthPerMigration:
 | 
					                        bandwidthPerMigration:
 | 
				
			||||||
                          anyOf:
 | 
					                          anyOf:
 | 
				
			||||||
                            - type: integer
 | 
					                            - type: integer
 | 
				
			||||||
@@ -612,8 +605,8 @@ spec:
 | 
				
			|||||||
                        completionTimeoutPerGiB:
 | 
					                        completionTimeoutPerGiB:
 | 
				
			||||||
                          description: |-
 | 
					                          description: |-
 | 
				
			||||||
                            CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
 | 
					                            CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
 | 
				
			||||||
                            If the timeout is reached, the migration will be either paused, switched
 | 
					                            If a live-migration takes longer to migrate than this value multiplied by the size of the VMI,
 | 
				
			||||||
                            to post-copy or cancelled depending on other settings. Defaults to 150
 | 
					                            the migration will be cancelled, unless AllowPostCopy is true. Defaults to 150
 | 
				
			||||||
                          format: int64
 | 
					                          format: int64
 | 
				
			||||||
                          type: integer
 | 
					                          type: integer
 | 
				
			||||||
                        disableTLS:
 | 
					                        disableTLS:
 | 
				
			||||||
@@ -971,17 +964,17 @@ spec:
 | 
				
			|||||||
                          type: object
 | 
					                          type: object
 | 
				
			||||||
                      type: object
 | 
					                      type: object
 | 
				
			||||||
                    vmRolloutStrategy:
 | 
					                    vmRolloutStrategy:
 | 
				
			||||||
                      description: |-
 | 
					                      description: VMRolloutStrategy defines how changes to a VM object
 | 
				
			||||||
                        VMRolloutStrategy defines how live-updatable fields, like CPU sockets, memory,
 | 
					                        propagate to its VMI
 | 
				
			||||||
                        tolerations, and affinity, are propagated from a VM to its VMI.
 | 
					 | 
				
			||||||
                      enum:
 | 
					                      enum:
 | 
				
			||||||
                        - Stage
 | 
					                        - Stage
 | 
				
			||||||
                        - LiveUpdate
 | 
					                        - LiveUpdate
 | 
				
			||||||
                      nullable: true
 | 
					                      nullable: true
 | 
				
			||||||
                      type: string
 | 
					                      type: string
 | 
				
			||||||
                    vmStateStorageClass:
 | 
					                    vmStateStorageClass:
 | 
				
			||||||
                      description: VMStateStorageClass is the name of the storage class
 | 
					                      description: |-
 | 
				
			||||||
                        to use for the PVCs created to preserve VM state, like TPM.
 | 
					                        VMStateStorageClass is the name of the storage class to use for the PVCs created to preserve VM state, like TPM.
 | 
				
			||||||
 | 
					                        The storage class must support RWX in filesystem mode.
 | 
				
			||||||
                      type: string
 | 
					                      type: string
 | 
				
			||||||
                    webhookConfiguration:
 | 
					                    webhookConfiguration:
 | 
				
			||||||
                      description: |-
 | 
					                      description: |-
 | 
				
			||||||
@@ -3857,13 +3850,6 @@ spec:
 | 
				
			|||||||
                            If set to true, migrations will still start in pre-copy, but switch to post-copy when
 | 
					                            If set to true, migrations will still start in pre-copy, but switch to post-copy when
 | 
				
			||||||
                            CompletionTimeoutPerGiB triggers. Defaults to false
 | 
					                            CompletionTimeoutPerGiB triggers. Defaults to false
 | 
				
			||||||
                          type: boolean
 | 
					                          type: boolean
 | 
				
			||||||
                        allowWorkloadDisruption:
 | 
					 | 
				
			||||||
                          description: |-
 | 
					 | 
				
			||||||
                            AllowWorkloadDisruption indicates that the migration shouldn't be
 | 
					 | 
				
			||||||
                            canceled after acceptableCompletionTime is exceeded. Instead, if
 | 
					 | 
				
			||||||
                            permitted, migration will be switched to post-copy or the VMI will be
 | 
					 | 
				
			||||||
                            paused to allow the migration to complete
 | 
					 | 
				
			||||||
                          type: boolean
 | 
					 | 
				
			||||||
                        bandwidthPerMigration:
 | 
					                        bandwidthPerMigration:
 | 
				
			||||||
                          anyOf:
 | 
					                          anyOf:
 | 
				
			||||||
                            - type: integer
 | 
					                            - type: integer
 | 
				
			||||||
@@ -3876,8 +3862,8 @@ spec:
 | 
				
			|||||||
                        completionTimeoutPerGiB:
 | 
					                        completionTimeoutPerGiB:
 | 
				
			||||||
                          description: |-
 | 
					                          description: |-
 | 
				
			||||||
                            CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
 | 
					                            CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
 | 
				
			||||||
                            If the timeout is reached, the migration will be either paused, switched
 | 
					                            If a live-migration takes longer to migrate than this value multiplied by the size of the VMI,
 | 
				
			||||||
                            to post-copy or cancelled depending on other settings. Defaults to 150
 | 
					                            the migration will be cancelled, unless AllowPostCopy is true. Defaults to 150
 | 
				
			||||||
                          format: int64
 | 
					                          format: int64
 | 
				
			||||||
                          type: integer
 | 
					                          type: integer
 | 
				
			||||||
                        disableTLS:
 | 
					                        disableTLS:
 | 
				
			||||||
@@ -4235,17 +4221,17 @@ spec:
 | 
				
			|||||||
                          type: object
 | 
					                          type: object
 | 
				
			||||||
                      type: object
 | 
					                      type: object
 | 
				
			||||||
                    vmRolloutStrategy:
 | 
					                    vmRolloutStrategy:
 | 
				
			||||||
                      description: |-
 | 
					                      description: VMRolloutStrategy defines how changes to a VM object
 | 
				
			||||||
                        VMRolloutStrategy defines how live-updatable fields, like CPU sockets, memory,
 | 
					                        propagate to its VMI
 | 
				
			||||||
                        tolerations, and affinity, are propagated from a VM to its VMI.
 | 
					 | 
				
			||||||
                      enum:
 | 
					                      enum:
 | 
				
			||||||
                        - Stage
 | 
					                        - Stage
 | 
				
			||||||
                        - LiveUpdate
 | 
					                        - LiveUpdate
 | 
				
			||||||
                      nullable: true
 | 
					                      nullable: true
 | 
				
			||||||
                      type: string
 | 
					                      type: string
 | 
				
			||||||
                    vmStateStorageClass:
 | 
					                    vmStateStorageClass:
 | 
				
			||||||
                      description: VMStateStorageClass is the name of the storage class
 | 
					                      description: |-
 | 
				
			||||||
                        to use for the PVCs created to preserve VM state, like TPM.
 | 
					                        VMStateStorageClass is the name of the storage class to use for the PVCs created to preserve VM state, like TPM.
 | 
				
			||||||
 | 
					                        The storage class must support RWX in filesystem mode.
 | 
				
			||||||
                      type: string
 | 
					                      type: string
 | 
				
			||||||
                    webhookConfiguration:
 | 
					                    webhookConfiguration:
 | 
				
			||||||
                      description: |-
 | 
					                      description: |-
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -608,7 +608,6 @@ rules:
 | 
				
			|||||||
    resources:
 | 
					    resources:
 | 
				
			||||||
      - virtualmachinesnapshots
 | 
					      - virtualmachinesnapshots
 | 
				
			||||||
      - virtualmachinesnapshots/status
 | 
					      - virtualmachinesnapshots/status
 | 
				
			||||||
      - virtualmachinesnapshots/finalizers
 | 
					 | 
				
			||||||
      - virtualmachinesnapshotcontents
 | 
					      - virtualmachinesnapshotcontents
 | 
				
			||||||
      - virtualmachinesnapshotcontents/status
 | 
					      - virtualmachinesnapshotcontents/status
 | 
				
			||||||
      - virtualmachinesnapshotcontents/finalizers
 | 
					      - virtualmachinesnapshotcontents/finalizers
 | 
				
			||||||
@@ -661,18 +660,15 @@ rules:
 | 
				
			|||||||
      - kubevirt.io
 | 
					      - kubevirt.io
 | 
				
			||||||
    resources:
 | 
					    resources:
 | 
				
			||||||
      - virtualmachines/finalizers
 | 
					      - virtualmachines/finalizers
 | 
				
			||||||
      - virtualmachineinstances/finalizers
 | 
					 | 
				
			||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
      - update
 | 
					      - update
 | 
				
			||||||
  - apiGroups:
 | 
					  - apiGroups:
 | 
				
			||||||
      - subresources.kubevirt.io
 | 
					      - subresources.kubevirt.io
 | 
				
			||||||
    resources:
 | 
					    resources:
 | 
				
			||||||
      - virtualmachines/stop
 | 
					 | 
				
			||||||
      - virtualmachineinstances/addvolume
 | 
					      - virtualmachineinstances/addvolume
 | 
				
			||||||
      - virtualmachineinstances/removevolume
 | 
					      - virtualmachineinstances/removevolume
 | 
				
			||||||
      - virtualmachineinstances/freeze
 | 
					      - virtualmachineinstances/freeze
 | 
				
			||||||
      - virtualmachineinstances/unfreeze
 | 
					      - virtualmachineinstances/unfreeze
 | 
				
			||||||
      - virtualmachineinstances/reset
 | 
					 | 
				
			||||||
      - virtualmachineinstances/softreboot
 | 
					      - virtualmachineinstances/softreboot
 | 
				
			||||||
      - virtualmachineinstances/sev/setupsession
 | 
					      - virtualmachineinstances/sev/setupsession
 | 
				
			||||||
      - virtualmachineinstances/sev/injectlaunchsecret
 | 
					      - virtualmachineinstances/sev/injectlaunchsecret
 | 
				
			||||||
@@ -776,14 +772,6 @@ rules:
 | 
				
			|||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
      - list
 | 
					      - list
 | 
				
			||||||
      - watch
 | 
					      - watch
 | 
				
			||||||
  - apiGroups:
 | 
					 | 
				
			||||||
      - batch
 | 
					 | 
				
			||||||
    resources:
 | 
					 | 
				
			||||||
      - jobs
 | 
					 | 
				
			||||||
    verbs:
 | 
					 | 
				
			||||||
      - create
 | 
					 | 
				
			||||||
      - get
 | 
					 | 
				
			||||||
      - delete
 | 
					 | 
				
			||||||
  - apiGroups:
 | 
					  - apiGroups:
 | 
				
			||||||
      - kubevirt.io
 | 
					      - kubevirt.io
 | 
				
			||||||
    resources:
 | 
					    resources:
 | 
				
			||||||
@@ -895,7 +883,6 @@ rules:
 | 
				
			|||||||
      - virtualmachineinstances/freeze
 | 
					      - virtualmachineinstances/freeze
 | 
				
			||||||
      - virtualmachineinstances/unfreeze
 | 
					      - virtualmachineinstances/unfreeze
 | 
				
			||||||
      - virtualmachineinstances/softreboot
 | 
					      - virtualmachineinstances/softreboot
 | 
				
			||||||
      - virtualmachineinstances/reset
 | 
					 | 
				
			||||||
      - virtualmachineinstances/sev/setupsession
 | 
					      - virtualmachineinstances/sev/setupsession
 | 
				
			||||||
      - virtualmachineinstances/sev/injectlaunchsecret
 | 
					      - virtualmachineinstances/sev/injectlaunchsecret
 | 
				
			||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
@@ -915,6 +902,7 @@ rules:
 | 
				
			|||||||
      - virtualmachines/restart
 | 
					      - virtualmachines/restart
 | 
				
			||||||
      - virtualmachines/addvolume
 | 
					      - virtualmachines/addvolume
 | 
				
			||||||
      - virtualmachines/removevolume
 | 
					      - virtualmachines/removevolume
 | 
				
			||||||
 | 
					      - virtualmachines/migrate
 | 
				
			||||||
      - virtualmachines/memorydump
 | 
					      - virtualmachines/memorydump
 | 
				
			||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
      - update
 | 
					      - update
 | 
				
			||||||
@@ -931,6 +919,7 @@ rules:
 | 
				
			|||||||
      - virtualmachineinstances
 | 
					      - virtualmachineinstances
 | 
				
			||||||
      - virtualmachineinstancepresets
 | 
					      - virtualmachineinstancepresets
 | 
				
			||||||
      - virtualmachineinstancereplicasets
 | 
					      - virtualmachineinstancereplicasets
 | 
				
			||||||
 | 
					      - virtualmachineinstancemigrations
 | 
				
			||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
      - get
 | 
					      - get
 | 
				
			||||||
      - delete
 | 
					      - delete
 | 
				
			||||||
@@ -940,14 +929,6 @@ rules:
 | 
				
			|||||||
      - list
 | 
					      - list
 | 
				
			||||||
      - watch
 | 
					      - watch
 | 
				
			||||||
      - deletecollection
 | 
					      - deletecollection
 | 
				
			||||||
  - apiGroups:
 | 
					 | 
				
			||||||
      - kubevirt.io
 | 
					 | 
				
			||||||
    resources:
 | 
					 | 
				
			||||||
      - virtualmachineinstancemigrations
 | 
					 | 
				
			||||||
    verbs:
 | 
					 | 
				
			||||||
      - get
 | 
					 | 
				
			||||||
      - list
 | 
					 | 
				
			||||||
      - watch
 | 
					 | 
				
			||||||
  - apiGroups:
 | 
					  - apiGroups:
 | 
				
			||||||
      - snapshot.kubevirt.io
 | 
					      - snapshot.kubevirt.io
 | 
				
			||||||
    resources:
 | 
					    resources:
 | 
				
			||||||
@@ -1051,7 +1032,6 @@ rules:
 | 
				
			|||||||
      - virtualmachineinstances/freeze
 | 
					      - virtualmachineinstances/freeze
 | 
				
			||||||
      - virtualmachineinstances/unfreeze
 | 
					      - virtualmachineinstances/unfreeze
 | 
				
			||||||
      - virtualmachineinstances/softreboot
 | 
					      - virtualmachineinstances/softreboot
 | 
				
			||||||
      - virtualmachineinstances/reset
 | 
					 | 
				
			||||||
      - virtualmachineinstances/sev/setupsession
 | 
					      - virtualmachineinstances/sev/setupsession
 | 
				
			||||||
      - virtualmachineinstances/sev/injectlaunchsecret
 | 
					      - virtualmachineinstances/sev/injectlaunchsecret
 | 
				
			||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
@@ -1071,6 +1051,7 @@ rules:
 | 
				
			|||||||
      - virtualmachines/restart
 | 
					      - virtualmachines/restart
 | 
				
			||||||
      - virtualmachines/addvolume
 | 
					      - virtualmachines/addvolume
 | 
				
			||||||
      - virtualmachines/removevolume
 | 
					      - virtualmachines/removevolume
 | 
				
			||||||
 | 
					      - virtualmachines/migrate
 | 
				
			||||||
      - virtualmachines/memorydump
 | 
					      - virtualmachines/memorydump
 | 
				
			||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
      - update
 | 
					      - update
 | 
				
			||||||
@@ -1087,6 +1068,7 @@ rules:
 | 
				
			|||||||
      - virtualmachineinstances
 | 
					      - virtualmachineinstances
 | 
				
			||||||
      - virtualmachineinstancepresets
 | 
					      - virtualmachineinstancepresets
 | 
				
			||||||
      - virtualmachineinstancereplicasets
 | 
					      - virtualmachineinstancereplicasets
 | 
				
			||||||
 | 
					      - virtualmachineinstancemigrations
 | 
				
			||||||
    verbs:
 | 
					    verbs:
 | 
				
			||||||
      - get
 | 
					      - get
 | 
				
			||||||
      - delete
 | 
					      - delete
 | 
				
			||||||
@@ -1095,14 +1077,6 @@ rules:
 | 
				
			|||||||
      - patch
 | 
					      - patch
 | 
				
			||||||
      - list
 | 
					      - list
 | 
				
			||||||
      - watch
 | 
					      - watch
 | 
				
			||||||
  - apiGroups:
 | 
					 | 
				
			||||||
      - kubevirt.io
 | 
					 | 
				
			||||||
    resources:
 | 
					 | 
				
			||||||
      - virtualmachineinstancemigrations
 | 
					 | 
				
			||||||
    verbs:
 | 
					 | 
				
			||||||
      - get
 | 
					 | 
				
			||||||
      - list
 | 
					 | 
				
			||||||
      - watch
 | 
					 | 
				
			||||||
  - apiGroups:
 | 
					  - apiGroups:
 | 
				
			||||||
      - snapshot.kubevirt.io
 | 
					      - snapshot.kubevirt.io
 | 
				
			||||||
    resources:
 | 
					    resources:
 | 
				
			||||||
@@ -1281,25 +1255,6 @@ rules:
 | 
				
			|||||||
      - get
 | 
					      - get
 | 
				
			||||||
      - list
 | 
					      - list
 | 
				
			||||||
      - watch
 | 
					      - watch
 | 
				
			||||||
  - apiGroups:
 | 
					 | 
				
			||||||
      - subresources.kubevirt.io
 | 
					 | 
				
			||||||
    resources:
 | 
					 | 
				
			||||||
      - virtualmachines/migrate
 | 
					 | 
				
			||||||
    verbs:
 | 
					 | 
				
			||||||
      - update
 | 
					 | 
				
			||||||
  - apiGroups:
 | 
					 | 
				
			||||||
      - kubevirt.io
 | 
					 | 
				
			||||||
    resources:
 | 
					 | 
				
			||||||
      - virtualmachineinstancemigrations
 | 
					 | 
				
			||||||
    verbs:
 | 
					 | 
				
			||||||
      - get
 | 
					 | 
				
			||||||
      - delete
 | 
					 | 
				
			||||||
      - create
 | 
					 | 
				
			||||||
      - update
 | 
					 | 
				
			||||||
      - patch
 | 
					 | 
				
			||||||
      - list
 | 
					 | 
				
			||||||
      - watch
 | 
					 | 
				
			||||||
      - deletecollection
 | 
					 | 
				
			||||||
  - apiGroups:
 | 
					  - apiGroups:
 | 
				
			||||||
      - authentication.k8s.io
 | 
					      - authentication.k8s.io
 | 
				
			||||||
    resources:
 | 
					    resources:
 | 
				
			||||||
@@ -1345,8 +1300,6 @@ spec:
 | 
				
			|||||||
    type: RollingUpdate
 | 
					    type: RollingUpdate
 | 
				
			||||||
  template:
 | 
					  template:
 | 
				
			||||||
    metadata:
 | 
					    metadata:
 | 
				
			||||||
      annotations:
 | 
					 | 
				
			||||||
        openshift.io/required-scc: restricted-v2
 | 
					 | 
				
			||||||
      labels:
 | 
					      labels:
 | 
				
			||||||
        kubevirt.io: virt-operator
 | 
					        kubevirt.io: virt-operator
 | 
				
			||||||
        name: virt-operator
 | 
					        name: virt-operator
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,6 +1,6 @@
 | 
				
			|||||||
operator:
 | 
					operator:
 | 
				
			||||||
  image: registry.suse.com/suse/sles/15.7/virt-operator
 | 
					  image: registry.suse.com/suse/sles/15.6/virt-operator
 | 
				
			||||||
  version: 1.5.2-150700.3.5.2
 | 
					  version: 1.4.0-150600.5.15.1
 | 
				
			||||||
  replicas: 2
 | 
					  replicas: 2
 | 
				
			||||||
  pullPolicy: IfNotPresent
 | 
					  pullPolicy: IfNotPresent
 | 
				
			||||||
  affinity:
 | 
					  affinity:
 | 
				
			||||||
@@ -40,7 +40,7 @@ kubevirt:
 | 
				
			|||||||
  monitorAccount: ""
 | 
					  monitorAccount: ""
 | 
				
			||||||
  monitorNamespace: ""
 | 
					  monitorNamespace: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
hookImage: registry.rancher.com/rancher/kubectl:v1.33.1
 | 
					hookImage: registry.rancher.com/rancher/kubectl:v1.30.10
 | 
				
			||||||
hookRestartPolicy: OnFailure
 | 
					hookRestartPolicy: OnFailure
 | 
				
			||||||
hookSecurityContext:
 | 
					hookSecurityContext:
 | 
				
			||||||
  seccompProfile:
 | 
					  seccompProfile:
 | 
				
			||||||
 
 | 
				
			|||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user