forked from suse-edge/Factory
		
	Compare commits
	
		
			79 Commits
		
	
	
		
			kube-rbac-
			...
			3.4
		
	
	| Author | SHA256 | Date | |
|---|---|---|---|
| fdab9b0bde | |||
| ef31131144 | |||
| 0a0264cc2b | |||
| 8b156f3a42 | |||
| fffb09efe0 | |||
| a6fde4c761 | |||
| e8ee070133 | |||
|  | 1e5f60b17e | ||
|  | 386550eb41 | ||
| 05061793f1 | |||
| 853872d9ba | |||
| 696440c3c7 | |||
| aad7827d67 | |||
| 40869007bd | |||
| 4326b883e5 | |||
|  | 0b3f99e64c | ||
| d77cc8744f | |||
| d3e972e242 | |||
| 6fd87db1ad | |||
| 24685d27be | |||
| 9d93dd001a | |||
| da8736177f | |||
| 5408eb4de5 | |||
| 1fac881ebc | |||
| 5e533c35b9 | |||
| 8eeb3b2a26 | |||
| 042175ff4c | |||
| f54cc0c0a3 | |||
| 265467d53f | |||
| b4a7eadd88 | |||
| be12376b9c | |||
| 4b7ad790c8 | |||
| 59f7f6c4d2 | |||
| 6c719f307c | |||
| e30c1fef4b | |||
| 3fea007d77 | |||
| 1bce8490f6 | |||
| 47bdcb200c | |||
|  | bf869dec4e | ||
| 92f49dbbfc | |||
| 96320cc7f2 | |||
| 7be5f59e4f | |||
| bb4ab90787 | |||
| 6c05726947 | |||
| 9a87f37674 | |||
| 6d50385ec3 | |||
|  | b94d722028 | ||
| 35054ff64b | |||
| e5f6b76d8b | |||
| 4e32759250 | |||
| 59fd3c1a8b | |||
|  | 5b167e10ab | ||
| 9cbf868ba7 | |||
| 7e04a91e72 | |||
| e9554a4399 | |||
| 45cd7fbc36 | |||
| 05f49fec7b | |||
| d1cb632801 | |||
| a1ba635f5d | |||
| 0295819a86 | |||
| 6875eea67f | |||
| 3652c43179 | |||
| 8403958d39 | |||
| b77a565a57 | |||
| a0180aa25a | |||
| 2a852b4266 | |||
| 1b112a8727 | |||
| 411e9ab220 | |||
| 9227c1bbeb | |||
| 994273a2a3 | |||
| ec829ba559 | |||
| 9821dab715 | |||
| 0eec81256f | |||
| 0fd2e6472a | |||
| d648a17268 | |||
| d056b82800 | |||
| e935c18527 | |||
| d1dcfadea6 | |||
| 594a388a50 | 
							
								
								
									
										24
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -13,3 +13,27 @@ | ||||
| [submodule "autoconf"] | ||||
| 	path = autoconf | ||||
| 	url = https://src.opensuse.org/SLFO-pool/autoconf.git | ||||
| [submodule "python-pydantic"] | ||||
| 	path = python-pydantic | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-pydantic | ||||
| [submodule "python-pydantic-core"] | ||||
| 	path = python-pydantic-core | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-pydantic-core | ||||
| [submodule "python-inline-snapshot"] | ||||
| 	path = python-inline-snapshot | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-inline-snapshot | ||||
| [submodule "python-executing"] | ||||
| 	path = python-executing | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-executing | ||||
| [submodule "python-typing-inspection"] | ||||
| 	path = python-typing-inspection | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-typing-inspection | ||||
| [submodule "python-annotated-types"] | ||||
| 	path = python-annotated-types | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-annotated-types | ||||
| [submodule "python-typing_extensions"] | ||||
| 	path = python-typing_extensions | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-typing_extensions | ||||
| [submodule "python-flit-core"] | ||||
| 	path = python-flit-core | ||||
| 	url = https://src.opensuse.org/SLFO-pool/python-flit-core | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| PROJECT = "isv:SUSE:Edge:Factory" | ||||
| PROJECT = "isv:SUSE:Edge:3.4" | ||||
| REPOSITORY = "https://src.opensuse.org/suse-edge/Factory" | ||||
| BRANCH = "main" | ||||
| BRANCH = "3.4" | ||||
|   | ||||
| @@ -3,7 +3,7 @@ repos: | ||||
|     hooks: | ||||
|       - id: check-manifest | ||||
|         name: "Check release-manifest" | ||||
|         entry: .obs/manifest-check.py | ||||
|         entry: python3 .obs/manifest-check.py | ||||
|         language: python | ||||
|         additional_dependencies: ['ruamel.yaml'] | ||||
|         pass_filenames: false | ||||
|   | ||||
							
								
								
									
										29
									
								
								_config
									
									
									
									
									
								
							
							
						
						
									
										29
									
								
								_config
									
									
									
									
									
								
							| @@ -1,5 +1,5 @@ | ||||
| Prefer: -libqpid-proton10 -python311-urllib3_1 | ||||
| Prefer: -cargo1.58 -cargo1.57 cargo1.88 | ||||
| Prefer: -cargo1.58 -cargo1.57 cargo1.89 | ||||
|  | ||||
| Macros: | ||||
| %__python3 /usr/bin/python3.11 | ||||
| @@ -50,6 +50,15 @@ Macros: | ||||
| BuildFlags: excludebuild:autoconf:el | ||||
| BuildFlags: excludebuild:autoconf:testsuite | ||||
|  | ||||
| # Missing deps for python packages related to suse-edge-components-versions | ||||
| BuildFlags: excludebuild:python-pydantic:test | ||||
| BuildFlags: excludebuild:python-pydantic-core:test | ||||
| BuildFlags: excludebuild:python-inline-snapshot:test | ||||
| BuildFlags: excludebuild:python-executing:test | ||||
| BuildFlags: excludebuild:python-annotated-types:test | ||||
| BuildFlags: excludebuild:python-typing-inspection:test | ||||
| BuildFlags: excludebuild:python-typing_extensions:test | ||||
|  | ||||
| # Only build manifest embedding images here | ||||
| %if "%_repository" == "test_manifest_images" | ||||
| BuildFlags: onlybuild:edge-image-builder-image | ||||
| @@ -66,6 +75,8 @@ BuildFlags: onlybuild:release-manifest-image | ||||
|     BuildFlags: excludebuild:kube-rbac-proxy-image | ||||
|     BuildFlags: excludebuild:metallb-controller-image | ||||
|     BuildFlags: excludebuild:metallb-speaker-image | ||||
|     BuildFlags: excludebuild:nessie-image | ||||
|     BuildFlags: excludebuild:suse-edge-components-versions-image | ||||
|   %endif | ||||
| %else | ||||
| # Only a subset of stack is arm64 ready | ||||
| @@ -94,8 +105,22 @@ BuildFlags: onlybuild:release-manifest-image | ||||
|     BuildFlags: onlybuild:metallb | ||||
|     BuildFlags: onlybuild:metallb-controller-image | ||||
|     BuildFlags: onlybuild:metallb-speaker-image | ||||
|     BuildFlags: onlybuild:nessie | ||||
|     BuildFlags: onlybuild:nessie-image | ||||
|     BuildFlags: onlybuild:nm-configurator | ||||
|     BuildFlags: onlybuild:python-annotated-types | ||||
|     BuildFlags: onlybuild:python-executing | ||||
|     BuildFlags: onlybuild:python-flit-core | ||||
|     BuildFlags: onlybuild:python-inline-snapshot | ||||
|     BuildFlags: onlybuild:python-pydantic | ||||
|     BuildFlags: onlybuild:python-pydantic-core | ||||
|     BuildFlags: onlybuild:python-pyhelm3 | ||||
|     BuildFlags: onlybuild:python-rich | ||||
|     BuildFlags: onlybuild:python-suse-edge-components-versions | ||||
|     BuildFlags: onlybuild:python-typing-inspection | ||||
|     BuildFlags: onlybuild:python-typing_extensions | ||||
|     BuildFlags: onlybuild:shim-noarch | ||||
|     BuildFlags: onlybuild:suse-edge-components-versions-image | ||||
|   %endif | ||||
| %endif | ||||
|  | ||||
| @@ -146,6 +171,8 @@ BuildFlags: onlybuild:release-manifest-image | ||||
|       BuildFlags: excludebuild:kube-rbac-proxy-image | ||||
|       BuildFlags: excludebuild:metallb-controller-image | ||||
|       BuildFlags: excludebuild:metallb-speaker-image | ||||
|       BuildFlags: excludebuild:nessie-image | ||||
|       BuildFlags: excludebuild:suse-edge-components-versions-image | ||||
|     %endif | ||||
|  | ||||
| %else | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| #!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% | ||||
| #!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1 | ||||
| #!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1-%RELEASE% | ||||
| annotations: | ||||
|   catalog.cattle.io/certified: rancher | ||||
|   catalog.cattle.io/namespace: cattle-ui-plugin-system | ||||
| @@ -12,10 +12,10 @@ annotations: | ||||
|   catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0' | ||||
|   catalog.cattle.io/kube-version: '>= v1.26.0-0' | ||||
| apiVersion: v2 | ||||
| appVersion: 303.0.2+up1.3.1 | ||||
| appVersion: 304.0.3+up1.3.1 | ||||
| description: 'SUSE Edge: Akri extension for Rancher Dashboard' | ||||
| name: akri-dashboard-extension | ||||
| type: application | ||||
| version: "%%CHART_MAJOR%%.0.2+up1.3.1" | ||||
| version: "%%CHART_MAJOR%%.0.3+up1.3.1" | ||||
| icon: >- | ||||
|   https://raw.githubusercontent.com/cncf/artwork/main/projects/akri/icon/color/akri-icon-color.svg | ||||
|   | ||||
| @@ -8,7 +8,7 @@ spec: | ||||
|   plugin: | ||||
|     name: {{ include "extension-server.fullname" . }} | ||||
|     version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }} | ||||
|     endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/303.0.2+up1.3.1 | ||||
|     endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/304.0.3+up1.3.1 | ||||
|     noCache: {{ .Values.plugin.noCache }} | ||||
|     noAuth: {{ .Values.plugin.noAuth }} | ||||
|     metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }} | ||||
|   | ||||
							
								
								
									
										163
									
								
								baremetal-operator/0001-Enable-exhaustive-linter.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										163
									
								
								baremetal-operator/0001-Enable-exhaustive-linter.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,163 @@ | ||||
| From f8c1ba1696fd8555e8e94246ec5afa38536fa8bd Mon Sep 17 00:00:00 2001 | ||||
| From: erjavaskivuori <erja.vaskivuori@est.tech> | ||||
| Date: Thu, 5 Jun 2025 09:49:47 +0000 | ||||
| Subject: [PATCH 1/5] Enable exhaustive linter | ||||
|  | ||||
| Enable exhaustive linter to check exhaustiveness of switch statements of enum-like | ||||
| constants. | ||||
|  | ||||
| Signed-off-by: erjavaskivuori <erja.vaskivuori@est.tech> | ||||
| (cherry picked from commit a5a81b8717c9e6642ae626ea97933e3615fe11c0) | ||||
| --- | ||||
|  .golangci.yaml                                |  4 ++- | ||||
|  .../metal3.io/v1alpha1/baremetalhost_types.go |  1 + | ||||
|  .../metal3.io/baremetalhost_controller.go     |  2 ++ | ||||
|  .../metal3.io/host_state_machine.go           |  4 +++ | ||||
|  pkg/provisioner/ironic/ironic.go              | 26 +++++++++---------- | ||||
|  5 files changed, 22 insertions(+), 15 deletions(-) | ||||
|  | ||||
| diff --git a/.golangci.yaml b/.golangci.yaml | ||||
| index 58e54b31..c758b93c 100644 | ||||
| --- a/.golangci.yaml | ||||
| +++ b/.golangci.yaml | ||||
| @@ -21,7 +21,7 @@ linters: | ||||
|    - errchkjson | ||||
|    #- errname | ||||
|    #- errorlint | ||||
| -  #- exhaustive | ||||
| +  - exhaustive | ||||
|    - exptostd | ||||
|    - fatcontext | ||||
|    #- forbidigo | ||||
| @@ -78,6 +78,8 @@ linters: | ||||
|    # Run with --fast=false for more extensive checks | ||||
|    fast: true | ||||
|  linters-settings: | ||||
| +  exhaustive: | ||||
| +    default-signifies-exhaustive: true | ||||
|    gosec: | ||||
|      severity: medium | ||||
|      confidence: medium | ||||
| diff --git a/apis/metal3.io/v1alpha1/baremetalhost_types.go b/apis/metal3.io/v1alpha1/baremetalhost_types.go | ||||
| index ba1b4333..426a7a89 100644 | ||||
| --- a/apis/metal3.io/v1alpha1/baremetalhost_types.go | ||||
| +++ b/apis/metal3.io/v1alpha1/baremetalhost_types.go | ||||
| @@ -1113,6 +1113,7 @@ func (host *BareMetalHost) OperationMetricForState(operation ProvisioningState) | ||||
|  		metric = &history.Provision | ||||
|  	case StateDeprovisioning: | ||||
|  		metric = &history.Deprovision | ||||
| +	default: | ||||
|  	} | ||||
|  	return | ||||
|  } | ||||
| diff --git a/internal/controller/metal3.io/baremetalhost_controller.go b/internal/controller/metal3.io/baremetalhost_controller.go | ||||
| index 33310bf7..1998627e 100644 | ||||
| --- a/internal/controller/metal3.io/baremetalhost_controller.go | ||||
| +++ b/internal/controller/metal3.io/baremetalhost_controller.go | ||||
| @@ -586,6 +586,7 @@ func getCurrentImage(host *metal3api.BareMetalHost) *metal3api.Image { | ||||
|  		if host.Spec.Image != nil && host.Spec.Image.URL != "" { | ||||
|  			return host.Spec.Image.DeepCopy() | ||||
|  		} | ||||
| +	default: | ||||
|  	} | ||||
|  	return nil | ||||
|  } | ||||
| @@ -816,6 +817,7 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf | ||||
|  		if info.host.Spec.AutomatedCleaningMode == metal3api.CleaningModeDisabled { | ||||
|  			preprovImgFormats = nil | ||||
|  		} | ||||
| +	default: | ||||
|  	} | ||||
|   | ||||
|  	preprovImg, err := r.getPreprovImage(info, preprovImgFormats) | ||||
| diff --git a/internal/controller/metal3.io/host_state_machine.go b/internal/controller/metal3.io/host_state_machine.go | ||||
| index 8b382553..6d88591b 100644 | ||||
| --- a/internal/controller/metal3.io/host_state_machine.go | ||||
| +++ b/internal/controller/metal3.io/host_state_machine.go | ||||
| @@ -107,6 +107,7 @@ func (hsm *hostStateMachine) updateHostStateFrom(initialState metal3api.Provisio | ||||
|  			if actionRes := hsm.ensureCapacity(info, hsm.NextState); actionRes != nil { | ||||
|  				return actionRes | ||||
|  			} | ||||
| +		default: | ||||
|  		} | ||||
|   | ||||
|  		info.log.Info("changing provisioning state", | ||||
| @@ -137,6 +138,7 @@ func (hsm *hostStateMachine) updateHostStateFrom(initialState metal3api.Provisio | ||||
|  				info.log.Info("saving boot mode", | ||||
|  					"new mode", hsm.Host.Status.Provisioning.BootMode) | ||||
|  			} | ||||
| +		default: | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| @@ -163,6 +165,7 @@ func (hsm *hostStateMachine) checkDelayedHost(info *reconcileInfo) actionResult | ||||
|  		if actionRes := hsm.ensureCapacity(info, info.host.Status.Provisioning.State); actionRes != nil { | ||||
|  			return actionRes | ||||
|  		} | ||||
| +	default: | ||||
|  	} | ||||
|   | ||||
|  	return nil | ||||
| @@ -299,6 +302,7 @@ func (hsm *hostStateMachine) checkDetachedHost(info *reconcileInfo) (result acti | ||||
|  		switch info.host.Status.Provisioning.State { | ||||
|  		case metal3api.StateProvisioned, metal3api.StateExternallyProvisioned, metal3api.StateReady, metal3api.StateAvailable: | ||||
|  			return hsm.Reconciler.detachHost(hsm.Provisioner, info) | ||||
| +		default: | ||||
|  		} | ||||
|  	} | ||||
|  	if info.host.Status.ErrorType == metal3api.DetachError { | ||||
| diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go | ||||
| index 9a4b4589..4c4923ad 100644 | ||||
| --- a/pkg/provisioner/ironic/ironic.go | ||||
| +++ b/pkg/provisioner/ironic/ironic.go | ||||
| @@ -335,21 +335,17 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat | ||||
|  		return result, err | ||||
|  	} | ||||
|   | ||||
| +	if data.State == metal3api.StateProvisioning && data.CurrentImage.IsLiveISO() { | ||||
| +		// Live ISO doesn't need pre-provisioning image | ||||
| +		return result, nil | ||||
| +	} | ||||
| + | ||||
| +	if data.State == metal3api.StateDeprovisioning && data.AutomatedCleaningMode == metal3api.CleaningModeDisabled { | ||||
| +		// No need for pre-provisioning image if cleaning disabled | ||||
| +		return result, nil | ||||
| +	} | ||||
| + | ||||
|  	switch data.State { | ||||
| -	case metal3api.StateProvisioning, | ||||
| -		metal3api.StateDeprovisioning: | ||||
| -		if data.State == metal3api.StateProvisioning { | ||||
| -			if data.CurrentImage.IsLiveISO() { | ||||
| -				// Live ISO doesn't need pre-provisioning image | ||||
| -				return result, nil | ||||
| -			} | ||||
| -		} else { | ||||
| -			if data.AutomatedCleaningMode == metal3api.CleaningModeDisabled { | ||||
| -				// No need for pre-provisioning image if cleaning disabled | ||||
| -				return result, nil | ||||
| -			} | ||||
| -		} | ||||
| -		fallthrough | ||||
|  	case metal3api.StateInspecting, | ||||
|  		metal3api.StatePreparing: | ||||
|  		if deployImageInfo == nil { | ||||
| @@ -360,6 +356,7 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat | ||||
|  			} | ||||
|  			return result, err | ||||
|  		} | ||||
| +	default: | ||||
|  	} | ||||
|   | ||||
|  	return result, nil | ||||
| @@ -1724,6 +1721,7 @@ func (p *ironicProvisioner) loadBusyHosts() (hosts map[string]struct{}, err erro | ||||
|  			if !strings.Contains(node.BootInterface, "virtual-media") { | ||||
|  				hosts[node.Name] = struct{}{} | ||||
|  			} | ||||
| +		default: | ||||
|  		} | ||||
|  	} | ||||
|   | ||||
| --  | ||||
| 2.50.1 | ||||
|  | ||||
| @@ -0,0 +1,91 @@ | ||||
| From 509ba92a8ed7303a418c5277f7544db2765c3802 Mon Sep 17 00:00:00 2001 | ||||
| From: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| Date: Wed, 2 Jul 2025 17:33:46 +0200 | ||||
| Subject: [PATCH 2/5] Stop requiring DEPLOY_KERNEL/RAMDISK | ||||
|  | ||||
| Ironic has global configuration that allows specifying them, even | ||||
| depending on the architecture. Our ironic-image supports that when | ||||
| IPA downloader is used (and should start supporting explicit variables | ||||
| too). | ||||
|  | ||||
| Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| (cherry picked from commit 0f1ef6cbeb8815f19d853ba5eab1e70c7d85e2ec) | ||||
| --- | ||||
|  pkg/provisioner/ironic/factory.go      |  6 ++---- | ||||
|  pkg/provisioner/ironic/factory_test.go |  9 ++------- | ||||
|  pkg/provisioner/ironic/ironic.go       | 10 +++------- | ||||
|  3 files changed, 7 insertions(+), 18 deletions(-) | ||||
|  | ||||
| diff --git a/pkg/provisioner/ironic/factory.go b/pkg/provisioner/ironic/factory.go | ||||
| index 19571eb0..15f636b3 100644 | ||||
| --- a/pkg/provisioner/ironic/factory.go | ||||
| +++ b/pkg/provisioner/ironic/factory.go | ||||
| @@ -114,10 +114,8 @@ func loadConfigFromEnv(havePreprovImgBuilder bool) (ironicConfig, error) { | ||||
|  	c.deployRamdiskURL = os.Getenv("DEPLOY_RAMDISK_URL") | ||||
|  	c.deployISOURL = os.Getenv("DEPLOY_ISO_URL") | ||||
|  	if !havePreprovImgBuilder { | ||||
| -		if c.deployISOURL == "" && | ||||
| -			(c.deployKernelURL == "" || c.deployRamdiskURL == "") { | ||||
| -			return c, errors.New("either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set") | ||||
| -		} | ||||
| +		// NOTE(dtantsur): with a PreprovisioningImage controller, it makes sense to set only the kernel. | ||||
| +		// Without it, either both or neither must be set. | ||||
|  		if (c.deployKernelURL == "" && c.deployRamdiskURL != "") || | ||||
|  			(c.deployKernelURL != "" && c.deployRamdiskURL == "") { | ||||
|  			return c, errors.New("DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together") | ||||
| diff --git a/pkg/provisioner/ironic/factory_test.go b/pkg/provisioner/ironic/factory_test.go | ||||
| index db47d8b2..0d32eccb 100644 | ||||
| --- a/pkg/provisioner/ironic/factory_test.go | ||||
| +++ b/pkg/provisioner/ironic/factory_test.go | ||||
| @@ -98,24 +98,19 @@ func TestLoadConfigFromEnv(t *testing.T) { | ||||
|  				ramdiskURL: "http://ramdisk", | ||||
|  			}, | ||||
|  		}, | ||||
| -		{ | ||||
| -			name:          "no deploy info", | ||||
| -			env:           EnvFixture{}, | ||||
| -			expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set", | ||||
| -		}, | ||||
|  		{ | ||||
|  			name: "only kernel", | ||||
|  			env: EnvFixture{ | ||||
|  				kernelURL: "http://kernel", | ||||
|  			}, | ||||
| -			expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set", | ||||
| +			expectedError: "DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together", | ||||
|  		}, | ||||
|  		{ | ||||
|  			name: "only ramdisk", | ||||
|  			env: EnvFixture{ | ||||
|  				ramdiskURL: "http://ramdisk", | ||||
|  			}, | ||||
| -			expectedError:         "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set", | ||||
| +			expectedError:         "DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together", | ||||
|  			expectedImgBuildError: "DEPLOY_RAMDISK_URL requires DEPLOY_KERNEL_URL to be set also", | ||||
|  		}, | ||||
|  		{ | ||||
| diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go | ||||
| index 4c4923ad..48db865a 100644 | ||||
| --- a/pkg/provisioner/ironic/ironic.go | ||||
| +++ b/pkg/provisioner/ironic/ironic.go | ||||
| @@ -348,14 +348,10 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat | ||||
|  	switch data.State { | ||||
|  	case metal3api.StateInspecting, | ||||
|  		metal3api.StatePreparing: | ||||
| -		if deployImageInfo == nil { | ||||
| -			if p.config.havePreprovImgBuilder { | ||||
| -				result, err = transientError(provisioner.ErrNeedsPreprovisioningImage) | ||||
| -			} else { | ||||
| -				result, err = operationFailed("no preprovisioning image available") | ||||
| -			} | ||||
| -			return result, err | ||||
| +		if deployImageInfo == nil && p.config.havePreprovImgBuilder { | ||||
| +			result, err = transientError(provisioner.ErrNeedsPreprovisioningImage) | ||||
|  		} | ||||
| +		return result, err | ||||
|  	default: | ||||
|  	} | ||||
|   | ||||
| --  | ||||
| 2.50.1 | ||||
|  | ||||
| @@ -0,0 +1,49 @@ | ||||
| From ea10df866f0fc491cac15ba5005f3b820e1ccecb Mon Sep 17 00:00:00 2001 | ||||
| From: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| Date: Wed, 2 Jul 2025 17:55:48 +0200 | ||||
| Subject: [PATCH 3/5] Remove DEPLOY_KERNEL_URL from deployment scripts for main | ||||
|  | ||||
| Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| (cherry picked from commit ddcf3d915819b6344f79fbcec3e28250b217a597) | ||||
| --- | ||||
|  config/default/ironic.env      | 2 -- | ||||
|  config/overlays/e2e/ironic.env | 2 -- | ||||
|  config/render/capm3.yaml       | 2 -- | ||||
|  3 files changed, 6 deletions(-) | ||||
|  | ||||
| diff --git a/config/default/ironic.env b/config/default/ironic.env | ||||
| index e72cb3c3..3fe36d25 100644 | ||||
| --- a/config/default/ironic.env | ||||
| +++ b/config/default/ironic.env | ||||
| @@ -1,7 +1,5 @@ | ||||
|  HTTP_PORT=6180 | ||||
|  PROVISIONING_INTERFACE=eth2 | ||||
|  DHCP_RANGE=172.22.0.10,172.22.0.100 | ||||
| -DEPLOY_KERNEL_URL=http://172.22.0.2:6180/images/ironic-python-agent.kernel | ||||
| -DEPLOY_RAMDISK_URL=http://172.22.0.2:6180/images/ironic-python-agent.initramfs | ||||
|  IRONIC_ENDPOINT=http://172.22.0.2:6385/v1/ | ||||
|  CACHEURL=http://172.22.0.1/images | ||||
| diff --git a/config/overlays/e2e/ironic.env b/config/overlays/e2e/ironic.env | ||||
| index 44147ae0..6f200720 100644 | ||||
| --- a/config/overlays/e2e/ironic.env | ||||
| +++ b/config/overlays/e2e/ironic.env | ||||
| @@ -1,3 +1 @@ | ||||
| -DEPLOY_KERNEL_URL=http://192.168.222.1:6180/images/ironic-python-agent.kernel | ||||
| -DEPLOY_RAMDISK_URL=http://192.168.222.1:6180/images/ironic-python-agent.initramfs | ||||
|  IRONIC_ENDPOINT=https://192.168.222.1:6385/v1/ | ||||
| diff --git a/config/render/capm3.yaml b/config/render/capm3.yaml | ||||
| index 42283193..7568288f 100644 | ||||
| --- a/config/render/capm3.yaml | ||||
| +++ b/config/render/capm3.yaml | ||||
| @@ -2510,8 +2510,6 @@ subjects: | ||||
|  apiVersion: v1 | ||||
|  data: | ||||
|    CACHEURL: http://172.22.0.1/images | ||||
| -  DEPLOY_KERNEL_URL: http://172.22.0.2:6180/images/ironic-python-agent.kernel | ||||
| -  DEPLOY_RAMDISK_URL: http://172.22.0.2:6180/images/ironic-python-agent.initramfs | ||||
|    DHCP_RANGE: 172.22.0.10,172.22.0.100 | ||||
|    HTTP_PORT: "6180" | ||||
|    IRONIC_ENDPOINT: http://172.22.0.2:6385/v1/ | ||||
| --  | ||||
| 2.50.1 | ||||
|  | ||||
| @@ -0,0 +1,422 @@ | ||||
| From b2e8a1a42c95a3338c9c83a4781ba4744da5ff6a Mon Sep 17 00:00:00 2001 | ||||
| From: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| Date: Tue, 24 Jun 2025 18:53:42 +0200 | ||||
| Subject: [PATCH 4/5] Refactor setting various Ironic properties | ||||
|  | ||||
| Currently, Ironic instance_info and properties fields are populated at | ||||
| random either in most states or before deployment. While potentially | ||||
| convenient, it makes it very hard to reason about the code. | ||||
|  | ||||
| Now, the logic is split into two parts: | ||||
| 1. configureNode (renamed from configureImages) writes fields that are | ||||
|    considered properties of the node itself: CPU architecture, deploy | ||||
|    images, capabilities, etc. | ||||
| 2. getInstanceUpdateOpts (merge of getImageUpdateOptsForNode and | ||||
|    getUpdateOptsForNode) writes fields that are required for deployment | ||||
|    and thus are properties of instance. This includes images, checksums, | ||||
|    runtime capabilities. As an exception, root device hints fall under | ||||
|    this category and thus are now set in instance_info, not properties. | ||||
|  | ||||
| Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| (cherry picked from commit 0c70cba38c926c474f4fa129a7e99ef9827d6ce9) | ||||
| --- | ||||
|  .../metal3.io/baremetalhost_controller.go     |  2 +- | ||||
|  pkg/provisioner/ironic/ironic.go              | 49 +++++------- | ||||
|  pkg/provisioner/ironic/provision_test.go      | 27 +++---- | ||||
|  pkg/provisioner/ironic/register.go            |  3 +- | ||||
|  pkg/provisioner/ironic/register_test.go       | 78 +------------------ | ||||
|  pkg/provisioner/provisioner.go                |  2 +- | ||||
|  6 files changed, 40 insertions(+), 121 deletions(-) | ||||
|  | ||||
| diff --git a/internal/controller/metal3.io/baremetalhost_controller.go b/internal/controller/metal3.io/baremetalhost_controller.go | ||||
| index 1998627e..0d0c9562 100644 | ||||
| --- a/internal/controller/metal3.io/baremetalhost_controller.go | ||||
| +++ b/internal/controller/metal3.io/baremetalhost_controller.go | ||||
| @@ -848,6 +848,7 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf | ||||
|  			PreprovisioningNetworkData: preprovisioningNetworkData, | ||||
|  			HasCustomDeploy:            hasCustomDeploy(info.host), | ||||
|  			DisablePowerOff:            info.host.Spec.DisablePowerOff, | ||||
| +			CPUArchitecture:            getHostArchitecture(info.host), | ||||
|  		}, | ||||
|  		credsChanged, | ||||
|  		info.host.Status.ErrorType == metal3api.RegistrationError) | ||||
| @@ -1271,7 +1272,6 @@ func (r *BareMetalHostReconciler) actionProvisioning(prov provisioner.Provisione | ||||
|  		BootMode:        info.host.Status.Provisioning.BootMode, | ||||
|  		HardwareProfile: hwProf, | ||||
|  		RootDeviceHints: info.host.Status.Provisioning.RootDeviceHints.DeepCopy(), | ||||
| -		CPUArchitecture: getHostArchitecture(info.host), | ||||
|  	}, forceReboot) | ||||
|  	if err != nil { | ||||
|  		return actionError{errors.Wrap(err, "failed to provision")} | ||||
| diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go | ||||
| index 48db865a..b8e6d72b 100644 | ||||
| --- a/pkg/provisioner/ironic/ironic.go | ||||
| +++ b/pkg/provisioner/ironic/ironic.go | ||||
| @@ -311,20 +311,24 @@ func (p *ironicProvisioner) createPXEEnabledNodePort(uuid, macAddress string) er | ||||
|  	return nil | ||||
|  } | ||||
|   | ||||
| -func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) { | ||||
| +func (p *ironicProvisioner) configureNode(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) { | ||||
|  	updater := clients.UpdateOptsBuilder(p.log) | ||||
|   | ||||
|  	deployImageInfo := setDeployImage(p.config, bmcAccess, data.PreprovisioningImage) | ||||
|  	updater.SetDriverInfoOpts(deployImageInfo, ironicNode) | ||||
|   | ||||
| -	// NOTE(dtantsur): It is risky to update image information for active nodes since it may affect the ability to clean up. | ||||
| -	if (data.CurrentImage != nil || data.HasCustomDeploy) && ironicNode.ProvisionState != string(nodes.Active) { | ||||
| -		p.getImageUpdateOptsForNode(ironicNode, data.CurrentImage, data.BootMode, data.HasCustomDeploy, updater) | ||||
| -	} | ||||
|  	updater.SetTopLevelOpt("automated_clean", | ||||
|  		data.AutomatedCleaningMode != metal3api.CleaningModeDisabled, | ||||
|  		ironicNode.AutomatedClean) | ||||
|   | ||||
| +	opts := clients.UpdateOptsData{ | ||||
| +		"capabilities": buildCapabilitiesValue(ironicNode, data.BootMode), | ||||
| +	} | ||||
| +	if data.CPUArchitecture != "" { | ||||
| +		opts["cpu_arch"] = data.CPUArchitecture | ||||
| +	} | ||||
| +	updater.SetPropertiesOpts(opts, ironicNode) | ||||
| + | ||||
|  	_, success, result, err := p.tryUpdateNode(ironicNode, updater) | ||||
|  	if !success { | ||||
|  		return result, err | ||||
| @@ -656,40 +660,29 @@ func (p *ironicProvisioner) setCustomDeployUpdateOptsForNode(ironicNode *nodes.N | ||||
|  		SetTopLevelOpt("deploy_interface", "custom-agent", ironicNode.DeployInterface) | ||||
|  } | ||||
|   | ||||
| -func (p *ironicProvisioner) getImageUpdateOptsForNode(ironicNode *nodes.Node, imageData *metal3api.Image, bootMode metal3api.BootMode, hasCustomDeploy bool, updater *clients.NodeUpdater) { | ||||
| +func (p *ironicProvisioner) getInstanceUpdateOpts(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater { | ||||
| +	updater := clients.UpdateOptsBuilder(p.log) | ||||
| + | ||||
| +	hasCustomDeploy := data.CustomDeploy != nil && data.CustomDeploy.Method != "" | ||||
| + | ||||
|  	// instance_uuid | ||||
|  	updater.SetTopLevelOpt("instance_uuid", string(p.objectMeta.UID), ironicNode.InstanceUUID) | ||||
|   | ||||
|  	updater.SetInstanceInfoOpts(clients.UpdateOptsData{ | ||||
| -		"capabilities": buildInstanceInfoCapabilities(bootMode), | ||||
| +		"capabilities": buildInstanceInfoCapabilities(data.BootMode), | ||||
| +		"root_device":  devicehints.MakeHintMap(data.RootDeviceHints), | ||||
|  	}, ironicNode) | ||||
|   | ||||
|  	if hasCustomDeploy { | ||||
|  		// Custom deploy process | ||||
| -		p.setCustomDeployUpdateOptsForNode(ironicNode, imageData, updater) | ||||
| -	} else if imageData.IsLiveISO() { | ||||
| +		p.setCustomDeployUpdateOptsForNode(ironicNode, &data.Image, updater) | ||||
| +	} else if data.Image.IsLiveISO() { | ||||
|  		// Set live-iso format options | ||||
| -		p.setLiveIsoUpdateOptsForNode(ironicNode, imageData, updater) | ||||
| +		p.setLiveIsoUpdateOptsForNode(ironicNode, &data.Image, updater) | ||||
|  	} else { | ||||
|  		// Set deploy_interface direct options when not booting a live-iso | ||||
| -		p.setDirectDeployUpdateOptsForNode(ironicNode, imageData, updater) | ||||
| +		p.setDirectDeployUpdateOptsForNode(ironicNode, &data.Image, updater) | ||||
|  	} | ||||
| -} | ||||
| - | ||||
| -func (p *ironicProvisioner) getUpdateOptsForNode(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater { | ||||
| -	updater := clients.UpdateOptsBuilder(p.log) | ||||
| - | ||||
| -	hasCustomDeploy := data.CustomDeploy != nil && data.CustomDeploy.Method != "" | ||||
| -	p.getImageUpdateOptsForNode(ironicNode, &data.Image, data.BootMode, hasCustomDeploy, updater) | ||||
| - | ||||
| -	opts := clients.UpdateOptsData{ | ||||
| -		"root_device":  devicehints.MakeHintMap(data.RootDeviceHints), | ||||
| -		"capabilities": buildCapabilitiesValue(ironicNode, data.BootMode), | ||||
| -	} | ||||
| -	if data.CPUArchitecture != "" { | ||||
| -		opts["cpu_arch"] = data.CPUArchitecture | ||||
| -	} | ||||
| -	updater.SetPropertiesOpts(opts, ironicNode) | ||||
|   | ||||
|  	return updater | ||||
|  } | ||||
| @@ -792,7 +785,7 @@ func (p *ironicProvisioner) setUpForProvisioning(ironicNode *nodes.Node, data pr | ||||
|  	p.log.Info("starting provisioning", "node properties", ironicNode.Properties) | ||||
|   | ||||
|  	ironicNode, success, result, err := p.tryUpdateNode(ironicNode, | ||||
| -		p.getUpdateOptsForNode(ironicNode, data)) | ||||
| +		p.getInstanceUpdateOpts(ironicNode, data)) | ||||
|  	if !success { | ||||
|  		return result, err | ||||
|  	} | ||||
| diff --git a/pkg/provisioner/ironic/provision_test.go b/pkg/provisioner/ironic/provision_test.go | ||||
| index 72ee57b7..40c714e9 100644 | ||||
| --- a/pkg/provisioner/ironic/provision_test.go | ||||
| +++ b/pkg/provisioner/ironic/provision_test.go | ||||
| @@ -713,7 +713,7 @@ func TestGetUpdateOptsForNodeWithRootHints(t *testing.T) { | ||||
|  		BootMode:        metal3api.DefaultBootMode, | ||||
|  		RootDeviceHints: host.Status.Provisioning.RootDeviceHints, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -723,7 +723,7 @@ func TestGetUpdateOptsForNodeWithRootHints(t *testing.T) { | ||||
|  		Value interface{}       // the value being passed to ironic (or value associated with the key) | ||||
|  	}{ | ||||
|  		{ | ||||
| -			Path:  "/properties/root_device", | ||||
| +			Path:  "/instance_info/root_device", | ||||
|  			Value: "userdefined_devicename", | ||||
|  			Map: map[string]string{ | ||||
|  				"name":                 "s== userd_devicename", | ||||
| @@ -807,7 +807,7 @@ func TestGetUpdateOptsForNodeVirtual(t *testing.T) { | ||||
|  		BootMode:        metal3api.DefaultBootMode, | ||||
|  		HardwareProfile: hwProf, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -903,9 +903,8 @@ func TestGetUpdateOptsForNodeDell(t *testing.T) { | ||||
|  		Image:           *host.Spec.Image, | ||||
|  		BootMode:        metal3api.DefaultBootMode, | ||||
|  		HardwareProfile: hwProf, | ||||
| -		CPUArchitecture: "x86_64", | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -930,10 +929,6 @@ func TestGetUpdateOptsForNodeDell(t *testing.T) { | ||||
|  			Path:  "/instance_uuid", | ||||
|  			Value: "27720611-e5d1-45d3-ba3a-222dcfaa4ca2", | ||||
|  		}, | ||||
| -		{ | ||||
| -			Path:  "/properties/cpu_arch", | ||||
| -			Value: "x86_64", | ||||
| -		}, | ||||
|  	} | ||||
|   | ||||
|  	for _, e := range expected { | ||||
| @@ -971,7 +966,7 @@ func TestGetUpdateOptsForNodeLiveIso(t *testing.T) { | ||||
|  		Image:    *host.Spec.Image, | ||||
|  		BootMode: metal3api.DefaultBootMode, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -1038,7 +1033,7 @@ func TestGetUpdateOptsForNodeImageToLiveIso(t *testing.T) { | ||||
|  		Image:    *host.Spec.Image, | ||||
|  		BootMode: metal3api.DefaultBootMode, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -1116,7 +1111,7 @@ func TestGetUpdateOptsForNodeLiveIsoToImage(t *testing.T) { | ||||
|  		Image:    *host.Spec.Image, | ||||
|  		BootMode: metal3api.DefaultBootMode, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -1188,7 +1183,7 @@ func TestGetUpdateOptsForNodeCustomDeploy(t *testing.T) { | ||||
|  		BootMode:     metal3api.DefaultBootMode, | ||||
|  		CustomDeploy: host.Spec.CustomDeploy, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -1245,7 +1240,7 @@ func TestGetUpdateOptsForNodeCustomDeployWithImage(t *testing.T) { | ||||
|  		BootMode:     metal3api.DefaultBootMode, | ||||
|  		CustomDeploy: host.Spec.CustomDeploy, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -1312,7 +1307,7 @@ func TestGetUpdateOptsForNodeImageToCustomDeploy(t *testing.T) { | ||||
|  		BootMode:     metal3api.DefaultBootMode, | ||||
|  		CustomDeploy: host.Spec.CustomDeploy, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| @@ -1405,7 +1400,7 @@ func TestGetUpdateOptsForNodeSecureBoot(t *testing.T) { | ||||
|  		BootMode:        metal3api.UEFISecureBoot, | ||||
|  		HardwareProfile: hwProf, | ||||
|  	} | ||||
| -	patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates | ||||
| +	patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates | ||||
|   | ||||
|  	t.Logf("patches: %v", patches) | ||||
|   | ||||
| diff --git a/pkg/provisioner/ironic/register.go b/pkg/provisioner/ironic/register.go | ||||
| index 390e463f..9a600189 100644 | ||||
| --- a/pkg/provisioner/ironic/register.go | ||||
| +++ b/pkg/provisioner/ironic/register.go | ||||
| @@ -220,7 +220,7 @@ func (p *ironicProvisioner) Register(data provisioner.ManagementAccessData, cred | ||||
|  		fallthrough | ||||
|   | ||||
|  	default: | ||||
| -		result, err = p.configureImages(data, ironicNode, bmcAccess) | ||||
| +		result, err = p.configureNode(data, ironicNode, bmcAccess) | ||||
|  		return result, provID, err | ||||
|  	} | ||||
|  } | ||||
| @@ -246,6 +246,7 @@ func (p *ironicProvisioner) enrollNode(data provisioner.ManagementAccessData, bm | ||||
|  		DisablePowerOff:     &data.DisablePowerOff, | ||||
|  		Properties: map[string]interface{}{ | ||||
|  			"capabilities": buildCapabilitiesValue(nil, data.BootMode), | ||||
| +			"cpu_arch":     data.CPUArchitecture, | ||||
|  		}, | ||||
|  	} | ||||
|   | ||||
| diff --git a/pkg/provisioner/ironic/register_test.go b/pkg/provisioner/ironic/register_test.go | ||||
| index e6c302b5..8e524dad 100644 | ||||
| --- a/pkg/provisioner/ironic/register_test.go | ||||
| +++ b/pkg/provisioner/ironic/register_test.go | ||||
| @@ -72,7 +72,7 @@ func TestRegisterMACOptional(t *testing.T) { | ||||
|  	assert.Equal(t, "", result.ErrorMessage) | ||||
|  } | ||||
|   | ||||
| -func TestRegisterCreateNodeNoImage(t *testing.T) { | ||||
| +func TestRegisterCreateNode(t *testing.T) { | ||||
|  	// Create a host without a bootMACAddress and with a BMC that | ||||
|  	// does not require one. | ||||
|  	host := makeHost() | ||||
| @@ -146,79 +146,6 @@ func TestRegisterCreateNodeOldInspection(t *testing.T) { | ||||
|  	assert.Equal(t, "inspector", createdNode.InspectInterface) | ||||
|  } | ||||
|   | ||||
| -func TestRegisterCreateWithImage(t *testing.T) { | ||||
| -	// Create a host with Image specified in the Spec | ||||
| -	host := makeHost() | ||||
| -	host.Status.Provisioning.ID = "" // so we don't lookup by uuid | ||||
| -	host.Spec.Image.URL = "theimagefoo" | ||||
| -	host.Spec.Image.Checksum = "thechecksumxyz" | ||||
| -	host.Spec.Image.ChecksumType = "auto" | ||||
| - | ||||
| -	var createdNode *nodes.Node | ||||
| - | ||||
| -	createCallback := func(node nodes.Node) { | ||||
| -		createdNode = &node | ||||
| -	} | ||||
| - | ||||
| -	ironic := testserver.NewIronic(t).WithDrivers().CreateNodes(createCallback).NoNode(host.Namespace + nameSeparator + host.Name).NoNode(host.Name) | ||||
| -	ironic.AddDefaultResponse("/v1/nodes/node-0", "PATCH", http.StatusOK, "{}") | ||||
| -	ironic.Start() | ||||
| -	defer ironic.Stop() | ||||
| - | ||||
| -	auth := clients.AuthConfig{Type: clients.NoAuth} | ||||
| -	prov, err := newProvisionerWithSettings(host, bmc.Credentials{}, nullEventPublisher, ironic.Endpoint(), auth) | ||||
| -	if err != nil { | ||||
| -		t.Fatalf("could not create provisioner: %s", err) | ||||
| -	} | ||||
| - | ||||
| -	result, provID, err := prov.Register(provisioner.ManagementAccessData{CurrentImage: host.Spec.Image.DeepCopy()}, false, false) | ||||
| -	if err != nil { | ||||
| -		t.Fatalf("error from Register: %s", err) | ||||
| -	} | ||||
| -	assert.Equal(t, "", result.ErrorMessage) | ||||
| -	assert.Equal(t, createdNode.UUID, provID) | ||||
| -	assert.Equal(t, "", createdNode.DeployInterface) | ||||
| -	updates, _ := ironic.GetLastRequestFor("/v1/nodes/node-0", http.MethodPatch) | ||||
| -	assert.Contains(t, updates, "/instance_info/image_source") | ||||
| -	assert.Contains(t, updates, host.Spec.Image.URL) | ||||
| -	assert.Contains(t, updates, "/instance_info/image_checksum") | ||||
| -	assert.Contains(t, updates, host.Spec.Image.Checksum) | ||||
| -} | ||||
| - | ||||
| -func TestRegisterCreateWithLiveIso(t *testing.T) { | ||||
| -	// Create a host with Image specified in the Spec | ||||
| -	host := makeHostLiveIso() | ||||
| -	host.Status.Provisioning.ID = "" // so we don't lookup by uuid | ||||
| - | ||||
| -	var createdNode *nodes.Node | ||||
| - | ||||
| -	createCallback := func(node nodes.Node) { | ||||
| -		createdNode = &node | ||||
| -	} | ||||
| - | ||||
| -	ironic := testserver.NewIronic(t).WithDrivers().CreateNodes(createCallback).NoNode(host.Namespace + nameSeparator + host.Name).NoNode(host.Name) | ||||
| -	ironic.AddDefaultResponse("/v1/nodes/node-0", "PATCH", http.StatusOK, "{}") | ||||
| -	ironic.Start() | ||||
| -	defer ironic.Stop() | ||||
| - | ||||
| -	auth := clients.AuthConfig{Type: clients.NoAuth} | ||||
| -	prov, err := newProvisionerWithSettings(host, bmc.Credentials{}, nullEventPublisher, ironic.Endpoint(), auth) | ||||
| -	if err != nil { | ||||
| -		t.Fatalf("could not create provisioner: %s", err) | ||||
| -	} | ||||
| - | ||||
| -	result, provID, err := prov.Register(provisioner.ManagementAccessData{CurrentImage: host.Spec.Image.DeepCopy()}, false, false) | ||||
| -	if err != nil { | ||||
| -		t.Fatalf("error from Register: %s", err) | ||||
| -	} | ||||
| -	assert.Equal(t, "", result.ErrorMessage) | ||||
| -	assert.Equal(t, createdNode.UUID, provID) | ||||
| -	assert.Equal(t, "ramdisk", createdNode.DeployInterface) | ||||
| -	updates, _ := ironic.GetLastRequestFor("/v1/nodes/node-0", http.MethodPatch) | ||||
| -	assert.Contains(t, updates, "/instance_info/boot_iso") | ||||
| -	assert.Contains(t, updates, host.Spec.Image.URL) | ||||
| -} | ||||
| - | ||||
|  func TestRegisterExistingNode(t *testing.T) { | ||||
|  	// Create a host without a bootMACAddress and with a BMC that | ||||
|  	// does not require one. | ||||
| @@ -342,6 +269,7 @@ func TestRegisterExistingNodeContinue(t *testing.T) { | ||||
|  					"test_password":  "******", // ironic returns a placeholder | ||||
|  					"test_port":      "42", | ||||
|  				}, | ||||
| +				Properties: map[string]interface{}{"capabilities": ""}, | ||||
|  			}).NodeUpdate(nodes.Node{ | ||||
|  				UUID: "uuid", | ||||
|  			}) | ||||
| @@ -521,6 +449,7 @@ func TestRegisterExistingSteadyStateNoUpdate(t *testing.T) { | ||||
|  				DeployInterface: imageType.DeployInterface, | ||||
|  				InstanceInfo:    imageType.InstanceInfo, | ||||
|  				DriverInfo:      imageType.DriverInfo, | ||||
| +				Properties:      map[string]interface{}{"capabilities": ""}, | ||||
|  			}).NodeUpdate(nodes.Node{ | ||||
|  				UUID: "uuid", | ||||
|  			}) | ||||
| @@ -577,6 +506,7 @@ func TestRegisterExistingNodeWaiting(t *testing.T) { | ||||
|  					"test_password":  "******", // ironic returns a placeholder | ||||
|  					"test_port":      "42", | ||||
|  				}, | ||||
| +				Properties: map[string]interface{}{"capabilities": ""}, | ||||
|  			} | ||||
|  			ironic := testserver.NewIronic(t).CreateNodes(createCallback).Node(node).NodeUpdate(nodes.Node{ | ||||
|  				UUID: "uuid", | ||||
| diff --git a/pkg/provisioner/provisioner.go b/pkg/provisioner/provisioner.go | ||||
| index faddd0fd..e2018e63 100644 | ||||
| --- a/pkg/provisioner/provisioner.go | ||||
| +++ b/pkg/provisioner/provisioner.go | ||||
| @@ -82,6 +82,7 @@ type ManagementAccessData struct { | ||||
|  	PreprovisioningNetworkData string | ||||
|  	HasCustomDeploy            bool | ||||
|  	DisablePowerOff            bool | ||||
| +	CPUArchitecture            string | ||||
|  } | ||||
|   | ||||
|  type AdoptData struct { | ||||
| @@ -122,7 +123,6 @@ type ProvisionData struct { | ||||
|  	HardwareProfile profile.Profile | ||||
|  	RootDeviceHints *metal3api.RootDeviceHints | ||||
|  	CustomDeploy    *metal3api.CustomDeploy | ||||
| -	CPUArchitecture string | ||||
|  } | ||||
|   | ||||
|  type HTTPHeaders []map[string]string | ||||
| --  | ||||
| 2.50.1 | ||||
|  | ||||
| @@ -0,0 +1,46 @@ | ||||
| From 5419f8d95306efed8667936156d8081c21e068ed Mon Sep 17 00:00:00 2001 | ||||
| From: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| Date: Wed, 9 Jul 2025 14:02:23 +0200 | ||||
| Subject: [PATCH 5/5] Provide inline docs for node configuration calls | ||||
|  | ||||
| Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com> | ||||
| (cherry picked from commit 778d9342747aefc8079f1ccaa6a14f83b26f28ff) | ||||
| --- | ||||
|  pkg/provisioner/ironic/ironic.go | 7 +++++++ | ||||
|  1 file changed, 7 insertions(+) | ||||
|  | ||||
| diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go | ||||
| index b8e6d72b..166d929c 100644 | ||||
| --- a/pkg/provisioner/ironic/ironic.go | ||||
| +++ b/pkg/provisioner/ironic/ironic.go | ||||
| @@ -311,6 +311,10 @@ func (p *ironicProvisioner) createPXEEnabledNodePort(uuid, macAddress string) er | ||||
|  	return nil | ||||
|  } | ||||
|   | ||||
| +// configureNode configures Node properties that are not related to any specific provisioning phase. | ||||
| +// It populates the AutomatedClean field, as well as capabilities and architecture in Properties. | ||||
| +// It also calls setDeployImage to populate IPA parameters in DriverInfo and | ||||
| +// checks if the required PreprovisioningImage is provided and ready. | ||||
|  func (p *ironicProvisioner) configureNode(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) { | ||||
|  	updater := clients.UpdateOptsBuilder(p.log) | ||||
|   | ||||
| @@ -426,6 +430,8 @@ func setExternalURL(p *ironicProvisioner, driverInfo map[string]interface{}) map | ||||
|  	return driverInfo | ||||
|  } | ||||
|   | ||||
| +// setDeployImage configures the IPA ramdisk parameters in the Node's DriverInfo. | ||||
| +// It can use either the provided PreprovisioningImage or the global configuration from ironicConfig. | ||||
|  func setDeployImage(config ironicConfig, accessDetails bmc.AccessDetails, hostImage *provisioner.PreprovisioningImage) clients.UpdateOptsData { | ||||
|  	deployImageInfo := clients.UpdateOptsData{ | ||||
|  		deployKernelKey:  nil, | ||||
| @@ -660,6 +666,7 @@ func (p *ironicProvisioner) setCustomDeployUpdateOptsForNode(ironicNode *nodes.N | ||||
|  		SetTopLevelOpt("deploy_interface", "custom-agent", ironicNode.DeployInterface) | ||||
|  } | ||||
|   | ||||
| +// getInstanceUpdateOpts constructs InstanceInfo options required to provision a Node in Ironic. | ||||
|  func (p *ironicProvisioner) getInstanceUpdateOpts(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater { | ||||
|  	updater := clients.UpdateOptsBuilder(p.log) | ||||
|   | ||||
| --  | ||||
| 2.50.1 | ||||
|  | ||||
| @@ -2,7 +2,7 @@ | ||||
|  <service name="obs_scm"> | ||||
|     <param name="url">https://github.com/metal3-io/baremetal-operator</param> | ||||
|     <param name="scm">git</param> | ||||
|     <param name="revision">v0.9.1</param> | ||||
|     <param name="revision">v0.10.2</param> | ||||
|     <param name="version">_auto_</param> | ||||
|     <param name="versionformat">@PARENT_TAG@</param> | ||||
|     <param name="changesgenerate">enable</param> | ||||
|   | ||||
| @@ -17,14 +17,21 @@ | ||||
|  | ||||
|  | ||||
| Name:           baremetal-operator | ||||
| Version:        0.9.1 | ||||
| Version:        0.10.2 | ||||
| Release:        0 | ||||
| Summary:        Implements a Kubernetes API for managing bare metal hosts | ||||
| License:        Apache-2.0 | ||||
| URL:            https://github.com/metal3-io/baremetal-operator | ||||
| Source:         baremetal-operator-%{version}.tar | ||||
| Source1:        vendor.tar.gz | ||||
| BuildRequires:  golang(API) = 1.23 | ||||
| # Patches related to multi-architecture support, upstream PRs #2506 #2559 #2537 | ||||
| Patch0:		0001-Enable-exhaustive-linter.patch | ||||
| Patch1:		0002-Stop-requiring-DEPLOY_KERNEL-RAMDISK.patch | ||||
| Patch2:		0003-Remove-DEPLOY_KERNEL_URL-from-deployment-scripts-for.patch | ||||
| Patch3:		0004-Refactor-setting-various-Ironic-properties.patch | ||||
| Patch4:		0005-Provide-inline-docs-for-node-configuration-calls.patch | ||||
|  | ||||
| BuildRequires:  golang(API) = 1.24 | ||||
| ExcludeArch:    s390 | ||||
| ExcludeArch:    %{ix86} | ||||
|  | ||||
|   | ||||
| @@ -1,9 +1,9 @@ | ||||
| #!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.0_up0.5.0 | ||||
| #!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.0_up0.5.0-%RELEASE% | ||||
| #!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.1_up0.6.0 | ||||
| #!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.1_up0.6.0-%RELEASE% | ||||
| apiVersion: v2 | ||||
| appVersion: 1.61.0 | ||||
| appVersion: 1.62.0 | ||||
| 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 | ||||
| name: cdi | ||||
| type: application | ||||
| version: "%%CHART_MAJOR%%.0.0+up0.5.0" | ||||
| version: "%%CHART_MAJOR%%.0.1+up0.6.0" | ||||
|   | ||||
| @@ -109,9 +109,9 @@ spec: | ||||
|                   description: CDIConfig at CDI level | ||||
|                   properties: | ||||
|                     dataVolumeTTLSeconds: | ||||
|                       description: DataVolumeTTLSeconds is the time in seconds after | ||||
|                         DataVolume completion it can be garbage collected. Disabled | ||||
|                         by default. | ||||
|                       description: |- | ||||
|                         DataVolumeTTLSeconds is the time in seconds after DataVolume completion it can be garbage collected. Disabled by default. | ||||
|                         Deprecated: Removed in v1.62. | ||||
|                       format: int32 | ||||
|                       type: integer | ||||
|                     featureGates: | ||||
| @@ -2641,9 +2641,9 @@ spec: | ||||
|                   description: CDIConfig at CDI level | ||||
|                   properties: | ||||
|                     dataVolumeTTLSeconds: | ||||
|                       description: DataVolumeTTLSeconds is the time in seconds after | ||||
|                         DataVolume completion it can be garbage collected. Disabled | ||||
|                         by default. | ||||
|                       description: |- | ||||
|                         DataVolumeTTLSeconds is the time in seconds after DataVolume completion it can be garbage collected. Disabled by default. | ||||
|                         Deprecated: Removed in v1.62. | ||||
|                       format: int32 | ||||
|                       type: integer | ||||
|                     featureGates: | ||||
|   | ||||
| @@ -599,6 +599,8 @@ spec: | ||||
|   strategy: {} | ||||
|   template: | ||||
|     metadata: | ||||
|       annotations: | ||||
|         openshift.io/required-scc: restricted-v2 | ||||
|       labels: | ||||
|         cdi.kubevirt.io: cdi-operator | ||||
|         name: cdi-operator | ||||
|   | ||||
| @@ -19,3 +19,7 @@ spec: | ||||
|   workload: | ||||
|   {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
|   {{- with .Values.cdi.customizeComponents }} | ||||
|   customizeComponents: | ||||
|   {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
|   | ||||
| @@ -1,12 +1,12 @@ | ||||
| deployment: | ||||
|   version: 1.61.0-150600.3.12.1 | ||||
|   operatorImage: registry.suse.com/suse/sles/15.6/cdi-operator | ||||
|   controllerImage: registry.suse.com/suse/sles/15.6/cdi-controller | ||||
|   importerImage: registry.suse.com/suse/sles/15.6/cdi-importer | ||||
|   clonerImage: registry.suse.com/suse/sles/15.6/cdi-cloner | ||||
|   apiserverImage: registry.suse.com/suse/sles/15.6/cdi-apiserver | ||||
|   uploadserverImage: registry.suse.com/suse/sles/15.6/cdi-uploadserver | ||||
|   uploadproxyImage: registry.suse.com/suse/sles/15.6/cdi-uploadproxy | ||||
|   version: 1.62.0-150700.9.3.1 | ||||
|   operatorImage: registry.suse.com/suse/sles/15.7/cdi-operator | ||||
|   controllerImage: registry.suse.com/suse/sles/15.7/cdi-controller | ||||
|   importerImage: registry.suse.com/suse/sles/15.7/cdi-importer | ||||
|   clonerImage: registry.suse.com/suse/sles/15.7/cdi-cloner | ||||
|   apiserverImage: registry.suse.com/suse/sles/15.7/cdi-apiserver | ||||
|   uploadserverImage: registry.suse.com/suse/sles/15.7/cdi-uploadserver | ||||
|   uploadproxyImage: registry.suse.com/suse/sles/15.7/cdi-uploadproxy | ||||
|   pullPolicy: IfNotPresent | ||||
|   affinity: | ||||
|     podAffinity: | ||||
| @@ -30,6 +30,7 @@ cdi: | ||||
|     featureGates: | ||||
|       - HonorWaitForFirstConsumer | ||||
|   imagePullPolicy: "IfNotPresent" | ||||
|   customizeComponents: {} | ||||
|   infra: | ||||
|     nodeSelector: | ||||
|       kubernetes.io/os: linux | ||||
| @@ -41,7 +42,7 @@ cdi: | ||||
|     nodeSelector: | ||||
|       kubernetes.io/os: linux | ||||
|  | ||||
| hookImage: registry.rancher.com/rancher/kubectl:v1.30.10 | ||||
| hookImage: registry.rancher.com/rancher/kubectl:v1.33.1 | ||||
| hookRestartPolicy: OnFailure | ||||
| hookSecurityContext: | ||||
|   seccompProfile: | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| #!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1 | ||||
| #!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1-%RELEASE% | ||||
| #!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.3.0 | ||||
| #!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.3.0-%RELEASE% | ||||
| ARG SLE_VERSION | ||||
| FROM registry.suse.com/bci/bci-base:$SLE_VERSION | ||||
| MAINTAINER SUSE LLC (https://www.suse.com/) | ||||
| @@ -14,11 +14,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.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.version="1.2.1" | ||||
| LABEL org.opencontainers.image.version="1.3.0" | ||||
| 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%%edge-image-builder:1.2.1-%RELEASE%" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%edge-image-builder:1.3.0-%RELEASE%" | ||||
| LABEL org.openbuildservice.disturl="%DISTURL%" | ||||
| LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%" | ||||
| LABEL com.suse.eula="SUSE Combined EULA February 2024" | ||||
|   | ||||
| @@ -10,6 +10,10 @@ kubernetes: | ||||
|   k3s: | ||||
|     selinuxPackage: k3s-selinux-1.6-1.slemicro.noarch | ||||
|     selinuxRepository: https://rpm.rancher.io/k3s/stable/common/slemicro/noarch | ||||
|     selinuxRepositoryPriority: 1 | ||||
|     releaseURL: https://github.com/k3s-io/k3s/releases/download/ | ||||
|   rke2: | ||||
|     selinuxPackage: rke2-selinux | ||||
|     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="scm">git</param> | ||||
|     <param name="exclude">.git</param> | ||||
|     <param name="revision">v1.2.1</param> | ||||
|     <param name="revision">v1.3.0</param> | ||||
|     <!-- Uncomment and set this For Pre-Release Version --> | ||||
|     <!-- <param name="version">1.2.0~rc1</param> --> | ||||
|     <!-- <param name="version">1.3.0</param> --> | ||||
|     <!-- Uncomment and this for regular version --> | ||||
|     <param name="versionformat">@PARENT_TAG@</param> | ||||
|     <param name="versionrewrite-pattern">v(\d+).(\d+).(\d+)</param> | ||||
|   | ||||
| @@ -17,7 +17,7 @@ | ||||
|  | ||||
|  | ||||
| Name:           edge-image-builder | ||||
| Version:        1.2.1 | ||||
| Version:        1.3.0 | ||||
| Release:        0 | ||||
| Summary:        Edge Image Builder | ||||
| License:        Apache-2.0 | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|     <param name="versionformat">@PARENT_TAG@</param> | ||||
|     <param name="scm">git</param> | ||||
|     <param name="exclude">.get</param> | ||||
|     <param name="revision">v1.2.1</param> | ||||
|     <param name="revision">v1.2.5</param> | ||||
|     <param name="versionrewrite-pattern">v(.*)</param> | ||||
|     <param name="changesgenerate">enable</param> | ||||
|   </service> | ||||
|   | ||||
| @@ -18,7 +18,7 @@ | ||||
| %define project github.com/hauler-dev/hauler | ||||
|  | ||||
| Name:           hauler | ||||
| Version:        1.2.1 | ||||
| Version:        1.2.5 | ||||
| Release:        0 | ||||
| Summary:        Airgap Swiss Army Knife | ||||
| License:        Apache-2.0 | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.1 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.1-%RELEASE% | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.4 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.4-%RELEASE% | ||||
|  | ||||
| ARG SLE_VERSION | ||||
| FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro | ||||
| @@ -41,8 +41,8 @@ LABEL org.opencontainers.image.description="Openstack Ironic based on the SLE Ba | ||||
| LABEL org.opencontainers.image.url="https://www.suse.com/products/server/" | ||||
| LABEL org.opencontainers.image.created="%BUILDTIME%" | ||||
| LABEL org.opencontainers.image.vendor="SUSE LLC" | ||||
| LABEL org.opencontainers.image.version="29.0.4.1" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:29.0.4.1-%RELEASE%" | ||||
| LABEL org.opencontainers.image.version="29.0.4.4" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:29.0.4.4-%RELEASE%" | ||||
| LABEL org.openbuildservice.disturl="%DISTURL%" | ||||
| LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%" | ||||
| LABEL com.suse.eula="SUSE Combined EULA February 2024" | ||||
| @@ -88,8 +88,7 @@ RUN if [ "$(uname -m)" = "aarch64" ]; then\ | ||||
|       cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\ | ||||
|     fi | ||||
|      | ||||
| COPY --from=base /tmp/esp-x86_64.img /tmp/uefi_esp-x86_64.img | ||||
| COPY --from=base /tmp/esp-aarch64.img /tmp/uefi_esp-arm64.img | ||||
| COPY --from=base /tmp/uefi_esp_*.img /templates/ | ||||
|  | ||||
| COPY ironic-config/ironic.conf.j2 ironic-config/network-data-schema-empty.json /etc/ironic/ | ||||
|  | ||||
|   | ||||
| @@ -11,6 +11,19 @@ Listen [::]:{{ env.VMEDIA_TLS_PORT }} | ||||
|     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 | ||||
|   | ||||
| @@ -91,21 +91,23 @@ send_sensor_data = {{ env.SEND_SENSOR_DATA }} | ||||
| # Power state is checked every 60 seconds and BMC activity should | ||||
| # be avoided more often than once every sixty seconds. | ||||
| send_sensor_data_interval = 160 | ||||
| {% if env.VMEDIA_TLS_PORT %} | ||||
| bootloader = {{ env.IRONIC_HTTPS_VMEDIA_URL }}/uefi_esp-{{ env.DEPLOY_ARCHITECTURE }}.img | ||||
| {% else %} | ||||
| bootloader = {{ env.IRONIC_HTTP_URL }}/uefi_esp-{{ env.DEPLOY_ARCHITECTURE }}.img | ||||
| {% endif %} | ||||
| bootloader_by_arch = {{ env.BOOTLOADER_BY_ARCH }} | ||||
| verify_step_priority_override = management.clear_job_queue:90 | ||||
| # We don't use this feature, and it creates an additional load on the database | ||||
| node_history = False | ||||
| # Provide for a timeout longer than 60 seconds for certain vendor's hardware | ||||
| power_state_change_timeout = 120 | ||||
| {% if env.IRONIC_DEFAULT_KERNEL is defined %} | ||||
| deploy_kernel = file://{{ env.IRONIC_DEFAULT_KERNEL }} | ||||
| {% if env.DEPLOY_KERNEL_URL is defined %} | ||||
| deploy_kernel = {{ env.DEPLOY_KERNEL_URL }} | ||||
| {% endif %} | ||||
| {% if env.IRONIC_DEFAULT_RAMDISK is defined %} | ||||
| deploy_ramdisk = file://{{ env.IRONIC_DEFAULT_RAMDISK }} | ||||
| {% if env.DEPLOY_KERNEL_BY_ARCH is defined %} | ||||
| deploy_kernel_by_arch = {{ env.DEPLOY_KERNEL_BY_ARCH }} | ||||
| {% 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 | ||||
| @@ -211,7 +213,7 @@ images_path = /shared/html/tmp | ||||
| instance_master_path = /shared/html/master_images | ||||
| tftp_master_path = /shared/tftpboot/master_images | ||||
| tftp_root = /shared/tftpboot | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }} | ||||
| # This makes networking boot templates generated even for nodes using local | ||||
| # boot (the default), ensuring that they boot correctly even if they start | ||||
| # netbooting for some reason (e.g. with the noop management interface). | ||||
| @@ -224,14 +226,14 @@ ipxe_config_template = /tmp/ipxe_config.template | ||||
|  | ||||
| [redfish] | ||||
| use_swift = false | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }} | ||||
|  | ||||
| [ilo] | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }} | ||||
| use_web_server_for_images = true | ||||
|  | ||||
| [irmc] | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes | ||||
| kernel_append_params = nofb nomodeset vga=normal ipa-insecure={{ env.IPA_INSECURE }} {% if env.ENABLE_FIPS_IPA %}fips={{ env.ENABLE_FIPS_IPA|trim }}{% endif %} {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} systemd.journald.forward_to_console=yes net.ifnames={{ '0' if env.PREDICTABLE_NIC_NAMES == 'false' else '1' }} | ||||
|  | ||||
| [service_catalog] | ||||
| endpoint_override = {{ env.IRONIC_BASE_URL }} | ||||
|   | ||||
| @@ -9,7 +9,7 @@ declare -A efi_arch=( | ||||
|  | ||||
| for arch in "${!efi_arch[@]}"; do | ||||
|    | ||||
|   DEST=/tmp/esp-${arch}.img | ||||
|   DEST=/tmp/uefi_esp_${arch}.img | ||||
|  | ||||
|   dd bs=1024 count=6400 if=/dev/zero of=$DEST | ||||
|   mkfs.msdos -F 12 -n 'ESP_IMAGE' $DEST | ||||
|   | ||||
| @@ -76,10 +76,41 @@ if [[ -n "$IRONIC_EXTERNAL_IP" ]]; then | ||||
|     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" | ||||
| 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 | ||||
| @@ -87,6 +118,13 @@ if [[ -f "${IRONIC_CONF_DIR}/ironic.conf" ]]; then | ||||
|     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 | ||||
|   | ||||
| @@ -37,7 +37,6 @@ export INSPECTOR_EXTRA_ARGS | ||||
|  | ||||
| # Copy files to shared mount | ||||
| render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe | ||||
| cp /tmp/uefi_esp*.img /shared/html/ | ||||
| # cp -r /etc/httpd/* "${HTTPD_DIR}" | ||||
| if [[ -f "${HTTPD_CONF_DIR}/httpd.conf" ]]; then | ||||
|     mv "${HTTPD_CONF_DIR}/httpd.conf" "${HTTPD_CONF_DIR}/httpd.conf.example" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE% | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.10 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE% | ||||
| ARG SLE_VERSION | ||||
| 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.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.version="3.0.8" | ||||
| LABEL org.opencontainers.image.version="3.0.10" | ||||
| LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/" | ||||
| LABEL org.opencontainers.image.created="%BUILDTIME%" | ||||
| LABEL org.opencontainers.image.vendor="SUSE LLC" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE%" | ||||
| LABEL org.openbuildservice.disturl="%DISTURL%" | ||||
| LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%" | ||||
| LABEL com.suse.eula="SUSE Combined EULA February 2024" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8-%RELEASE% | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.10 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.10-%RELEASE% | ||||
| ARG SLE_VERSION | ||||
| 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.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.version="3.0.8" | ||||
| LABEL org.opencontainers.image.version="3.0.10" | ||||
| LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/" | ||||
| LABEL org.opencontainers.image.created="%BUILDTIME%" | ||||
| LABEL org.opencontainers.image.vendor="SUSE LLC" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE%" | ||||
| LABEL org.openbuildservice.disturl="%DISTURL%" | ||||
| LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%" | ||||
| LABEL com.suse.eula="SUSE Combined EULA February 2024" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8-%RELEASE% | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.10 | ||||
| #!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.10-%RELEASE% | ||||
| ARG SLE_VERSION | ||||
| 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.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.version="3.0.8" | ||||
| LABEL org.opencontainers.image.version="3.0.10" | ||||
| LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/" | ||||
| LABEL org.opencontainers.image.created="%BUILDTIME%" | ||||
| LABEL org.opencontainers.image.vendor="SUSE LLC" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.10-%RELEASE%" | ||||
| LABEL org.openbuildservice.disturl="%DISTURL%" | ||||
| LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%" | ||||
| LABEL com.suse.eula="SUSE Combined EULA February 2024" | ||||
|   | ||||
| @@ -29,13 +29,12 @@ if [ -z "${IPA_BASEURI}" ]; then | ||||
|   # SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages | ||||
|   mkdir -p /shared/html/images | ||||
|   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}/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent-x86_64.kernel | ||||
|     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 | ||||
|   fi | ||||
|   # Use arm64 as destination for iPXE compatibility | ||||
|   if [ -f ${IMAGES_BASE_PATH}/initrd-aarch64.zst ]; then | ||||
|     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-arm64.kernel | ||||
|     cp ${IMAGES_BASE_PATH}/initrd-aarch64.zst /shared/html/images/ironic-python-agent_aarch64.initramfs | ||||
|     cp ${IMAGES_BASE_PATH}/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent_aarch64.kernel | ||||
|   fi | ||||
|  | ||||
|   cp /tmp/images.sha256 /shared/images.sha256 | ||||
| @@ -87,8 +86,8 @@ else | ||||
|       chmod 755 "$TMPDIR" | ||||
|       mv "$TMPDIR" "$FILENAME-$ETAG" | ||||
|       ln -sf "$FILENAME-$ETAG/$FFILENAME.headers" "$FFILENAME.headers" | ||||
|       ln -sf "$FILENAME-$ETAG/$FILENAME.initramfs" "$FILENAME-${ARCH,,}.initramfs" | ||||
|       ln -sf "$FILENAME-$ETAG/$FILENAME.kernel" "$FILENAME-${ARCH,,}.kernel" | ||||
|       ln -sf "$FILENAME-$ETAG/$FILENAME.initramfs" "${FILENAME}_${ARCH,,}.initramfs" | ||||
|       ln -sf "$FILENAME-$ETAG/$FILENAME.kernel" "${FILENAME}_${ARCH,,}.kernel" | ||||
|        | ||||
|       IMAGE_CHANGED=1 | ||||
|   else | ||||
| @@ -100,7 +99,7 @@ if [ "${CERTS_CHANGED:-0}" = "1" ] || [ "${IMAGE_CHANGED:-0}" = "1" ]; then | ||||
|   mkdir -p /tmp/ca/tmp-initrd && cd /tmp/ca/tmp-initrd | ||||
|   mkdir -p 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}" | ||||
|   done | ||||
|   cp /tmp/certificates.sha256 /shared/certificates.sha256 | ||||
|   | ||||
| @@ -16,7 +16,7 @@ baseSetupBuildDay | ||||
| #========================================== | ||||
| # remove unneded kernel files | ||||
| #------------------------------------------ | ||||
| suseStripKernel | ||||
| #suseStripKernel | ||||
| baseStripLocales en_US.utf-8 C.utf8 | ||||
|  | ||||
| #====================================== | ||||
|   | ||||
| @@ -28,68 +28,6 @@ | ||||
|       <source path="dir:///.build.binaries"/> | ||||
|     </repository> | ||||
|  | ||||
|     <drivers> | ||||
|         <file name="crypto/*"/> | ||||
|         <file name="drivers/acpi/*"/> | ||||
|         <file name="drivers/acpi/dock.ko"/> | ||||
|         <file name="drivers/ata/*"/> | ||||
|         <file name="drivers/block/brd.ko"/> | ||||
|         <file name="drivers/block/cciss.ko"/> | ||||
|         <file name="drivers/block/loop.ko"/> | ||||
|         <file name="drivers/block/virtio_blk.ko"/> | ||||
|         <file name="drivers/cdrom/*"/> | ||||
|         <file name="drivers/char/hw_random/virtio-rng.ko"/> | ||||
|         <file name="drivers/char/lp.ko"/> | ||||
|         <file name="drivers/char/ipmi/*"/> | ||||
|         <file name="drivers/firmware/iscsi_ibft.ko"/> | ||||
|         <file name="drivers/firmware/edd.ko"/> | ||||
|         <file name="drivers/gpu/drm/*"/> | ||||
|         <file name="drivers/hid/*"/> | ||||
|         <file name="drivers/hv/*"/> | ||||
|         <file name="drivers/hwmon/*"/> | ||||
|         <file name="drivers/ide/*"/> | ||||
|         <file name="drivers/input/keyboard/*"/> | ||||
|         <file name="drivers/input/mouse/*"/> | ||||
|         <file name="drivers/md/*"/> | ||||
|         <file name="drivers/message/fusion/*"/> | ||||
|         <file name="drivers/misc/hpilo.ko"/> | ||||
|         <file name="drivers/net/*"/> | ||||
|         <file name="drivers/parport/*"/> | ||||
|         <file name="drivers/scsi/*"/> | ||||
|         <file name="drivers/staging/hv/*"/> | ||||
|         <file name="drivers/target/*"/> | ||||
|         <file name="drivers/thermal/*"/> | ||||
|         <file name="drivers/usb/*"/> | ||||
|         <file name="drivers/virtio/*"/> | ||||
|         <file name="fs/binfmt_aout.ko"/> | ||||
|         <file name="fs/binfmt_misc.ko"/> | ||||
|         <file name="fs/overlayfs/*"/> | ||||
|         <file name="fs/btrfs/*"/> | ||||
|         <file name="fs/exportfs/*"/> | ||||
|         <file name="fs/ext4/*"/> | ||||
|         <file name="fs/fat/*"/> | ||||
|         <file name="fs/fuse/*"/> | ||||
|         <file name="fs/hfs/*"/> | ||||
|         <file name="fs/jbd2/*"/> | ||||
|         <file name="fs/nfs/*"/> | ||||
|         <file name="fs/mbcache.ko"/> | ||||
|         <file name="fs/nls/nls_cp437.ko"/> | ||||
|         <file name="fs/nls/nls_iso8859-1.ko"/> | ||||
|         <file name="fs/nls/nls_utf8.ko"/> | ||||
|         <file name="fs/quota_v1.ko"/> | ||||
|         <file name="fs/quota_v2.ko"/> | ||||
|         <file name="fs/squashfs/*"/> | ||||
|         <file name="fs/udf/*"/> | ||||
|         <file name="fs/vfat/*"/> | ||||
|         <file name="fs/xfs/*"/> | ||||
|         <file name="fs/isofs/*"/> | ||||
|         <file name="lib/crc-t10dif.ko"/> | ||||
|         <file name="lib/crc16.ko"/> | ||||
|         <file name="lib/libcrc32c.ko"/> | ||||
|         <file name="lib/zlib_deflate/zlib_deflate.ko"/> | ||||
|         <file name="net/packet/*"/> | ||||
|     </drivers> | ||||
|  | ||||
|     <packages type="delete"> | ||||
|         <package name="gpg2"/> | ||||
|         <package name="libcairo2"/> | ||||
|   | ||||
| @@ -19,7 +19,7 @@ | ||||
|  | ||||
|  | ||||
| Name:           ironic-ipa-ramdisk | ||||
| Version:        3.0.7 | ||||
| Version:        3.0.8 | ||||
| Release:        0 | ||||
| Summary:        Kernel and ramdisk image for OpenStack Ironic | ||||
| License:        SUSE-EULA | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| #!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4 | ||||
| #!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4-%RELEASE% | ||||
| #!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4 | ||||
| #!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4-%RELEASE% | ||||
| ARG SLE_VERSION | ||||
| FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro | ||||
|  | ||||
| @@ -15,11 +15,11 @@ FROM micro AS final | ||||
| LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)" | ||||
| LABEL org.opencontainers.image.title="SLE kubectl image" | ||||
| LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image." | ||||
| LABEL org.opencontainers.image.version="1.32.4" | ||||
| LABEL org.opencontainers.image.version="1.33.4" | ||||
| LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/" | ||||
| LABEL org.opencontainers.image.created="%BUILDTIME%" | ||||
| LABEL org.opencontainers.image.vendor="SUSE LLC" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.32.4-%RELEASE%" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.33.4-%RELEASE%" | ||||
| LABEL org.openbuildservice.disturl="%DISTURL%" | ||||
| LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%" | ||||
| LABEL com.suse.eula="SUSE Combined EULA February 2024" | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| %global debug_package %{nil} | ||||
|  | ||||
| Name: kubectl | ||||
| Version: 1.32.4 | ||||
| Version: 1.33.4 | ||||
| Release: 0 | ||||
| Summary: Command-line utility for interacting with a Kubernetes cluster | ||||
|  | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								kubectl/kubectl_1.32.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								kubectl/kubectl_1.32.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								kubectl/kubectl_1.33.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								kubectl/kubectl_1.33.4.orig.tar.gz
									 (Stored with Git LFS)
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,9 +1,9 @@ | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.0_up0.5.0-%RELEASE% | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.0_up0.5.0 | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.1_up0.6.0-%RELEASE% | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.1_up0.6.0 | ||||
| apiVersion: v2 | ||||
| appVersion: 1.4.0 | ||||
| appVersion: 1.5.2 | ||||
| description: A Helm chart for KubeVirt | ||||
| icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg | ||||
| name: kubevirt | ||||
| type: application | ||||
| version: "%%CHART_MAJOR%%.0.0+up0.5.0" | ||||
| version: "%%CHART_MAJOR%%.0.1+up0.6.0" | ||||
|   | ||||
| @@ -593,6 +593,13 @@ spec: | ||||
|                             If set to true, migrations will still start in pre-copy, but switch to post-copy when | ||||
|                             CompletionTimeoutPerGiB triggers. Defaults to false | ||||
|                           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: | ||||
|                           anyOf: | ||||
|                             - type: integer | ||||
| @@ -605,8 +612,8 @@ spec: | ||||
|                         completionTimeoutPerGiB: | ||||
|                           description: |- | ||||
|                             CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take. | ||||
|                             If a live-migration takes longer to migrate than this value multiplied by the size of the VMI, | ||||
|                             the migration will be cancelled, unless AllowPostCopy is true. Defaults to 150 | ||||
|                             If the timeout is reached, the migration will be either paused, switched | ||||
|                             to post-copy or cancelled depending on other settings. Defaults to 150 | ||||
|                           format: int64 | ||||
|                           type: integer | ||||
|                         disableTLS: | ||||
| @@ -964,17 +971,17 @@ spec: | ||||
|                           type: object | ||||
|                       type: object | ||||
|                     vmRolloutStrategy: | ||||
|                       description: VMRolloutStrategy defines how changes to a VM object | ||||
|                         propagate to its VMI | ||||
|                       description: |- | ||||
|                         VMRolloutStrategy defines how live-updatable fields, like CPU sockets, memory, | ||||
|                         tolerations, and affinity, are propagated from a VM to its VMI. | ||||
|                       enum: | ||||
|                         - Stage | ||||
|                         - LiveUpdate | ||||
|                       nullable: true | ||||
|                       type: string | ||||
|                     vmStateStorageClass: | ||||
|                       description: |- | ||||
|                         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. | ||||
|                       description: VMStateStorageClass is the name of the storage class | ||||
|                         to use for the PVCs created to preserve VM state, like TPM. | ||||
|                       type: string | ||||
|                     webhookConfiguration: | ||||
|                       description: |- | ||||
| @@ -3850,6 +3857,13 @@ spec: | ||||
|                             If set to true, migrations will still start in pre-copy, but switch to post-copy when | ||||
|                             CompletionTimeoutPerGiB triggers. Defaults to false | ||||
|                           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: | ||||
|                           anyOf: | ||||
|                             - type: integer | ||||
| @@ -3862,8 +3876,8 @@ spec: | ||||
|                         completionTimeoutPerGiB: | ||||
|                           description: |- | ||||
|                             CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take. | ||||
|                             If a live-migration takes longer to migrate than this value multiplied by the size of the VMI, | ||||
|                             the migration will be cancelled, unless AllowPostCopy is true. Defaults to 150 | ||||
|                             If the timeout is reached, the migration will be either paused, switched | ||||
|                             to post-copy or cancelled depending on other settings. Defaults to 150 | ||||
|                           format: int64 | ||||
|                           type: integer | ||||
|                         disableTLS: | ||||
| @@ -4221,17 +4235,17 @@ spec: | ||||
|                           type: object | ||||
|                       type: object | ||||
|                     vmRolloutStrategy: | ||||
|                       description: VMRolloutStrategy defines how changes to a VM object | ||||
|                         propagate to its VMI | ||||
|                       description: |- | ||||
|                         VMRolloutStrategy defines how live-updatable fields, like CPU sockets, memory, | ||||
|                         tolerations, and affinity, are propagated from a VM to its VMI. | ||||
|                       enum: | ||||
|                         - Stage | ||||
|                         - LiveUpdate | ||||
|                       nullable: true | ||||
|                       type: string | ||||
|                     vmStateStorageClass: | ||||
|                       description: |- | ||||
|                         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. | ||||
|                       description: VMStateStorageClass is the name of the storage class | ||||
|                         to use for the PVCs created to preserve VM state, like TPM. | ||||
|                       type: string | ||||
|                     webhookConfiguration: | ||||
|                       description: |- | ||||
|   | ||||
| @@ -608,6 +608,7 @@ rules: | ||||
|     resources: | ||||
|       - virtualmachinesnapshots | ||||
|       - virtualmachinesnapshots/status | ||||
|       - virtualmachinesnapshots/finalizers | ||||
|       - virtualmachinesnapshotcontents | ||||
|       - virtualmachinesnapshotcontents/status | ||||
|       - virtualmachinesnapshotcontents/finalizers | ||||
| @@ -660,15 +661,18 @@ rules: | ||||
|       - kubevirt.io | ||||
|     resources: | ||||
|       - virtualmachines/finalizers | ||||
|       - virtualmachineinstances/finalizers | ||||
|     verbs: | ||||
|       - update | ||||
|   - apiGroups: | ||||
|       - subresources.kubevirt.io | ||||
|     resources: | ||||
|       - virtualmachines/stop | ||||
|       - virtualmachineinstances/addvolume | ||||
|       - virtualmachineinstances/removevolume | ||||
|       - virtualmachineinstances/freeze | ||||
|       - virtualmachineinstances/unfreeze | ||||
|       - virtualmachineinstances/reset | ||||
|       - virtualmachineinstances/softreboot | ||||
|       - virtualmachineinstances/sev/setupsession | ||||
|       - virtualmachineinstances/sev/injectlaunchsecret | ||||
| @@ -772,6 +776,14 @@ rules: | ||||
|     verbs: | ||||
|       - list | ||||
|       - watch | ||||
|   - apiGroups: | ||||
|       - batch | ||||
|     resources: | ||||
|       - jobs | ||||
|     verbs: | ||||
|       - create | ||||
|       - get | ||||
|       - delete | ||||
|   - apiGroups: | ||||
|       - kubevirt.io | ||||
|     resources: | ||||
| @@ -883,6 +895,7 @@ rules: | ||||
|       - virtualmachineinstances/freeze | ||||
|       - virtualmachineinstances/unfreeze | ||||
|       - virtualmachineinstances/softreboot | ||||
|       - virtualmachineinstances/reset | ||||
|       - virtualmachineinstances/sev/setupsession | ||||
|       - virtualmachineinstances/sev/injectlaunchsecret | ||||
|     verbs: | ||||
| @@ -902,7 +915,6 @@ rules: | ||||
|       - virtualmachines/restart | ||||
|       - virtualmachines/addvolume | ||||
|       - virtualmachines/removevolume | ||||
|       - virtualmachines/migrate | ||||
|       - virtualmachines/memorydump | ||||
|     verbs: | ||||
|       - update | ||||
| @@ -919,7 +931,6 @@ rules: | ||||
|       - virtualmachineinstances | ||||
|       - virtualmachineinstancepresets | ||||
|       - virtualmachineinstancereplicasets | ||||
|       - virtualmachineinstancemigrations | ||||
|     verbs: | ||||
|       - get | ||||
|       - delete | ||||
| @@ -929,6 +940,14 @@ rules: | ||||
|       - list | ||||
|       - watch | ||||
|       - deletecollection | ||||
|   - apiGroups: | ||||
|       - kubevirt.io | ||||
|     resources: | ||||
|       - virtualmachineinstancemigrations | ||||
|     verbs: | ||||
|       - get | ||||
|       - list | ||||
|       - watch | ||||
|   - apiGroups: | ||||
|       - snapshot.kubevirt.io | ||||
|     resources: | ||||
| @@ -1032,6 +1051,7 @@ rules: | ||||
|       - virtualmachineinstances/freeze | ||||
|       - virtualmachineinstances/unfreeze | ||||
|       - virtualmachineinstances/softreboot | ||||
|       - virtualmachineinstances/reset | ||||
|       - virtualmachineinstances/sev/setupsession | ||||
|       - virtualmachineinstances/sev/injectlaunchsecret | ||||
|     verbs: | ||||
| @@ -1051,7 +1071,6 @@ rules: | ||||
|       - virtualmachines/restart | ||||
|       - virtualmachines/addvolume | ||||
|       - virtualmachines/removevolume | ||||
|       - virtualmachines/migrate | ||||
|       - virtualmachines/memorydump | ||||
|     verbs: | ||||
|       - update | ||||
| @@ -1068,7 +1087,6 @@ rules: | ||||
|       - virtualmachineinstances | ||||
|       - virtualmachineinstancepresets | ||||
|       - virtualmachineinstancereplicasets | ||||
|       - virtualmachineinstancemigrations | ||||
|     verbs: | ||||
|       - get | ||||
|       - delete | ||||
| @@ -1077,6 +1095,14 @@ rules: | ||||
|       - patch | ||||
|       - list | ||||
|       - watch | ||||
|   - apiGroups: | ||||
|       - kubevirt.io | ||||
|     resources: | ||||
|       - virtualmachineinstancemigrations | ||||
|     verbs: | ||||
|       - get | ||||
|       - list | ||||
|       - watch | ||||
|   - apiGroups: | ||||
|       - snapshot.kubevirt.io | ||||
|     resources: | ||||
| @@ -1255,6 +1281,25 @@ rules: | ||||
|       - get | ||||
|       - list | ||||
|       - 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: | ||||
|       - authentication.k8s.io | ||||
|     resources: | ||||
| @@ -1300,6 +1345,8 @@ spec: | ||||
|     type: RollingUpdate | ||||
|   template: | ||||
|     metadata: | ||||
|       annotations: | ||||
|         openshift.io/required-scc: restricted-v2 | ||||
|       labels: | ||||
|         kubevirt.io: virt-operator | ||||
|         name: virt-operator | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| operator: | ||||
|   image: registry.suse.com/suse/sles/15.6/virt-operator | ||||
|   version: 1.4.0-150600.5.15.1 | ||||
|   image: registry.suse.com/suse/sles/15.7/virt-operator | ||||
|   version: 1.5.2-150700.3.5.2 | ||||
|   replicas: 2 | ||||
|   pullPolicy: IfNotPresent | ||||
|   affinity: | ||||
| @@ -40,7 +40,7 @@ kubevirt: | ||||
|   monitorAccount: "" | ||||
|   monitorNamespace: "" | ||||
|  | ||||
| hookImage: registry.rancher.com/rancher/kubectl:v1.30.10 | ||||
| hookImage: registry.rancher.com/rancher/kubectl:v1.33.1 | ||||
| hookRestartPolicy: OnFailure | ||||
| hookSecurityContext: | ||||
|   seccompProfile: | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2 | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2-%RELEASE% | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.2 | ||||
| #!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.2-%RELEASE% | ||||
| annotations: | ||||
|   catalog.cattle.io/certified: rancher | ||||
|   catalog.cattle.io/namespace: cattle-ui-plugin-system | ||||
| @@ -12,10 +12,10 @@ annotations: | ||||
|   catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0' | ||||
|   catalog.cattle.io/kube-version: '>= v1.26.0-0' | ||||
| apiVersion: v2 | ||||
| appVersion: 303.0.2+up1.3.2 | ||||
| appVersion: 304.0.3+up1.3.2 | ||||
| description: 'SUSE Edge: KubeVirt extension for Rancher Dashboard' | ||||
| name: kubevirt-dashboard-extension | ||||
| type: application | ||||
| version: "%%CHART_MAJOR%%.0.2+up1.3.2" | ||||
| version: "%%CHART_MAJOR%%.0.3+up1.3.2" | ||||
| icon: >- | ||||
|   https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevirt/icon/color/kubevirt-icon-color.svg | ||||
|   | ||||
| @@ -8,7 +8,7 @@ spec: | ||||
|   plugin: | ||||
|     name: {{ include "extension-server.fullname" . }} | ||||
|     version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }} | ||||
|     endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/kubevirt-dashboard-extension/303.0.2+up1.3.2 | ||||
|     endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/kubevirt-dashboard-extension/304.0.3+up1.3.2 | ||||
|     noCache: {{ .Values.plugin.noCache }} | ||||
|     noAuth: {{ .Values.plugin.noAuth }} | ||||
|     metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }} | ||||
|   | ||||
| @@ -1,16 +1,16 @@ | ||||
| #!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.12_up0.12.2 | ||||
| #!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.12_up0.12.2-%RELEASE% | ||||
| #!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.19_up0.12.9 | ||||
| #!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.19_up0.12.9-%RELEASE% | ||||
| apiVersion: v2 | ||||
| appVersion: 0.12.2 | ||||
| appVersion: 0.12.9 | ||||
| dependencies: | ||||
| - alias: metal3-baremetal-operator | ||||
|   name: baremetal-operator | ||||
|   repository: file://./charts/baremetal-operator | ||||
|   version: 0.9.4 | ||||
|   version: 0.10.4 | ||||
| - alias: metal3-ironic | ||||
|   name: ironic | ||||
|   repository: file://./charts/ironic | ||||
|   version: 0.11.2 | ||||
|   version: 0.11.6 | ||||
| - alias: metal3-mariadb | ||||
|   condition: global.enable_mariadb | ||||
|   name: mariadb | ||||
| @@ -20,9 +20,9 @@ dependencies: | ||||
|   condition: global.enable_metal3_media_server | ||||
|   name: media | ||||
|   repository: file://./charts/media | ||||
|   version: 0.6.5 | ||||
|   version: 0.7.1 | ||||
| description: A Helm chart that installs all of the dependencies needed for Metal3 | ||||
| icon: https://github.com/cncf/artwork/raw/master/projects/metal3/icon/color/metal3-icon-color.svg | ||||
| name: metal3 | ||||
| type: application | ||||
| version: "%%CHART_MAJOR%%.0.12+up0.12.2" | ||||
| version: "%%CHART_MAJOR%%.0.19+up0.12.9" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| apiVersion: v2 | ||||
| appVersion: 0.9.1 | ||||
| appVersion: 0.10.2 | ||||
| description: A Helm chart for baremetal-operator, used by Metal3 | ||||
| name: baremetal-operator | ||||
| type: application | ||||
| version: 0.9.4 | ||||
| version: 0.10.4 | ||||
|   | ||||
| @@ -202,6 +202,11 @@ spec: | ||||
|                 description: Description is a human-entered text used to help identify | ||||
|                   the host. | ||||
|                 type: string | ||||
|               disablePowerOff: | ||||
|                 description: |- | ||||
|                   When set to true, power off of the node will be disabled, | ||||
|                   instead, a reboot will be used in place of power on/off | ||||
|                 type: boolean | ||||
|               externallyProvisioned: | ||||
|                 description: |- | ||||
|                   ExternallyProvisioned means something else has provisioned the | ||||
|   | ||||
| @@ -5,7 +5,6 @@ | ||||
|   {{- $ironicApiHost := print $ironicHost ":6385" }} | ||||
|   {{- $ironicBootHost := print $ironicHost ":6180" }} | ||||
|   {{- $ironicCacheHost := print $ironicHost ":6180" }} | ||||
|   {{- $deployArch := .Values.global.deployArchitecture }} | ||||
|  | ||||
| apiVersion: v1 | ||||
| data: | ||||
| @@ -21,9 +20,10 @@ data: | ||||
|   RESTART_CONTAINER_CERTIFICATE_UPDATED: "false" | ||||
|   {{- end }} | ||||
|   CACHEURL: "{{ $protocol }}://{{ $ironicCacheHost }}/images" | ||||
|   DEPLOY_KERNEL_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.kernel" | ||||
|   DEPLOY_RAMDISK_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.initramfs" | ||||
|   DEPLOY_ARCHITECTURE: "{{ $deployArch }}" | ||||
|   {{- if .Values.baremetaloperator.externalHttpIPv6 }} | ||||
|   {{- $port := ternary .Values.global.vmediaTLSPort .Values.baremetaloperator.httpPort $enableVMediaTLS }} | ||||
|   IRONIC_EXTERNAL_URL_V6: "{{ $protocol }}://[{{ .Values.baremetaloperator.externalHttpIPv6 }}]:{{ $port }}" | ||||
|   {{- end }} | ||||
| kind: ConfigMap | ||||
| metadata: | ||||
|   name: baremetal-operator-ironic | ||||
|   | ||||
| @@ -28,7 +28,7 @@ images: | ||||
|   baremetalOperator: | ||||
|     repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/baremetal-operator | ||||
|     pullPolicy: IfNotPresent | ||||
|     tag: "0.9.1.1" | ||||
|     tag: "0.10.2.1" | ||||
|  | ||||
| imagePullSecrets: [] | ||||
| nameOverride: "manger" | ||||
| @@ -84,3 +84,8 @@ affinity: {} | ||||
|  | ||||
| baremetaloperator: | ||||
|   httpPort: "6180" | ||||
|  | ||||
|   # IPv6 used for accessing the Ironic HTTP server for BMCs with an IPv6 only address. | ||||
|   # It should not be used in conjunction with 'provisioningHostname' unless BMCs do not | ||||
|   # support hostnames. | ||||
|   externalHttpIPv6: "" | ||||
|   | ||||
| @@ -3,4 +3,4 @@ appVersion: 29.0.4 | ||||
| description: A Helm chart for Ironic, used by Metal3 | ||||
| name: ironic | ||||
| type: application | ||||
| version: 0.11.2 | ||||
| version: 0.11.6 | ||||
|   | ||||
| @@ -5,8 +5,6 @@ metadata: | ||||
|   labels: | ||||
|     {{- include "ironic.labels" . | nindent 4 }} | ||||
| data: | ||||
|   {{- $deployArch := .Values.global.deployArchitecture }} | ||||
|  | ||||
|   {{- if  ( .Values.global.enable_dnsmasq ) }} | ||||
|   DNSMASQ_DNS_SERVER_ADDRESS: {{ .Values.global.dnsmasqDNSServer }} | ||||
|   DNSMASQ_DEFAULT_ROUTER: {{ .Values.global.dnsmasqDefaultRouter }} | ||||
| @@ -18,7 +16,6 @@ data: | ||||
|   HTTP_PORT: "6180" | ||||
|   PREDICTABLE_NIC_NAMES: "{{ .Values.global.predictableNicNames }}" | ||||
|   IRONIC_EXTERNAL_HTTP_URL: {{ include "ironic.externalHttpUrl" . }} | ||||
|   DEPLOY_ARCHITECTURE: {{ $deployArch }} | ||||
|   ENABLE_PXE_BOOT: "{{ .Values.global.enable_pxe_boot }}" | ||||
|   {{- if .Values.global.provisioningInterface }} | ||||
|   PROVISIONING_INTERFACE: {{ .Values.global.provisioningInterface }} | ||||
| @@ -55,3 +52,6 @@ data: | ||||
|   {{- else }} | ||||
|   IRONIC_USE_MARIADB: "false" | ||||
|   {{- end }} | ||||
|   {{- with .Values.ironicExtraEnv -}} | ||||
|   {{ toYaml . | nindent 2 }}   | ||||
|   {{- end -}} | ||||
| @@ -64,11 +64,11 @@ images: | ||||
|   ironic: | ||||
|     repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic | ||||
|     pullPolicy: IfNotPresent | ||||
|     tag: 29.0.4.1 | ||||
|     tag: 29.0.4.4 | ||||
|   ironicIPADownloader: | ||||
|     repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader | ||||
|     pullPolicy: IfNotPresent | ||||
|     tag: 3.0.8 | ||||
|     tag: 3.0.10 | ||||
|  | ||||
| nameOverride: "" | ||||
| fullnameOverride: "" | ||||
| @@ -138,6 +138,8 @@ baremetaloperator: | ||||
| debug: | ||||
|   ironicRamdiskSshKey: "" | ||||
|  | ||||
| ironicExtraEnv: {} | ||||
|  | ||||
| tlscerts: | ||||
|   cacert: "" | ||||
|   key: "" | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| apiVersion: v2 | ||||
| appVersion: 1.16.0 | ||||
| appVersion: 1.21.0 | ||||
| description: A Helm chart for Media, used by Metal3 | ||||
| name: media | ||||
| type: application | ||||
| version: 0.6.5 | ||||
| version: 0.7.1 | ||||
|   | ||||
| @@ -34,13 +34,9 @@ spec: | ||||
|       {{- end }} | ||||
|       containers: | ||||
|         - name: {{ .Chart.Name }} | ||||
|           command: | ||||
|           - /usr/sbin/httpd | ||||
|           args: | ||||
|           - -DFOREGROUND | ||||
|           securityContext: | ||||
|             {{- toYaml .Values.securityContext | nindent 12 }} | ||||
|           image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" | ||||
|           image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" | ||||
|           imagePullPolicy: {{ .Values.image.pullPolicy }} | ||||
|           ports: | ||||
|             - name: http | ||||
|   | ||||
| @@ -22,9 +22,9 @@ global: | ||||
| replicaCount: 1 | ||||
|  | ||||
| image: | ||||
|   repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic | ||||
|   repository: registry.suse.com/suse/nginx | ||||
|   pullPolicy: IfNotPresent | ||||
|   tag: 29.0.4.1 | ||||
|   tag: 1.21 | ||||
|  | ||||
| imagePullSecrets: [] | ||||
| nameOverride: "" | ||||
| @@ -42,8 +42,8 @@ serviceAccount: | ||||
| podAnnotations: {} | ||||
|  | ||||
| podSecurityContext: | ||||
|   runAsUser: 10475 | ||||
|   fsGroup: 10475 | ||||
|   runAsUser: 499 | ||||
|   fsGroup: 486 | ||||
|  | ||||
| securityContext: | ||||
|   allowPrivilegeEscalation: false | ||||
| @@ -102,11 +102,16 @@ volumes: | ||||
|   - name: assets | ||||
|     persistentVolumeClaim: | ||||
|       claimName: media | ||||
|   - name: run | ||||
|     emptyDir: | ||||
|       sizeLimit: 10Mi | ||||
|  | ||||
| # volume mounts | ||||
| volumeMounts: | ||||
|   - mountPath: /srv/www/htdocs | ||||
|     name: assets | ||||
|   - mountPath: /run | ||||
|     name: run | ||||
|  | ||||
| # media volume settings | ||||
| mediaVolume: | ||||
|   | ||||
| @@ -72,9 +72,6 @@ global: | ||||
|   # Name for the MariaDB service | ||||
|   databaseServiceName: metal3-mariadb | ||||
|  | ||||
|   # Architecture for deployed nodes (either x86_64 or arm64) | ||||
|   deployArchitecture: x86_64 | ||||
|  | ||||
|   # In a multi-node cluster use the node selector to ensure the pods | ||||
|   # all run on the same host where the dnsmasqDNSServer and provisioningIP | ||||
|   # and /opt/media exist. Uncomment the nodeSelector and update the | ||||
|   | ||||
							
								
								
									
										31
									
								
								nessie-image/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								nessie-image/Dockerfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| # SPDX-License-Identifier: Apache-2.0 | ||||
| #!BuildTag: %%IMG_PREFIX%%nessie:%%nessie_version%% | ||||
| #!BuildTag: %%IMG_PREFIX%%nessie:%%nessie_version%%-%RELEASE% | ||||
|  | ||||
| ARG SLE_VERSION | ||||
| FROM registry.suse.com/bci/bci-base:$SLE_VERSION | ||||
|  | ||||
| # labelprefix=com.suse.application.nessie | ||||
| LABEL org.opencontainers.image.title="nessie" | ||||
| LABEL org.opencontainers.image.description="Nessie diagnostic tool for SUSE Kubernetes environments" | ||||
| LABEL org.opencontainers.image.version="%%nessie_version%%" | ||||
| LABEL org.opencontainers.image.authors="George Agriogiannis <george.agriogiannis2@suse.com>" | ||||
| LABEL org.opencontainers.image.url="https://github.com/suse-edge/support-tools/tree/main/nessie" | ||||
| LABEL org.opencontainers.image.vendor="SUSE LLC" | ||||
| LABEL org.opencontainers.image.created="%BUILDTIME%" | ||||
| LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%nessie:%%nessie_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 | ||||
|  | ||||
| RUN zypper --non-interactive refresh && \ | ||||
|     zypper --non-interactive install --no-recommends nessie && \ | ||||
|     zypper clean | ||||
|  | ||||
| WORKDIR /tmp | ||||
|  | ||||
| ENTRYPOINT ["/usr/bin/nessie"] | ||||
							
								
								
									
										19
									
								
								nessie-image/_service
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								nessie-image/_service
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| <services> | ||||
|   <service mode="buildtime" name="kiwi_metainfo_helper"/> | ||||
|   <service mode="buildtime" name="docker_label_helper"/> | ||||
|   <service name="replace_using_package_version" mode="buildtime"> | ||||
|     <param name="file">Dockerfile</param> | ||||
|     <param name="regex">%%nessie_version%%</param> | ||||
|     <param name="package">nessie</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> | ||||
							
								
								
									
										26
									
								
								nessie/_service
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								nessie/_service
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| <services> | ||||
|   <service name="obs_scm"> | ||||
|     <param name="url">https://github.com/suse-edge/support-tools</param> | ||||
|     <param name="scm">git</param> | ||||
|     <param name="revision">nessie-v1.0.0</param> | ||||
|     <param name="version">_auto_</param> | ||||
|     <param name="versionformat">@PARENT_TAG@</param> | ||||
|     <param name="changesgenerate">enable</param> | ||||
|     <param name="changesauthor">george.agriogiannis2@suse.com</param> | ||||
|     <param name="match-tag">nessie-v*</param> | ||||
|     <param name="versionrewrite-pattern">nessie-v(\d+\.\d+\.\d+)</param> | ||||
|     <param name="versionrewrite-replacement">\1</param> | ||||
|     <param name="subdir">nessie</param> | ||||
|     <param name="exclude">.git</param> | ||||
|     <param name="without-version">yes</param> | ||||
|     <param name="filename">nessie</param> | ||||
|   </service> | ||||
|   <service mode="buildtime" name="tar"> | ||||
|     <param name="obsinfo">nessie.obsinfo</param> | ||||
|   </service> | ||||
|   <service mode="buildtime" name="recompress"> | ||||
|     <param name="file">*.tar</param> | ||||
|     <param name="compression">gz</param> | ||||
|   </service> | ||||
|   <service mode="buildtime" name="set_version" /> | ||||
| </services> | ||||
							
								
								
									
										80
									
								
								nessie/nessie.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								nessie/nessie.spec
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,80 @@ | ||||
| # | ||||
| # spec file for package nessie | ||||
| # | ||||
| # Copyright (c) 2024 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:           nessie | ||||
| # Version will be set automatically by factory's set_version service | ||||
| Version:        1.0.0 | ||||
| Release:        0 | ||||
| Summary:        Node Environment Support Script for Inspection and Export | ||||
| License:        Apache-2.0 | ||||
| Group:          System/Management | ||||
| URL:            https://github.com/suse-edge/support-tools/tree/main/nessie | ||||
| Source0:        %{name}-%{version}.tar.gz | ||||
| BuildArch:      noarch | ||||
|  | ||||
| # Build dependencies | ||||
| BuildRequires:  python3-devel | ||||
|  | ||||
| # Runtime dependencies | ||||
| Requires:       python3 | ||||
| Requires:       python3-kubernetes | ||||
| Requires:       python3-PyYAML | ||||
| Requires:       helm | ||||
| Requires:       systemd | ||||
|  | ||||
| # Optional dependencies for enhanced functionality | ||||
| Recommends:     util-linux | ||||
|  | ||||
| %description | ||||
| Nessie (Node Environment Support Script for Inspection and Export) is a | ||||
| comprehensive diagnostic tool for SUSE Kubernetes environments. It collects | ||||
| logs, configurations, and system information from Kubernetes clusters for | ||||
| troubleshooting and support purposes. | ||||
|  | ||||
| Key features: | ||||
| - Collects system service logs and Kubernetes pod logs | ||||
| - Gathers cluster configurations and Helm releases | ||||
| - Retrieves node metrics and component versions | ||||
| - Supports RKE2 and K3s environments | ||||
| - Fault-tolerant with configurable options | ||||
| - Can be run directly or as a container | ||||
|  | ||||
| The tool is designed specifically for SUSE Edge environments and integrates | ||||
| well with SUSE Linux Micro, RKE2, and K3s distributions. | ||||
|  | ||||
| %prep | ||||
| %autosetup | ||||
|  | ||||
| %build | ||||
| # Validate Python syntax | ||||
| python3 -m py_compile nessie.py | ||||
|  | ||||
| %install | ||||
| # Install the main script | ||||
| install -D -m 0755 nessie.py %{buildroot}%{_bindir}/nessie | ||||
|  | ||||
| # Install documentation files | ||||
| install -D -m 0644 README.md %{buildroot}%{_docdir}/%{name}/README.md | ||||
| install -D -m 0644 LICENSE %{buildroot}%{_docdir}/%{name}/LICENSE | ||||
|  | ||||
| %files | ||||
| %{_bindir}/nessie | ||||
| %dir %{_docdir}/%{name} | ||||
| %doc %{_docdir}/%{name}/README.md | ||||
| %license %{_docdir}/%{name}/LICENSE | ||||
|  | ||||
| %changelog | ||||
							
								
								
									
										1
									
								
								python-annotated-types
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-annotated-types
									
									
									
									
									
										Submodule
									
								
							 Submodule python-annotated-types added at ffc9e3fb44
									
								
							
							
								
								
									
										1
									
								
								python-executing
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-executing
									
									
									
									
									
										Submodule
									
								
							 Submodule python-executing added at ac466db0b5
									
								
							
							
								
								
									
										1
									
								
								python-flit-core
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-flit-core
									
									
									
									
									
										Submodule
									
								
							 Submodule python-flit-core added at 4362b05ea3
									
								
							
							
								
								
									
										1
									
								
								python-inline-snapshot
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-inline-snapshot
									
									
									
									
									
										Submodule
									
								
							 Submodule python-inline-snapshot added at 1e917444d7
									
								
							
							
								
								
									
										1
									
								
								python-pydantic
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-pydantic
									
									
									
									
									
										Submodule
									
								
							 Submodule python-pydantic added at f19a5a780f
									
								
							
							
								
								
									
										1
									
								
								python-pydantic-core
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-pydantic-core
									
									
									
									
									
										Submodule
									
								
							 Submodule python-pydantic-core added at 00355d0825
									
								
							
							
								
								
									
										39
									
								
								python-pyhelm3/0001-icon-metadata-allow-fileurl.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								python-pyhelm3/0001-icon-metadata-allow-fileurl.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,39 @@ | ||||
| From 2e89940b44d4be1d115aed987b4c610ed7173d66 Mon Sep 17 00:00:00 2001 | ||||
| From: e-minguez <e.minguez@gmail.com> | ||||
| Date: Tue, 2 Sep 2025 18:03:50 +0200 | ||||
| Subject: [PATCH] fix: Allow icon metadata to be file | ||||
|  | ||||
| Fix #34 | ||||
| --- | ||||
|  pyhelm3/models.py | 4 +++- | ||||
|  1 file changed, 3 insertions(+), 1 deletion(-) | ||||
|  | ||||
| diff --git a/pyhelm3/models.py b/pyhelm3/models.py | ||||
| index d03fdc6..adb2c88 100644 | ||||
| --- a/pyhelm3/models.py | ||||
| +++ b/pyhelm3/models.py | ||||
| @@ -14,6 +14,7 @@ | ||||
|      FilePath, | ||||
|      AnyUrl as PydanticAnyUrl, | ||||
|      HttpUrl as PydanticHttpUrl, | ||||
| +    FileUrl as PydanticFileUrl, | ||||
|      constr, | ||||
|      field_validator | ||||
|  ) | ||||
| @@ -65,6 +66,7 @@ def validate_str_as(validate_type): | ||||
|  #: Annotated string types for URLs | ||||
|  AnyUrl = t.Annotated[str, AfterValidator(validate_str_as(PydanticAnyUrl))] | ||||
|  HttpUrl = t.Annotated[str, AfterValidator(validate_str_as(PydanticHttpUrl))] | ||||
| +FileUrl = t.Annotated[str, AfterValidator(validate_str_as(PydanticFileUrl))] | ||||
|   | ||||
|   | ||||
|  class ChartDependency(BaseModel): | ||||
| @@ -173,7 +175,7 @@ class ChartMetadata(BaseModel): | ||||
|          default_factory = list, | ||||
|          description = "List of maintainers for the chart." | ||||
|      ) | ||||
| -    icon: t.Optional[HttpUrl] = Field( | ||||
| +    icon: t.Optional[HttpUrl | FileUrl] = Field( | ||||
|          None, | ||||
|          description = "URL to an SVG or PNG image to be used as an icon." | ||||
|      ) | ||||
| @@ -16,12 +16,15 @@ | ||||
|  | ||||
| Name:           python-pyhelm3 | ||||
| Version:        0.4.0 | ||||
| Release:        0 | ||||
| Release:        1 | ||||
| Summary:        Python library for managing Helm releases using Helm 3 | ||||
| License:        Apache-2.0 | ||||
| URL:            https://github.com/azimuth-cloud/pyhelm3 | ||||
| #!RemoteAsset | ||||
| Source:         https://files.pythonhosted.org/packages/source/p/pyhelm3/pyhelm3-%{version}.tar.gz | ||||
| # Allow icon metadata to be file:// as well as http/https:// | ||||
| # https://github.com/azimuth-cloud/pyhelm3/pull/35 | ||||
| Patch:          0001-icon-metadata-allow-fileurl.patch | ||||
| BuildRequires:  python-rpm-macros | ||||
| BuildRequires:  %{python_module pip} | ||||
| BuildRequires:  %{python_module setuptools >= 42} | ||||
|   | ||||
							
								
								
									
										3
									
								
								python-rich/_service
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								python-rich/_service
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| <services> | ||||
| <service name="download_assets"></service> | ||||
| </services> | ||||
							
								
								
									
										45
									
								
								python-rich/pygments.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								python-rich/pygments.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| From 08be21dadfd2ce9e96e41e366ab38bd8d7cd0e39 Mon Sep 17 00:00:00 2001 | ||||
| From: Dan Lazin <dlazin@users.noreply.github.com> | ||||
| Date: Tue, 7 Jan 2025 16:04:56 -0500 | ||||
| Subject: [PATCH] Fix test that changed with Pygments 2.19. | ||||
|  | ||||
| --- | ||||
|  tests/test_markdown.py | 2 +- | ||||
|  1 file changed, 1 insertion(+), 1 deletion(-) | ||||
|  | ||||
| Index: rich-13.9.4/tests/test_markdown.py | ||||
| =================================================================== | ||||
| --- rich-13.9.4.orig/tests/test_markdown.py | ||||
| +++ rich-13.9.4/tests/test_markdown.py | ||||
| @@ -110,7 +110,7 @@ def test_inline_code(): | ||||
|          inline_code_theme="emacs", | ||||
|      ) | ||||
|      result = render(markdown) | ||||
| -    expected = "inline \x1b[1;38;2;170;34;255;48;2;248;248;248mimport\x1b[0m\x1b[38;2;0;0;0;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m code                                                                             \n" | ||||
| +    expected = "inline \x1b[1;38;2;170;34;255;48;2;248;248;248mimport\x1b[0m\x1b[38;2;187;187;187;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m code                                                                             \n" | ||||
|      print(result) | ||||
|      print(repr(result)) | ||||
|      assert result == expected | ||||
| Index: rich-13.9.4/tests/test_syntax.py | ||||
| =================================================================== | ||||
| --- rich-13.9.4.orig/tests/test_syntax.py | ||||
| +++ rich-13.9.4/tests/test_syntax.py | ||||
| @@ -53,7 +53,7 @@ def test_blank_lines(): | ||||
|      print(repr(result)) | ||||
|      assert ( | ||||
|          result | ||||
| -        == "\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m1 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m2 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m3 \x1b[0m\x1b[1;38;2;0;128;0;48;2;248;248;248mimport\x1b[0m\x1b[38;2;0;0;0;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m\x1b[48;2;248;248;248m                   \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m4 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m5 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n" | ||||
| +        == "\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m1 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m2 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m3 \x1b[0m\x1b[1;38;2;0;128;0;48;2;248;248;248mimport\x1b[0m\x1b[38;2;187;187;187;48;2;248;248;248m \x1b[0m\x1b[1;38;2;0;0;255;48;2;248;248;248mthis\x1b[0m\x1b[48;2;248;248;248m                   \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m4 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n\x1b[1;38;2;24;24;24;48;2;248;248;248m  \x1b[0m\x1b[38;2;173;173;173;48;2;248;248;248m5 \x1b[0m\x1b[48;2;248;248;248m                              \x1b[0m\n" | ||||
|      ) | ||||
|   | ||||
|   | ||||
| @@ -119,7 +119,7 @@ def test_python_render_simple_indent_gui | ||||
|      ) | ||||
|      rendered_syntax = render(syntax) | ||||
|      print(repr(rendered_syntax)) | ||||
| -    expected = '\x1b[34mdef\x1b[0m \x1b[32mloop_first_last\x1b[0m(values: Iterable[T]) -> Iterable[Tuple[\x1b[36mb\x1b[0m\n\x1b[2;37m│   \x1b[0m\x1b[33m"""Iterate and generate a tuple with a flag for first an\x1b[0m\n\x1b[2m│   \x1b[0miter_values = \x1b[36miter\x1b[0m(values)\n\x1b[2m│   \x1b[0m\x1b[34mtry\x1b[0m:\n\x1b[2m│   │   \x1b[0mprevious_value = \x1b[36mnext\x1b[0m(iter_values)\n\x1b[2m│   \x1b[0m\x1b[34mexcept\x1b[0m \x1b[36mStopIteration\x1b[0m:\n\x1b[2m│   │   \x1b[0m\x1b[34mreturn\x1b[0m\n\x1b[2m│   \x1b[0mfirst = \x1b[34mTrue\x1b[0m\n\x1b[2m│   \x1b[0m\x1b[34mfor\x1b[0m value \x1b[35min\x1b[0m iter_values:\n\x1b[2m│   │   \x1b[0m\x1b[34myield\x1b[0m first, \x1b[34mFalse\x1b[0m, previous_value\n\x1b[2m│   │   \x1b[0mfirst = \x1b[34mFalse\x1b[0m\n\x1b[2m│   │   \x1b[0mprevious_value = value\n\x1b[2m│   \x1b[0m\x1b[34myield\x1b[0m first, \x1b[34mTrue\x1b[0m, previous_value\n' | ||||
| +    expected = '\x1b[34mdef\x1b[0m\x1b[37m \x1b[0m\x1b[32mloop_first_last\x1b[0m(values: Iterable[T]) -> Iterable[Tuple[\x1b[36mb\x1b[0m\n\x1b[2;37m│   \x1b[0m\x1b[33m"""Iterate and generate a tuple with a flag for first an\x1b[0m\n\x1b[2m│   \x1b[0miter_values = \x1b[36miter\x1b[0m(values)\n\x1b[2m│   \x1b[0m\x1b[34mtry\x1b[0m:\n\x1b[2m│   │   \x1b[0mprevious_value = \x1b[36mnext\x1b[0m(iter_values)\n\x1b[2m│   \x1b[0m\x1b[34mexcept\x1b[0m \x1b[36mStopIteration\x1b[0m:\n\x1b[2m│   │   \x1b[0m\x1b[34mreturn\x1b[0m\n\x1b[2m│   \x1b[0mfirst = \x1b[34mTrue\x1b[0m\n\x1b[2m│   \x1b[0m\x1b[34mfor\x1b[0m value \x1b[35min\x1b[0m iter_values:\n\x1b[2m│   │   \x1b[0m\x1b[34myield\x1b[0m first, \x1b[34mFalse\x1b[0m, previous_value\n\x1b[2m│   │   \x1b[0mfirst = \x1b[34mFalse\x1b[0m\n\x1b[2m│   │   \x1b[0mprevious_value = value\n\x1b[2m│   \x1b[0m\x1b[34myield\x1b[0m first, \x1b[34mTrue\x1b[0m, previous_value\n' | ||||
|      assert rendered_syntax == expected | ||||
|   | ||||
|   | ||||
|  | ||||
							
								
								
									
										66
									
								
								python-rich/python-rich.spec
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								python-rich/python-rich.spec
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| # | ||||
| # spec file for package python-rich | ||||
| # | ||||
| # Copyright (c) 2025 SUSE LLC | ||||
| # Copyright (c) 2020-2021, Martin Hauke <mardnh@gmx.de> | ||||
| # | ||||
| # 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/ | ||||
| # | ||||
|  | ||||
|  | ||||
| %{?sle15_python_module_pythons} | ||||
| Name:           python-rich | ||||
| Version:        14.0.0 | ||||
| Release:        0 | ||||
| Summary:        A Python library for rich text and beautiful formatting in the terminal | ||||
| License:        MIT | ||||
| URL:            https://github.com/Textualize/rich | ||||
| #!RemoteAsset: https://github.com/Textualize/rich/archive/refs/tags/v%{version}.tar.gz rich-%{version}.tar.gz | ||||
| Source:					rich-%{version}.tar.gz | ||||
| # PATCH-FIX-UPSTREAM https://github.com/Textualize/rich/pull/3604 Fix test that changed with Pygments 2.19. | ||||
| # and https://github.com/Textualize/rich/pull/3608 fix remaining tests with Pygments 2.19 #3604 did not fix | ||||
| Patch:          pygments.patch | ||||
| BuildRequires:  %{python_module base >= 3.8} | ||||
| BuildRequires:  %{python_module markdown-it-py >= 2.2.0} | ||||
| BuildRequires:  %{python_module pip} | ||||
| BuildRequires:  %{python_module poetry-core} | ||||
| BuildRequires:  %{python_module pygments >= 2.13.0} | ||||
| BuildRequires:  fdupes | ||||
| BuildRequires:  python-rpm-macros | ||||
| Requires:       python-markdown-it-py >= 2.2.0 | ||||
| Requires:       python-pygments >= 2.13.0 | ||||
| Suggests:       python-ipywidgets >= 7.5.1 | ||||
| BuildArch:      noarch | ||||
| # TODO(edu): Disabled all tests | ||||
| %python_subpackages | ||||
|  | ||||
| %description | ||||
| Render rich text, tables, progress bars, syntax highlighting, | ||||
| markdown and more to the terminal. | ||||
|  | ||||
| %prep | ||||
| %autosetup -p1 -n rich-%{version} | ||||
|  | ||||
| %build | ||||
| %pyproject_wheel | ||||
|  | ||||
| %install | ||||
| %pyproject_install | ||||
| %python_expand %fdupes %{buildroot}%{$python_sitelib} | ||||
|  | ||||
| %files %{python_files} | ||||
| %license LICENSE | ||||
| %doc README.md | ||||
| %{python_sitelib}/rich | ||||
| %{python_sitelib}/rich-%{version}.dist-info | ||||
|  | ||||
| %changelog | ||||
							
								
								
									
										3
									
								
								python-suse-edge-components-versions/_service
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								python-suse-edge-components-versions/_service
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| <services> | ||||
| <service name="download_assets"></service> | ||||
| </services> | ||||
| @@ -0,0 +1,98 @@ | ||||
| # | ||||
| # spec file for package python-suse-edge-components-versions | ||||
| # | ||||
| # 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/ | ||||
|  | ||||
| %global mod_name suse-edge-components-versions | ||||
| %global pythons %{primary_python} | ||||
| %if 0%{?suse_version} == 1500 | ||||
| %sle15_python_module_pythons | ||||
| %endif | ||||
|  | ||||
| Name:           python-suse-edge-components-versions | ||||
| Version:        0.2.2 | ||||
| Release:        0%{?dist} | ||||
| Summary:        A tool to gather and display component versions for SUSE Edge products. | ||||
| License:        Apache-2.0 | ||||
| URL:            https://github.com/suse-edge/support-tools/tree/main/components-versions | ||||
| #!RemoteAsset: https://github.com/suse-edge/support-tools/archive/refs/tags/components-versions-v%{version}.tar.gz | ||||
| Source:         components-versions-v%{version}.tar.gz | ||||
| BuildArch:      noarch | ||||
|  | ||||
| BuildRequires:  python-rpm-macros | ||||
| BuildRequires:  %{python_module pip} | ||||
| BuildRequires:  %{python_module setuptools} | ||||
| BuildRequires:  %{python_module setuptools_scm} | ||||
| BuildRequires:  %{python_module wheel} | ||||
|  | ||||
| # Requires: | ||||
| Requires:       %{python_module kubernetes} | ||||
| Requires:       %{python_module pyhelm3} | ||||
| Requires:       %{python_module tabulate} | ||||
| Requires:       %{python_module pydantic >= 2.0} | ||||
| Requires:       helm | ||||
|  | ||||
| # This macro automatically creates subpackages for each Python version | ||||
| # (e.g., python311-suse-edge-components-versions, python312-suse-edge-components-versions). | ||||
| %python_subpackages | ||||
|  | ||||
| %description | ||||
| This tool provides functionality to gather and display component versions | ||||
| for various SUSE Edge products. It helps in understanding the exact versions | ||||
| of software components used in different product releases and ensures | ||||
| consistency across deployments. | ||||
|  | ||||
| %prep | ||||
| # Unpack the source tarball. | ||||
| # The tarball extracts into 'support-tools-components-versions-v%{version}'. | ||||
| %setup -q -n support-tools-components-versions-v%{version} | ||||
|  | ||||
| %build | ||||
|  | ||||
| # The actual Python project (containing pyproject.toml and the source code) | ||||
| # is nested inside the 'components-versions' directory within the extracted tarball. | ||||
| # We need to change into this directory before building. | ||||
| cd components-versions | ||||
| %pyproject_wheel . | ||||
| cd .. | ||||
|  | ||||
| %install | ||||
| cd components-versions | ||||
| %pyproject_install | ||||
| # Rename the main executable from 'components-versions' to 'suse-edge-components-versions' | ||||
| mv %{buildroot}%{_bindir}/components-versions %{buildroot}%{_bindir}/suse-edge-components-versions | ||||
| %python_clone -a %{buildroot}%{_bindir}/suse-edge-components-versions | ||||
| cd .. | ||||
| # Move the yaml files to /usr/share/suse-edge-components-versions instead | ||||
| mkdir -p %{buildroot}/usr/share/suse-edge-components-versions/ | ||||
| mv %{buildroot}%{python_sitelib}/components_versions/data/*.yaml %{buildroot}/usr/share/suse-edge-components-versions/ | ||||
| rmdir %{buildroot}%{python_sitelib}/components_versions/data/ | ||||
|  | ||||
| %post | ||||
| %python_install_alternative suse-edge-components-versions | ||||
|  | ||||
| %postun | ||||
| %python_uninstall_alternative suse-edge-components-versions | ||||
|  | ||||
| %files %{python_files} | ||||
| %license LICENSE | ||||
| %{python_sitelib}/components_versions | ||||
| # Include the Python package metadata (e.g., .dist-info or .egg-info). | ||||
| # The .dist-info name is based on the 'name' field in pyproject.toml. | ||||
| %{python_sitelib}/suse_edge_components_versions-%{version}*.dist-info | ||||
| # Include the main executable with its new name. | ||||
| %python_alternative %{_bindir}/suse-edge-components-versions | ||||
| # Include the yaml files | ||||
| /usr/share/suse-edge-components-versions/ | ||||
|  | ||||
| %changelog | ||||
							
								
								
									
										1
									
								
								python-typing-inspection
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-typing-inspection
									
									
									
									
									
										Submodule
									
								
							 Submodule python-typing-inspection added at 9400618fae
									
								
							
							
								
								
									
										1
									
								
								python-typing_extensions
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								python-typing_extensions
									
									
									
									
									
										Submodule
									
								
							 Submodule python-typing_extensions added at 598c5a8313
									
								
							| @@ -1,10 +1,10 @@ | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles-airgap-resources:%%CHART_MAJOR%%.0.5_up0.21.0 | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles-airgap-resources:%%CHART_MAJOR%%.0.5_up0.21.0-%RELEASE% | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles-airgap-resources:%%CHART_MAJOR%%.0.6_up0.24.0 | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles-airgap-resources:%%CHART_MAJOR%%.0.6_up0.24.0-%RELEASE% | ||||
| apiVersion: v2 | ||||
| appVersion: 0.21.0 | ||||
| appVersion: 0.24.0 | ||||
| description: Rancher Turtles utility chart for airgap scenarios | ||||
| home: https://github.com/rancher/turtles/ | ||||
| icon: https://raw.githubusercontent.com/rancher/turtles/main/logos/capi.svg | ||||
| name: rancher-turtles-airgap-resources | ||||
| type: application | ||||
| version: "%%CHART_MAJOR%%.0.5+up0.21.0" | ||||
| version: "%%CHART_MAJOR%%.0.6+up0.24.0" | ||||
|   | ||||
| @@ -23,6 +23,9 @@ cluster-api-operator: | ||||
|       infrastructure: | ||||
|         fetchConfig: | ||||
|           selector: "{\"matchLabels\": {\"provider-components\": \"metal3\"}}" | ||||
|       ipam: | ||||
|         fetchConfig: | ||||
|           selector: "{\"matchLabels\": {\"provider-components\": \"metal3ipam\"}}" | ||||
|     fleet: | ||||
|       addon: | ||||
|         fetchConfig: | ||||
|   | ||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -813,7 +813,7 @@ data: | ||||
|             control-plane: controller-manager | ||||
|         spec: | ||||
|           containers: | ||||
|           - image: ghcr.io/rancher-sandbox/cluster-api-addon-provider-fleet:v0.11.0 | ||||
|           - image: ghcr.io/rancher/cluster-api-addon-provider-fleet:v0.11.0 | ||||
|             imagePullPolicy: IfNotPresent | ||||
|             name: manager | ||||
|             ports: | ||||
| @@ -835,7 +835,7 @@ data: | ||||
|                 memory: 100Mi | ||||
|           - args: | ||||
|             - --helm-install | ||||
|             image: ghcr.io/rancher-sandbox/cluster-api-addon-provider-fleet:v0.11.0 | ||||
|             image: ghcr.io/rancher/cluster-api-addon-provider-fleet:v0.11.0 | ||||
|             name: helm-manager | ||||
|             resources: | ||||
|               limits: | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,3 +1,4 @@ | ||||
| {{- if not (lookup "v1" "Namespace" "" "rke2-bootstrap-system") }} | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
| @@ -6,6 +7,7 @@ metadata: | ||||
|     control-plane: controller-manager | ||||
|   name: rke2-bootstrap-system | ||||
| --- | ||||
| {{- end }} | ||||
| apiVersion: v1 | ||||
| data: | ||||
|   components: | | ||||
| @@ -564,27 +566,32 @@ data: | ||||
|                       properties: | ||||
|                         lastTransitionTime: | ||||
|                           description: |- | ||||
|                             Last time the condition transitioned from one status to another. | ||||
|                             lastTransitionTime is the last time the condition transitioned from one status to another. | ||||
|                             This should be when the underlying condition changed. If that is not known, then using the time when | ||||
|                             the API field changed is acceptable. | ||||
|                           format: date-time | ||||
|                           type: string | ||||
|                         message: | ||||
|                           description: |- | ||||
|                             A human readable message indicating details about the transition. | ||||
|                             message is a human readable message indicating details about the transition. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 10240 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         reason: | ||||
|                           description: |- | ||||
|                             The reason for the condition's last transition in CamelCase. | ||||
|                             reason is the reason for the condition's last transition in CamelCase. | ||||
|                             The specific API may choose whether or not this field is considered a guaranteed API. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         severity: | ||||
|                           description: |- | ||||
|                             severity provides an explicit classification of Reason code, so the users or machines can immediately | ||||
|                             understand the current situation and act accordingly. | ||||
|                             The Severity field MUST be set only when Status=False. | ||||
|                           maxLength: 32 | ||||
|                           type: string | ||||
|                         status: | ||||
|                           description: status of the condition, one of True, False, Unknown. | ||||
| @@ -594,6 +601,8 @@ data: | ||||
|                             type of condition in CamelCase or in foo.example.com/CamelCase. | ||||
|                             Many .condition.type values are consistent across resources like Available, but because arbitrary conditions | ||||
|                             can be useful (see .node.status.conditions), the ability to deconflict is important. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                       required: | ||||
|                       - lastTransitionTime | ||||
| @@ -943,25 +952,42 @@ data: | ||||
|                           description: ContentFrom is a referenced source of content to | ||||
|                             populate the file. | ||||
|                           properties: | ||||
|                             secret: | ||||
|                               description: SecretFileSource represents a secret that should | ||||
|                                 populate this file. | ||||
|                             configMap: | ||||
|                               description: ConfigMapFileSource represents a config map | ||||
|                                 that should populate this file. | ||||
|                               properties: | ||||
|                                 key: | ||||
|                                   description: Key is the key in the secret's data map | ||||
|                                     for this value. | ||||
|                                   description: Key is the key in the secret or config | ||||
|                                     map's data map for this value. | ||||
|                                   type: string | ||||
|                                 name: | ||||
|                                   description: Name of the secret in the RKE2BootstrapConfig's | ||||
|                                   description: Name of the secret/configmap in the RKE2BootstrapConfig's | ||||
|                                     namespace to use. | ||||
|                                   type: string | ||||
|                               required: | ||||
|                               - key | ||||
|                               - name | ||||
|                               type: object | ||||
|                             secret: | ||||
|                               description: SecretFileSource represents a secret that should | ||||
|                                 populate this file. | ||||
|                               properties: | ||||
|                                 key: | ||||
|                                   description: Key is the key in the secret or config | ||||
|                                     map's data map for this value. | ||||
|                                   type: string | ||||
|                                 name: | ||||
|                                   description: Name of the secret/configmap in the RKE2BootstrapConfig's | ||||
|                                     namespace to use. | ||||
|                                   type: string | ||||
|                               required: | ||||
|                               - key | ||||
|                               - name | ||||
|                               type: object | ||||
|                           required: | ||||
|                           - secret | ||||
|                           type: object | ||||
|                           x-kubernetes-validations: | ||||
|                           - message: Only configMap or secret can be populated at once | ||||
|                             rule: '!(has(self.secret) && has(self.configMap))' | ||||
|                         encoding: | ||||
|                           description: Encoding specifies the encoding of the file contents. | ||||
|                           enum: | ||||
| @@ -1153,27 +1179,32 @@ data: | ||||
|                       properties: | ||||
|                         lastTransitionTime: | ||||
|                           description: |- | ||||
|                             Last time the condition transitioned from one status to another. | ||||
|                             lastTransitionTime is the last time the condition transitioned from one status to another. | ||||
|                             This should be when the underlying condition changed. If that is not known, then using the time when | ||||
|                             the API field changed is acceptable. | ||||
|                           format: date-time | ||||
|                           type: string | ||||
|                         message: | ||||
|                           description: |- | ||||
|                             A human readable message indicating details about the transition. | ||||
|                             message is a human readable message indicating details about the transition. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 10240 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         reason: | ||||
|                           description: |- | ||||
|                             The reason for the condition's last transition in CamelCase. | ||||
|                             reason is the reason for the condition's last transition in CamelCase. | ||||
|                             The specific API may choose whether or not this field is considered a guaranteed API. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         severity: | ||||
|                           description: |- | ||||
|                             severity provides an explicit classification of Reason code, so the users or machines can immediately | ||||
|                             understand the current situation and act accordingly. | ||||
|                             The Severity field MUST be set only when Status=False. | ||||
|                           maxLength: 32 | ||||
|                           type: string | ||||
|                         status: | ||||
|                           description: status of the condition, one of True, False, Unknown. | ||||
| @@ -1183,6 +1214,8 @@ data: | ||||
|                             type of condition in CamelCase or in foo.example.com/CamelCase. | ||||
|                             Many .condition.type values are consistent across resources like Available, but because arbitrary conditions | ||||
|                             can be useful (see .node.status.conditions), the ability to deconflict is important. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                       required: | ||||
|                       - lastTransitionTime | ||||
| @@ -2124,25 +2157,43 @@ data: | ||||
|                                   description: ContentFrom is a referenced source of content | ||||
|                                     to populate the file. | ||||
|                                   properties: | ||||
|                                     secret: | ||||
|                                       description: SecretFileSource represents a secret | ||||
|                                         that should populate this file. | ||||
|                                     configMap: | ||||
|                                       description: ConfigMapFileSource represents a config | ||||
|                                         map that should populate this file. | ||||
|                                       properties: | ||||
|                                         key: | ||||
|                                           description: Key is the key in the secret's | ||||
|                                             data map for this value. | ||||
|                                           description: Key is the key in the secret or | ||||
|                                             config map's data map for this value. | ||||
|                                           type: string | ||||
|                                         name: | ||||
|                                           description: Name of the secret in the RKE2BootstrapConfig's | ||||
|                                             namespace to use. | ||||
|                                           description: Name of the secret/configmap in | ||||
|                                             the RKE2BootstrapConfig's namespace to use. | ||||
|                                           type: string | ||||
|                                       required: | ||||
|                                       - key | ||||
|                                       - name | ||||
|                                       type: object | ||||
|                                     secret: | ||||
|                                       description: SecretFileSource represents a secret | ||||
|                                         that should populate this file. | ||||
|                                       properties: | ||||
|                                         key: | ||||
|                                           description: Key is the key in the secret or | ||||
|                                             config map's data map for this value. | ||||
|                                           type: string | ||||
|                                         name: | ||||
|                                           description: Name of the secret/configmap in | ||||
|                                             the RKE2BootstrapConfig's namespace to use. | ||||
|                                           type: string | ||||
|                                       required: | ||||
|                                       - key | ||||
|                                       - name | ||||
|                                       type: object | ||||
|                                   required: | ||||
|                                   - secret | ||||
|                                   type: object | ||||
|                                   x-kubernetes-validations: | ||||
|                                   - message: Only configMap or secret can be populated | ||||
|                                       at once | ||||
|                                     rule: '!(has(self.secret) && has(self.configMap))' | ||||
|                                 encoding: | ||||
|                                   description: Encoding specifies the encoding of the | ||||
|                                     file contents. | ||||
| @@ -2537,7 +2588,7 @@ data: | ||||
|             - --concurrency=${CONCURRENCY_NUMBER:=10} | ||||
|             command: | ||||
|             - /manager | ||||
|             image: ghcr.io/rancher/cluster-api-provider-rke2-bootstrap:v0.18.0 | ||||
|             image: ghcr.io/rancher/cluster-api-provider-rke2-bootstrap:v0.20.1 | ||||
|             imagePullPolicy: IfNotPresent | ||||
|             livenessProbe: | ||||
|               httpGet: | ||||
| @@ -2778,10 +2829,16 @@ data: | ||||
|       - major: 0 | ||||
|         minor: 18 | ||||
|         contract: v1beta1 | ||||
|       - major: 0 | ||||
|         minor: 19 | ||||
|         contract: v1beta1 | ||||
|       - major: 0 | ||||
|         minor: 20 | ||||
|         contract: v1beta1 | ||||
| kind: ConfigMap | ||||
| metadata: | ||||
|   creationTimestamp: null | ||||
|   name: v0.18.0 | ||||
|   name: v0.20.1 | ||||
|   namespace: rke2-bootstrap-system | ||||
|   labels: | ||||
|     provider-components: rke2-bootstrap | ||||
|   | ||||
| @@ -1,3 +1,4 @@ | ||||
| {{- if not (lookup "v1" "Namespace" "" "rke2-control-plane-system") }} | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
| @@ -6,6 +7,7 @@ metadata: | ||||
|     control-plane: controller-manager | ||||
|   name: rke2-control-plane-system | ||||
| --- | ||||
| {{- end }} | ||||
| apiVersion: v1 | ||||
| data: | ||||
|   components: | | ||||
| @@ -1177,27 +1179,32 @@ data: | ||||
|                       properties: | ||||
|                         lastTransitionTime: | ||||
|                           description: |- | ||||
|                             Last time the condition transitioned from one status to another. | ||||
|                             lastTransitionTime is the last time the condition transitioned from one status to another. | ||||
|                             This should be when the underlying condition changed. If that is not known, then using the time when | ||||
|                             the API field changed is acceptable. | ||||
|                           format: date-time | ||||
|                           type: string | ||||
|                         message: | ||||
|                           description: |- | ||||
|                             A human readable message indicating details about the transition. | ||||
|                             message is a human readable message indicating details about the transition. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 10240 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         reason: | ||||
|                           description: |- | ||||
|                             The reason for the condition's last transition in CamelCase. | ||||
|                             reason is the reason for the condition's last transition in CamelCase. | ||||
|                             The specific API may choose whether or not this field is considered a guaranteed API. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         severity: | ||||
|                           description: |- | ||||
|                             severity provides an explicit classification of Reason code, so the users or machines can immediately | ||||
|                             understand the current situation and act accordingly. | ||||
|                             The Severity field MUST be set only when Status=False. | ||||
|                           maxLength: 32 | ||||
|                           type: string | ||||
|                         status: | ||||
|                           description: status of the condition, one of True, False, Unknown. | ||||
| @@ -1207,6 +1214,8 @@ data: | ||||
|                             type of condition in CamelCase or in foo.example.com/CamelCase. | ||||
|                             Many .condition.type values are consistent across resources like Available, but because arbitrary conditions | ||||
|                             can be useful (see .node.status.conditions), the ability to deconflict is important. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                       required: | ||||
|                       - lastTransitionTime | ||||
| @@ -1582,25 +1591,42 @@ data: | ||||
|                           description: ContentFrom is a referenced source of content to | ||||
|                             populate the file. | ||||
|                           properties: | ||||
|                             secret: | ||||
|                               description: SecretFileSource represents a secret that should | ||||
|                                 populate this file. | ||||
|                             configMap: | ||||
|                               description: ConfigMapFileSource represents a config map | ||||
|                                 that should populate this file. | ||||
|                               properties: | ||||
|                                 key: | ||||
|                                   description: Key is the key in the secret's data map | ||||
|                                     for this value. | ||||
|                                   description: Key is the key in the secret or config | ||||
|                                     map's data map for this value. | ||||
|                                   type: string | ||||
|                                 name: | ||||
|                                   description: Name of the secret in the RKE2BootstrapConfig's | ||||
|                                   description: Name of the secret/configmap in the RKE2BootstrapConfig's | ||||
|                                     namespace to use. | ||||
|                                   type: string | ||||
|                               required: | ||||
|                               - key | ||||
|                               - name | ||||
|                               type: object | ||||
|                             secret: | ||||
|                               description: SecretFileSource represents a secret that should | ||||
|                                 populate this file. | ||||
|                               properties: | ||||
|                                 key: | ||||
|                                   description: Key is the key in the secret or config | ||||
|                                     map's data map for this value. | ||||
|                                   type: string | ||||
|                                 name: | ||||
|                                   description: Name of the secret/configmap in the RKE2BootstrapConfig's | ||||
|                                     namespace to use. | ||||
|                                   type: string | ||||
|                               required: | ||||
|                               - key | ||||
|                               - name | ||||
|                               type: object | ||||
|                           required: | ||||
|                           - secret | ||||
|                           type: object | ||||
|                           x-kubernetes-validations: | ||||
|                           - message: Only configMap or secret can be populated at once | ||||
|                             rule: '!(has(self.secret) && has(self.configMap))' | ||||
|                         encoding: | ||||
|                           description: Encoding specifies the encoding of the file contents. | ||||
|                           enum: | ||||
| @@ -1741,7 +1767,7 @@ data: | ||||
|                             additionalProperties: | ||||
|                               type: string | ||||
|                             description: |- | ||||
|                               Map of string keys and values that can be used to organize and categorize | ||||
|                               labels is a map of string keys and values that can be used to organize and categorize | ||||
|                               (scope and select) objects. May match selectors of replication controllers | ||||
|                               and services. | ||||
|                               More info: http://kubernetes.io/docs/user-guide/labels | ||||
| @@ -2603,27 +2629,32 @@ data: | ||||
|                       properties: | ||||
|                         lastTransitionTime: | ||||
|                           description: |- | ||||
|                             Last time the condition transitioned from one status to another. | ||||
|                             lastTransitionTime is the last time the condition transitioned from one status to another. | ||||
|                             This should be when the underlying condition changed. If that is not known, then using the time when | ||||
|                             the API field changed is acceptable. | ||||
|                           format: date-time | ||||
|                           type: string | ||||
|                         message: | ||||
|                           description: |- | ||||
|                             A human readable message indicating details about the transition. | ||||
|                             message is a human readable message indicating details about the transition. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 10240 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         reason: | ||||
|                           description: |- | ||||
|                             The reason for the condition's last transition in CamelCase. | ||||
|                             reason is the reason for the condition's last transition in CamelCase. | ||||
|                             The specific API may choose whether or not this field is considered a guaranteed API. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         severity: | ||||
|                           description: |- | ||||
|                             severity provides an explicit classification of Reason code, so the users or machines can immediately | ||||
|                             understand the current situation and act accordingly. | ||||
|                             The Severity field MUST be set only when Status=False. | ||||
|                           maxLength: 32 | ||||
|                           type: string | ||||
|                         status: | ||||
|                           description: status of the condition, one of True, False, Unknown. | ||||
| @@ -2633,6 +2664,8 @@ data: | ||||
|                             type of condition in CamelCase or in foo.example.com/CamelCase. | ||||
|                             Many .condition.type values are consistent across resources like Available, but because arbitrary conditions | ||||
|                             can be useful (see .node.status.conditions), the ability to deconflict is important. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                       required: | ||||
|                       - lastTransitionTime | ||||
| @@ -3130,25 +3163,43 @@ data: | ||||
|                                   description: ContentFrom is a referenced source of content | ||||
|                                     to populate the file. | ||||
|                                   properties: | ||||
|                                     secret: | ||||
|                                       description: SecretFileSource represents a secret | ||||
|                                         that should populate this file. | ||||
|                                     configMap: | ||||
|                                       description: ConfigMapFileSource represents a config | ||||
|                                         map that should populate this file. | ||||
|                                       properties: | ||||
|                                         key: | ||||
|                                           description: Key is the key in the secret's | ||||
|                                             data map for this value. | ||||
|                                           description: Key is the key in the secret or | ||||
|                                             config map's data map for this value. | ||||
|                                           type: string | ||||
|                                         name: | ||||
|                                           description: Name of the secret in the RKE2BootstrapConfig's | ||||
|                                             namespace to use. | ||||
|                                           description: Name of the secret/configmap in | ||||
|                                             the RKE2BootstrapConfig's namespace to use. | ||||
|                                           type: string | ||||
|                                       required: | ||||
|                                       - key | ||||
|                                       - name | ||||
|                                       type: object | ||||
|                                     secret: | ||||
|                                       description: SecretFileSource represents a secret | ||||
|                                         that should populate this file. | ||||
|                                       properties: | ||||
|                                         key: | ||||
|                                           description: Key is the key in the secret or | ||||
|                                             config map's data map for this value. | ||||
|                                           type: string | ||||
|                                         name: | ||||
|                                           description: Name of the secret/configmap in | ||||
|                                             the RKE2BootstrapConfig's namespace to use. | ||||
|                                           type: string | ||||
|                                       required: | ||||
|                                       - key | ||||
|                                       - name | ||||
|                                       type: object | ||||
|                                   required: | ||||
|                                   - secret | ||||
|                                   type: object | ||||
|                                   x-kubernetes-validations: | ||||
|                                   - message: Only configMap or secret can be populated | ||||
|                                       at once | ||||
|                                     rule: '!(has(self.secret) && has(self.configMap))' | ||||
|                                 encoding: | ||||
|                                   description: Encoding specifies the encoding of the | ||||
|                                     file contents. | ||||
| @@ -3291,7 +3342,7 @@ data: | ||||
|                                     additionalProperties: | ||||
|                                       type: string | ||||
|                                     description: |- | ||||
|                                       Map of string keys and values that can be used to organize and categorize | ||||
|                                       labels is a map of string keys and values that can be used to organize and categorize | ||||
|                                       (scope and select) objects. May match selectors of replication controllers | ||||
|                                       and services. | ||||
|                                       More info: http://kubernetes.io/docs/user-guide/labels | ||||
| @@ -4181,27 +4232,32 @@ data: | ||||
|                       properties: | ||||
|                         lastTransitionTime: | ||||
|                           description: |- | ||||
|                             Last time the condition transitioned from one status to another. | ||||
|                             lastTransitionTime is the last time the condition transitioned from one status to another. | ||||
|                             This should be when the underlying condition changed. If that is not known, then using the time when | ||||
|                             the API field changed is acceptable. | ||||
|                           format: date-time | ||||
|                           type: string | ||||
|                         message: | ||||
|                           description: |- | ||||
|                             A human readable message indicating details about the transition. | ||||
|                             message is a human readable message indicating details about the transition. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 10240 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         reason: | ||||
|                           description: |- | ||||
|                             The reason for the condition's last transition in CamelCase. | ||||
|                             reason is the reason for the condition's last transition in CamelCase. | ||||
|                             The specific API may choose whether or not this field is considered a guaranteed API. | ||||
|                             This field may be empty. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                         severity: | ||||
|                           description: |- | ||||
|                             severity provides an explicit classification of Reason code, so the users or machines can immediately | ||||
|                             understand the current situation and act accordingly. | ||||
|                             The Severity field MUST be set only when Status=False. | ||||
|                           maxLength: 32 | ||||
|                           type: string | ||||
|                         status: | ||||
|                           description: status of the condition, one of True, False, Unknown. | ||||
| @@ -4211,6 +4267,8 @@ data: | ||||
|                             type of condition in CamelCase or in foo.example.com/CamelCase. | ||||
|                             Many .condition.type values are consistent across resources like Available, but because arbitrary conditions | ||||
|                             can be useful (see .node.status.conditions), the ability to deconflict is important. | ||||
|                           maxLength: 256 | ||||
|                           minLength: 1 | ||||
|                           type: string | ||||
|                       required: | ||||
|                       - lastTransitionTime | ||||
| @@ -4559,7 +4617,7 @@ data: | ||||
|               valueFrom: | ||||
|                 fieldRef: | ||||
|                   fieldPath: metadata.uid | ||||
|             image: ghcr.io/rancher/cluster-api-provider-rke2-controlplane:v0.18.0 | ||||
|             image: ghcr.io/rancher/cluster-api-provider-rke2-controlplane:v0.20.1 | ||||
|             imagePullPolicy: IfNotPresent | ||||
|             livenessProbe: | ||||
|               httpGet: | ||||
| @@ -4807,10 +4865,16 @@ data: | ||||
|       - major: 0 | ||||
|         minor: 18 | ||||
|         contract: v1beta1 | ||||
|       - major: 0 | ||||
|         minor: 19 | ||||
|         contract: v1beta1 | ||||
|       - major: 0 | ||||
|         minor: 20 | ||||
|         contract: v1beta1 | ||||
| kind: ConfigMap | ||||
| metadata: | ||||
|   creationTimestamp: null | ||||
|   name: v0.18.0 | ||||
|   name: v0.20.1 | ||||
|   namespace: rke2-control-plane-system | ||||
|   labels: | ||||
|     provider-components: rke2-control-plane | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles:%%CHART_MAJOR%%.0.5_up0.21.0 | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles:%%CHART_MAJOR%%.0.5_up0.21.0-%RELEASE% | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles:%%CHART_MAJOR%%.0.6_up0.24.0 | ||||
| #!BuildTag: %%CHART_PREFIX%%rancher-turtles:%%CHART_MAJOR%%.0.6_up0.24.0-%RELEASE% | ||||
| annotations: | ||||
|   catalog.cattle.io/certified: rancher | ||||
|   catalog.cattle.io/display-name: Rancher Turtles - the Cluster API Extension | ||||
| @@ -7,17 +7,12 @@ annotations: | ||||
|   catalog.cattle.io/namespace: rancher-turtles-system | ||||
|   catalog.cattle.io/os: linux | ||||
|   catalog.cattle.io/permits-os: linux | ||||
|   catalog.cattle.io/rancher-version: '>= 2.11.0-1' | ||||
|   catalog.cattle.io/rancher-version: '>= 2.12.1-0 < 2.13.0-0' | ||||
|   catalog.cattle.io/release-name: rancher-turtles | ||||
|   catalog.cattle.io/scope: management | ||||
|   catalog.cattle.io/type: cluster-tool | ||||
| apiVersion: v2 | ||||
| appVersion: 0.21.0 | ||||
| dependencies: | ||||
| - condition: cluster-api-operator.enabled | ||||
|   name: cluster-api-operator | ||||
|   repository: file://./charts/cluster-api-operator | ||||
|   version: 0.18.1 | ||||
| appVersion: 0.24.0 | ||||
| description: Rancher Turtles is an extension to Rancher that brings full Cluster API | ||||
|   integration to Rancher. | ||||
| home: https://github.com/rancher/turtles/ | ||||
| @@ -29,4 +24,4 @@ keywords: | ||||
| - provisioning | ||||
| name: rancher-turtles | ||||
| type: application | ||||
| version: "%%CHART_MAJOR%%.0.5+up0.21.0" | ||||
| version: "%%CHART_MAJOR%%.0.6+up0.24.0" | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| # Rancher Turtles Chart | ||||
|  | ||||
| This chart installs the Rancher Turtles operator and optionally the Cluster API Operator using Helm. | ||||
| This chart installs Rancher Turtles using Helm. | ||||
|  | ||||
| Checkout the [documentation](https://turtles.docs.rancher.com) for further information. | ||||
|   | ||||
| @@ -1,6 +1,42 @@ | ||||
| ## Changes since examples/v0.21.0 | ||||
| --- | ||||
| ## :chart_with_upwards_trend: Overview | ||||
| ## Highlights | ||||
|  | ||||
| * REPLACE ME | ||||
|  | ||||
| ## Deprecation Warning | ||||
|  | ||||
| REPLACE ME: A couple sentences describing the deprecation, including links to docs. | ||||
|  | ||||
| * [GitHub issue #REPLACE ME](REPLACE ME) | ||||
|  | ||||
| ## Changes since v0.24.0-rc.0 | ||||
| ## :chart_with_upwards_trend: Overview | ||||
| - 10 new commits merged | ||||
|  | ||||
| :book: Additionally, there has been 1 contribution to our documentation and book. (#1714)  | ||||
|  | ||||
| ## :question: Sort these by hand | ||||
| - Build-and-release: Add automation to release turtles in rancher/charts and rancher/rancher (#1663) | ||||
| - Build-and-release: Doc: Add ADR for updated release process (#1660) | ||||
| - Build-and-release: Test prime image build (#1710) | ||||
| - CI: Display kind and docker version in e2e runs (#1707) | ||||
| - Dependency: Bump forward CAPA to v2.9.1 patch release (#1713) | ||||
| - Dependency: Chore(deps): Bump github.com/onsi/ginkgo/v2 from 2.25.2 to 2.25.3 in the testing-dependencies group (#1692) | ||||
| - Dependency: Chore(deps): Bump the other-dependencies group with 2 updates (#1693) | ||||
| - Testing: Test: cleanup import gitops suite/spec (#1704) | ||||
| - Testing: Use providers charts in e2e (#1699) | ||||
|  | ||||
| ## Dependencies | ||||
|  | ||||
| ### Added | ||||
| _Nothing has changed._ | ||||
|  | ||||
| ### Changed | ||||
| - github.com/onsi/ginkgo/v2: [v2.25.2 → v2.25.3](https://github.com/onsi/ginkgo/compare/v2.25.2...v2.25.3) | ||||
| - github.com/spf13/pflag: [v1.0.7 → v1.0.10](https://github.com/spf13/pflag/compare/v1.0.7...v1.0.10) | ||||
| - golang.org/x/sync: v0.16.0 → v0.17.0 | ||||
| - golang.org/x/text: v0.28.0 → v0.29.0 | ||||
|  | ||||
| ### Removed | ||||
| _Nothing has changed._ | ||||
|  | ||||
| _Thanks to all our contributors!_ 😊 | ||||
|   | ||||
| @@ -1,23 +0,0 @@ | ||||
| # Patterns to ignore when building packages. | ||||
| # This supports shell glob matching, relative path matching, and | ||||
| # negation (prefixed with !). Only one pattern per line. | ||||
| .DS_Store | ||||
| # Common VCS dirs | ||||
| .git/ | ||||
| .gitignore | ||||
| .bzr/ | ||||
| .bzrignore | ||||
| .hg/ | ||||
| .hgignore | ||||
| .svn/ | ||||
| # Common backup files | ||||
| *.swp | ||||
| *.bak | ||||
| *.tmp | ||||
| *.orig | ||||
| *~ | ||||
| # Various IDEs | ||||
| .project | ||||
| .idea/ | ||||
| *.tmproj | ||||
| .vscode/ | ||||
| @@ -1,6 +0,0 @@ | ||||
| apiVersion: v2 | ||||
| appVersion: 0.18.1 | ||||
| description: Cluster API Operator | ||||
| name: cluster-api-operator | ||||
| type: application | ||||
| version: 0.18.1 | ||||
| @@ -1,24 +0,0 @@ | ||||
| {{/* vim: set filetype=mustache: */}} | ||||
| {{/* | ||||
| Expand the name of the chart. | ||||
| */}} | ||||
| {{- define "capi-operator.name" -}} | ||||
| {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}} | ||||
| {{- end -}} | ||||
|  | ||||
| {{/* | ||||
| Create a default fully qualified app name. | ||||
| We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). | ||||
| */}} | ||||
| {{- define "capi-operator.fullname" -}} | ||||
| {{- if .Values.fullnameOverride -}} | ||||
| {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}} | ||||
| {{- else -}} | ||||
| {{- $name := default .Chart.Name .Values.nameOverride -}} | ||||
| {{- if contains $name .Release.Name -}} | ||||
| {{- .Release.Name | trunc 63 | trimSuffix "-" -}} | ||||
| {{- else -}} | ||||
| {{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}} | ||||
| {{- end -}} | ||||
| {{- end -}} | ||||
| {{- end -}} | ||||
| @@ -1,60 +0,0 @@ | ||||
| # Addon provider | ||||
| {{- if .Values.addon }} | ||||
| {{- $addons := split ";" .Values.addon }} | ||||
| {{- $addonNamespace := "" }} | ||||
| {{- $addonName := "" }} | ||||
| {{- $addonVersion := "" }} | ||||
| {{- range $addon := $addons }} | ||||
| {{- $addonArgs := split ":" $addon }} | ||||
| {{- $addonArgsLen :=  len $addonArgs }} | ||||
| {{-  if eq $addonArgsLen 3 }} | ||||
|   {{- $addonNamespace = $addonArgs._0 }} | ||||
|   {{- $addonName = $addonArgs._1 }} | ||||
|   {{- $addonVersion = $addonArgs._2 }} | ||||
| {{-  else if eq $addonArgsLen 2 }} | ||||
|   {{- $addonNamespace = print $addonArgs._0 "-addon-system" }} | ||||
|   {{- $addonName = $addonArgs._0 }} | ||||
|   {{- $addonVersion = $addonArgs._1 }} | ||||
| {{-  else if eq $addonArgsLen 1 }} | ||||
|   {{- $addonNamespace = print $addonArgs._0 "-addon-system" }} | ||||
|   {{- $addonName = $addonArgs._0 }} | ||||
| {{- else }} | ||||
|   {{- fail "addon provider argument should have the following format helm:v1.0.0 or mynamespace:helm:v1.0.0" }} | ||||
| {{- end }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: {{ $addonNamespace }} | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: AddonProvider | ||||
| metadata: | ||||
|   name: {{ $addonName }} | ||||
|   namespace: {{ $addonNamespace }} | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- if or $addonVersion $.Values.secretName }} | ||||
| spec: | ||||
| {{- end}} | ||||
| {{- if $addonVersion }} | ||||
|   version: {{ $addonVersion }} | ||||
| {{- end }} | ||||
| {{- if $.Values.secretName }} | ||||
|   secretName: {{ $.Values.secretName }} | ||||
| {{- end }} | ||||
| {{- if $.Values.secretNamespace }} | ||||
|   secretNamespace: {{ $.Values.secretNamespace }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| @@ -1,61 +0,0 @@ | ||||
| # Bootstrap provider | ||||
| {{- if .Values.bootstrap }} | ||||
| {{- $bootstraps := split ";" .Values.bootstrap }} | ||||
| {{- $bootstrapNamespace := "" }} | ||||
| {{- $bootstrapName := "" }} | ||||
| {{- $bootstrapVersion := "" }} | ||||
| {{- range $bootstrap := $bootstraps }} | ||||
| {{- $bootstrapArgs := split ":" $bootstrap }} | ||||
| {{- $bootstrapArgsLen :=  len $bootstrapArgs }} | ||||
| {{-  if eq $bootstrapArgsLen 3 }} | ||||
|   {{- $bootstrapNamespace = $bootstrapArgs._0 }} | ||||
|   {{- $bootstrapName = $bootstrapArgs._1 }} | ||||
|   {{- $bootstrapVersion = $bootstrapArgs._2 }} | ||||
| {{-  else if eq $bootstrapArgsLen 2 }} | ||||
|   {{- $bootstrapNamespace = print $bootstrapArgs._0 "-bootstrap-system" }} | ||||
|   {{- $bootstrapName = $bootstrapArgs._0 }} | ||||
|   {{- $bootstrapVersion = $bootstrapArgs._1 }} | ||||
| {{-  else if eq $bootstrapArgsLen 1 }} | ||||
|   {{- $bootstrapNamespace = print $bootstrapArgs._0 "-bootstrap-system" }} | ||||
|   {{- $bootstrapName = $bootstrapArgs._0 }} | ||||
| {{- else }} | ||||
|   {{- fail "bootstrap provider argument should have the following format kubeadm:v1.0.0 or mynamespace:kubeadm:v1.0.0" }} | ||||
| {{- end }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: {{ $bootstrapNamespace }} | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: BootstrapProvider | ||||
| metadata: | ||||
|   name: {{ $bootstrapName }} | ||||
|   namespace: {{ $bootstrapNamespace }} | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- if or $bootstrapVersion $.Values.configSecret.name }} | ||||
| spec: | ||||
| {{- end}} | ||||
| {{- if $bootstrapVersion }} | ||||
|   version: {{ $bootstrapVersion }} | ||||
| {{- end }} | ||||
| {{- if $.Values.configSecret.name }} | ||||
|   configSecret: | ||||
|     name: {{ $.Values.configSecret.name }} | ||||
|     {{- if $.Values.configSecret.namespace }} | ||||
|     namespace: {{ $.Values.configSecret.namespace }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| @@ -1,74 +0,0 @@ | ||||
| # Control plane provider | ||||
| {{- if .Values.controlPlane }} | ||||
| {{- $controlPlanes := split ";" .Values.controlPlane }} | ||||
| {{- $controlPlaneNamespace := "" }} | ||||
| {{- $controlPlaneName := "" }} | ||||
| {{- $controlPlaneVersion := "" }} | ||||
| {{- range $controlPlane := $controlPlanes }} | ||||
| {{- $controlPlaneArgs := split ":" $controlPlane }} | ||||
| {{- $controlPlaneArgsLen :=  len $controlPlaneArgs }} | ||||
| {{-  if eq $controlPlaneArgsLen 3 }} | ||||
|   {{- $controlPlaneNamespace = $controlPlaneArgs._0 }} | ||||
|   {{- $controlPlaneName = $controlPlaneArgs._1 }} | ||||
|   {{- $controlPlaneVersion = $controlPlaneArgs._2 }} | ||||
| {{-  else if eq $controlPlaneArgsLen 2 }} | ||||
|   {{- $controlPlaneNamespace = print $controlPlaneArgs._0 "-control-plane-system" }} | ||||
|   {{- $controlPlaneName = $controlPlaneArgs._0 }} | ||||
|   {{- $controlPlaneVersion = $controlPlaneArgs._1 }} | ||||
| {{-  else if eq $controlPlaneArgsLen 1 }} | ||||
|   {{- $controlPlaneNamespace = print $controlPlaneArgs._0 "-control-plane-system" }} | ||||
|   {{- $controlPlaneName = $controlPlaneArgs._0 }} | ||||
| {{- else }} | ||||
|   {{- fail "controlplane provider argument should have the following format kubeadm:v1.0.0 or mynamespace:kubeadm:v1.0.0" }} | ||||
| {{-  end }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: {{ $controlPlaneNamespace }} | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: ControlPlaneProvider | ||||
| metadata: | ||||
|   name: {{ $controlPlaneName }} | ||||
|   namespace: {{ $controlPlaneNamespace }} | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- if or $controlPlaneVersion $.Values.configSecret.name $.Values.manager }} | ||||
| spec: | ||||
| {{- end}} | ||||
| {{- if $controlPlaneVersion }} | ||||
|   version: {{ $controlPlaneVersion }} | ||||
| {{- end }} | ||||
| {{- if $.Values.manager }} | ||||
| {{- if hasKey $.Values.manager.featureGates $controlPlaneName }} | ||||
|   manager: | ||||
| {{- range $key, $value := $.Values.manager.featureGates }} | ||||
|   {{- if eq $key $controlPlaneName }} | ||||
|     featureGates: | ||||
|     {{- range $k, $v := $value }} | ||||
|       {{ $k }}: {{ $v }} | ||||
|     {{- end }} | ||||
|   {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- if $.Values.configSecret.name }} | ||||
|   configSecret: | ||||
|     name: {{ $.Values.configSecret.name }} | ||||
|     {{- if $.Values.configSecret.namespace }} | ||||
|     namespace: {{ $.Values.configSecret.namespace }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| @@ -1,36 +0,0 @@ | ||||
| {{- if or .Values.addon .Values.bootstrap .Values.controlPlane .Values.infrastructure .Values.ipam }} | ||||
| # Deploy core components if not specified | ||||
| {{- if not .Values.core }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: capi-system | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: CoreProvider | ||||
| metadata: | ||||
|   name: cluster-api | ||||
|   namespace: capi-system | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- with .Values.configSecret }} | ||||
| spec: | ||||
|   configSecret: | ||||
|     name: {{ .name }} | ||||
|     {{- if .namespace }} | ||||
|     namespace: {{ .namespace }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| @@ -1,68 +0,0 @@ | ||||
| # Core provider | ||||
| {{- if .Values.core }} | ||||
| {{- $coreArgs := split ":" .Values.core }} | ||||
| {{- $coreArgsLen :=  len $coreArgs }} | ||||
| {{- $coreVersion := "" }} | ||||
| {{- $coreNamespace := "" }} | ||||
| {{- $coreName := "" }} | ||||
| {{- $coreVersion := "" }} | ||||
| {{-  if eq $coreArgsLen 3 }} | ||||
|   {{- $coreNamespace = $coreArgs._0 }} | ||||
|   {{- $coreName = $coreArgs._1 }} | ||||
|   {{- $coreVersion = $coreArgs._2 }} | ||||
| {{-  else if eq $coreArgsLen 2 }} | ||||
|   {{- $coreNamespace = "capi-system" }} | ||||
|   {{- $coreName = $coreArgs._0 }} | ||||
|   {{- $coreVersion = $coreArgs._1 }} | ||||
| {{-  else if eq $coreArgsLen 1 }} | ||||
|   {{- $coreNamespace = "capi-system" }} | ||||
|   {{- $coreName = $coreArgs._0 }} | ||||
| {{- else }} | ||||
|   {{- fail "core provider argument should have the following format cluster-api:v1.0.0 or mynamespace:cluster-api:v1.0.0" }} | ||||
| {{-  end }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: {{ $coreNamespace }} | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: CoreProvider | ||||
| metadata: | ||||
|   name: {{ $coreName }} | ||||
|   namespace: {{ $coreNamespace }} | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- if or $coreVersion $.Values.configSecret.name $.Values.manager }} | ||||
| spec: | ||||
| {{- end}} | ||||
| {{- if $coreVersion }} | ||||
|   version: {{ $coreVersion }} | ||||
| {{- end }} | ||||
| {{- if $.Values.manager }} | ||||
| {{- if and $.Values.manager.featureGates $.Values.manager.featureGates.core }} | ||||
|   manager: | ||||
|     featureGates: | ||||
|     {{- range $key, $value := $.Values.manager.featureGates.core }} | ||||
|       {{ $key }}: {{ $value }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- if $.Values.configSecret.name }} | ||||
|   configSecret: | ||||
|     name: {{ $.Values.configSecret.name }} | ||||
|     {{- if $.Values.configSecret.namespace }} | ||||
|     namespace: {{ $.Values.configSecret.namespace }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| @@ -1,177 +0,0 @@ | ||||
| apiVersion: apps/v1 | ||||
| kind: Deployment | ||||
| metadata: | ||||
|   name: {{ template "capi-operator.fullname" . }} | ||||
|   namespace: '{{ .Release.Namespace }}' | ||||
|   labels: | ||||
|     app: {{ template "capi-operator.name" . }} | ||||
|     app.kubernetes.io/name: {{ template "capi-operator.name" . }} | ||||
|     app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|     app.kubernetes.io/component: "controller" | ||||
|     control-plane: controller-manager | ||||
|     clusterctl.cluster.x-k8s.io/core: capi-operator | ||||
|     {{- with .Values.deploymentLabels }} | ||||
|     {{- toYaml . | nindent 4 }} | ||||
|     {{- end }} | ||||
|   {{- with .Values.deploymentAnnotations }} | ||||
|   annotations: | ||||
|   {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
| spec: | ||||
|   replicas: {{ .Values.replicaCount }} | ||||
|   selector: | ||||
|     matchLabels: | ||||
|       app.kubernetes.io/name: {{ template "capi-operator.name" . }} | ||||
|       app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|       app.kubernetes.io/component: "controller" | ||||
|       control-plane: controller-manager | ||||
|       clusterctl.cluster.x-k8s.io/core: capi-operator | ||||
|   {{- with .Values.strategy }} | ||||
|   strategy: | ||||
|   {{- toYaml . | nindent 4 }} | ||||
|   {{- end }} | ||||
|   template: | ||||
|     metadata: | ||||
|       labels: | ||||
|         app: {{ template "capi-operator.name" . }} | ||||
|         app.kubernetes.io/name: {{ template "capi-operator.name" . }} | ||||
|         app.kubernetes.io/instance: {{ .Release.Name }} | ||||
|         app.kubernetes.io/component: "controller" | ||||
|         control-plane: controller-manager | ||||
|         clusterctl.cluster.x-k8s.io/core: capi-operator | ||||
|         {{- with .Values.podLabels }} | ||||
|         {{- toYaml . | nindent 8 }} | ||||
|         {{- end }} | ||||
|       {{- with .Values.podAnnotations }} | ||||
|       annotations: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|     spec: | ||||
|       serviceAccountName: capi-operator-manager | ||||
|       automountServiceAccountToken: true | ||||
|       {{- with .Values.securityContext }} | ||||
|       securityContext: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- with .Values.imagePullSecrets }} | ||||
|       imagePullSecrets: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       containers: | ||||
|       - args: | ||||
|         {{- if .Values.logLevel }} | ||||
|         - --v={{ .Values.logLevel }} | ||||
|         {{- end }} | ||||
|         {{- if .Values.healthAddr }} | ||||
|         - --health-addr={{ .Values.healthAddr }} | ||||
|         {{- end }} | ||||
|         {{- if .Values.diagnosticsAddress }} | ||||
|         - --diagnostics-address={{ .Values.diagnosticsAddress }} | ||||
|         {{- end }} | ||||
|         {{- if .Values.insecureDiagnostics }} | ||||
|         - --insecure-diagnostics={{ .Values.insecureDiagnostics }} | ||||
|         {{- end }} | ||||
|         {{- if .Values.watchConfigSecret }} | ||||
|         - --watch-configsecret | ||||
|         {{- end }} | ||||
|         {{- with .Values.leaderElection }} | ||||
|         - --leader-elect={{ .enabled }} | ||||
|         {{- if .leaseDuration }} | ||||
|         - --leader-elect-lease-duration={{ .leaseDuration }} | ||||
|         {{- end }} | ||||
|         {{- if .renewDeadline }} | ||||
|         - --leader-elect-renew-deadline={{ .renewDeadline }} | ||||
|         {{- end }} | ||||
|         {{- if .retryPeriod }} | ||||
|         - --leader-elect-retry-period={{ .retryPeriod }} | ||||
|         {{- end }} | ||||
|         {{- end }} | ||||
|         command: | ||||
|         - /manager | ||||
|         {{- with .Values.image.manager }} | ||||
|         image: "{{- if .registry -}}{{ .registry }}/{{- end -}}{{ .repository }}{{- if (.digest) -}} @{{ .digest }}{{- else -}}:{{ default $.Chart.AppVersion .tag }} {{- end -}}" | ||||
|         {{- end }} | ||||
|         imagePullPolicy: {{ .Values.image.manager.pullPolicy }} | ||||
|         name: manager | ||||
|         ports: | ||||
|         - containerPort: 9443 | ||||
|           name: webhook-server | ||||
|           protocol: TCP | ||||
|           {{- if $.Values.diagnosticsAddress }} | ||||
|           {{- $diagnosticsPort := $.Values.diagnosticsAddress }} | ||||
|           {{- if contains ":" $diagnosticsPort -}} | ||||
|           {{ $diagnosticsPort = ( split ":" $.Values.diagnosticsAddress)._1 | int }} | ||||
|           {{- end }} | ||||
|         - containerPort: {{ $diagnosticsPort | int }} | ||||
|           name: metrics | ||||
|           protocol: TCP | ||||
|           {{- end }} | ||||
|         {{- with .Values.resources.manager }} | ||||
|         resources: | ||||
|         {{- toYaml . | nindent 12 }} | ||||
|         {{- end }} | ||||
|         {{- with .Values.env.manager }} | ||||
|         env: | ||||
|         {{- toYaml . | nindent 12 }} | ||||
|         {{- end }} | ||||
|         {{- with .Values.containerSecurityContext.manager }} | ||||
|         securityContext: | ||||
|         {{- toYaml . | nindent 12 }} | ||||
|         {{- end }} | ||||
|         {{- with .Values.volumeMounts.manager }} | ||||
|         volumeMounts: | ||||
|         {{- toYaml . | nindent 12 }} | ||||
|         {{- end }} | ||||
|         terminationMessagePolicy: FallbackToLogsOnError | ||||
|         {{- $healthAddr := $.Values.healthAddr }} | ||||
|         {{- if contains ":" $healthAddr -}} | ||||
|         {{ $healthAddr = ( split ":" $.Values.healthAddr)._1 | int }} | ||||
|         {{- end }} | ||||
|         livenessProbe: | ||||
|           failureThreshold: 3 | ||||
|           httpGet: | ||||
|             path: /healthz | ||||
|             port: {{ $healthAddr | default 9440 }} | ||||
|             scheme: HTTP | ||||
|           initialDelaySeconds: 15 | ||||
|           periodSeconds: 20 | ||||
|           successThreshold: 1 | ||||
|           timeoutSeconds: 1 | ||||
|         readinessProbe: | ||||
|           failureThreshold: 3 | ||||
|           httpGet: | ||||
|             path: /readyz | ||||
|             port: {{ $healthAddr | default 9440 }} | ||||
|             scheme: HTTP | ||||
|           initialDelaySeconds: 5 | ||||
|           periodSeconds: 10 | ||||
|           successThreshold: 1 | ||||
|           timeoutSeconds: 1 | ||||
|       terminationGracePeriodSeconds: 10 | ||||
|       {{- with .Values.volumes }} | ||||
|       volumes: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- with .Values.nodeSelector }} | ||||
|       nodeSelector: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- with .Values.affinity }} | ||||
|       affinity: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- with .Values.tolerations }} | ||||
|       tolerations: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- with  .Values.topologySpreadConstraints }} | ||||
|       topologySpreadConstraints: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
|       {{- with .Values.podDnsPolicy }} | ||||
|       dnsPolicy: {{ . }} | ||||
|       {{- end }} | ||||
|       {{- with .Values.podDnsConfig }} | ||||
|       dnsConfig: | ||||
|       {{- toYaml . | nindent 8 }} | ||||
|       {{- end }} | ||||
| @@ -1,81 +0,0 @@ | ||||
| {{- if .Values.infrastructure }} | ||||
|  | ||||
| # Deploy bootstrap, and infrastructure components if not specified | ||||
| {{- if not .Values.bootstrap }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: capi-kubeadm-bootstrap-system | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: BootstrapProvider | ||||
| metadata: | ||||
|   name: kubeadm | ||||
|   namespace: capi-kubeadm-bootstrap-system | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- with .Values.configSecret }} | ||||
| spec: | ||||
|   configSecret: | ||||
|     name: {{ .name }} | ||||
|     {{- if .namespace }} | ||||
|     namespace: {{ .namespace }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
|  | ||||
| {{- if not .Values.controlPlane }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: capi-kubeadm-control-plane-system | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: ControlPlaneProvider | ||||
| metadata: | ||||
|   name: kubeadm | ||||
|   namespace: capi-kubeadm-control-plane-system | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- with .Values.configSecret }} | ||||
| spec: | ||||
| {{- if $.Values.manager }} | ||||
| {{- if and $.Values.manager.featureGates $.Values.manager.featureGates.kubeadm }} | ||||
|   manager: | ||||
|     featureGates: | ||||
|     {{- range $key, $value := $.Values.manager.featureGates.kubeadm }} | ||||
|       {{ $key }}: {{ $value }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
|   configSecret: | ||||
|     name: {{ .name }} | ||||
|     {{- if .namespace }} | ||||
|     namespace: {{ .namespace }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
|  | ||||
| {{- end }} | ||||
| @@ -1,87 +0,0 @@ | ||||
| # Infrastructure providers | ||||
| {{- if .Values.infrastructure }} | ||||
| {{- $infrastructures := split ";" .Values.infrastructure }} | ||||
| {{- $infrastructureNamespace := "" }} | ||||
| {{- $infrastructureName := "" }} | ||||
| {{- $infrastructureVersion := "" }} | ||||
| {{- range $infrastructure := $infrastructures }} | ||||
| {{- $infrastructureArgs := split ":" $infrastructure }} | ||||
| {{- $infrastructureArgsLen := len $infrastructureArgs }} | ||||
| {{-  if eq $infrastructureArgsLen 3 }} | ||||
|   {{- $infrastructureNamespace = $infrastructureArgs._0 }} | ||||
|   {{- $infrastructureName = $infrastructureArgs._1 }} | ||||
|   {{- $infrastructureVersion = $infrastructureArgs._2 }} | ||||
| {{-  else if eq $infrastructureArgsLen 2 }} | ||||
|   {{- $infrastructureNamespace = print $infrastructureArgs._0 "-infrastructure-system" }} | ||||
|   {{- $infrastructureName = $infrastructureArgs._0 }} | ||||
|   {{- $infrastructureVersion = $infrastructureArgs._1 }} | ||||
| {{-  else if eq $infrastructureArgsLen 1 }} | ||||
|   {{- $infrastructureNamespace = print $infrastructureArgs._0 "-infrastructure-system" }} | ||||
|   {{- $infrastructureName = $infrastructureArgs._0 }} | ||||
| {{- else }} | ||||
|   {{- fail "infrastructure provider argument should have the following format aws:v1.0.0 or mynamespace:aws:v1.0.0" }} | ||||
| {{- end }} | ||||
| --- | ||||
| apiVersion: v1 | ||||
| kind: Namespace | ||||
| metadata: | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "1" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "1" | ||||
|   name: {{ $infrastructureNamespace }} | ||||
| --- | ||||
| apiVersion: operator.cluster.x-k8s.io/v1alpha2 | ||||
| kind: InfrastructureProvider | ||||
| metadata: | ||||
|   name: {{ $infrastructureName }} | ||||
|   namespace: {{ $infrastructureNamespace }} | ||||
|   annotations: | ||||
|     {{- if $.Values.enableHelmHook }} | ||||
|     "helm.sh/hook": "post-install,post-upgrade" | ||||
|     "helm.sh/hook-weight": "2" | ||||
|     {{- end }} | ||||
|     "argocd.argoproj.io/sync-wave": "2" | ||||
| {{- if or $infrastructureVersion $.Values.configSecret.name $.Values.manager $.Values.additionalDeployments }} | ||||
| spec: | ||||
| {{- end }} | ||||
| {{- if $infrastructureVersion }} | ||||
|   version: {{ $infrastructureVersion }} | ||||
| {{- end }} | ||||
| {{- if $.Values.manager }} | ||||
| {{- if and (kindIs "map" $.Values.manager.featureGates) (hasKey $.Values.manager.featureGates $infrastructureName) }} | ||||
|   manager: | ||||
| {{- range $key, $value := $.Values.manager.featureGates }} | ||||
|   {{- if eq $key $infrastructureName }} | ||||
|     featureGates: | ||||
|     {{- range $k, $v := $value }} | ||||
|       {{ $k }}: {{ $v }} | ||||
|     {{- end }} | ||||
|   {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- if and (kindIs "map" $.Values.fetchConfig) (hasKey $.Values.fetchConfig $infrastructureName) }} | ||||
| {{- range $key, $value := $.Values.fetchConfig }} | ||||
|   {{- if eq $key $infrastructureName }} | ||||
|   fetchConfig: | ||||
|     {{- range $k, $v := $value }} | ||||
|       {{ $k }}: {{ $v }} | ||||
|     {{- end }} | ||||
|   {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- if $.Values.configSecret.name }} | ||||
|   configSecret: | ||||
|     name: {{ $.Values.configSecret.name }} | ||||
|     {{- if $.Values.configSecret.namespace }} | ||||
|     namespace: {{ $.Values.configSecret.namespace }} | ||||
|     {{- end }} | ||||
| {{- end }} | ||||
| {{- if $.Values.additionalDeployments }} | ||||
|   additionalDeployments: {{ toYaml $.Values.additionalDeployments | nindent 4 }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
| {{- end }} | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user