forked from suse-edge/Factory
Compare commits
73 Commits
kube-rbac-
...
3.4
Author | SHA256 | Date | |
---|---|---|---|
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
|
||||
|
@@ -18,4 +18,8 @@ spec:
|
||||
{{- with .Values.cdi.workload }}
|
||||
workload:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- 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.3
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.3-%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.3"
|
||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:29.0.4.3-%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/
|
||||
|
||||
|
@@ -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.9
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.9-%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.9"
|
||||
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.9-%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.9
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.9-%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.9"
|
||||
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.9-%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.9
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.9-%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.9"
|
||||
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.9-%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
|
||||
|
@@ -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.16_up0.12.6
|
||||
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.16_up0.12.6-%RELEASE%
|
||||
apiVersion: v2
|
||||
appVersion: 0.12.2
|
||||
appVersion: 0.12.6
|
||||
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.4
|
||||
- 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.6.6
|
||||
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.16+up0.12.6"
|
||||
|
@@ -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.4
|
||||
|
@@ -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 }}
|
||||
|
@@ -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.3
|
||||
ironicIPADownloader:
|
||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader
|
||||
pullPolicy: IfNotPresent
|
||||
tag: 3.0.8
|
||||
tag: 3.0.9
|
||||
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
@@ -3,4 +3,4 @@ appVersion: 1.16.0
|
||||
description: A Helm chart for Media, used by Metal3
|
||||
name: media
|
||||
type: application
|
||||
version: 0.6.5
|
||||
version: 0.6.6
|
||||
|
@@ -24,7 +24,7 @@ replicaCount: 1
|
||||
image:
|
||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
|
||||
pullPolicy: IfNotPresent
|
||||
tag: 29.0.4.1
|
||||
tag: 29.0.4.2
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: ""
|
||||
|
@@ -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 }}
|
@@ -1,77 +0,0 @@
|
||||
# IPAM providers
|
||||
{{- if .Values.ipam }}
|
||||
{{- $ipams := split ";" .Values.ipam }}
|
||||
{{- $ipamNamespace := "" }}
|
||||
{{- $ipamName := "" }}
|
||||
{{- $ipamVersion := "" }}
|
||||
{{- range $ipam := $ipams }}
|
||||
{{- $ipamArgs := split ":" $ipam }}
|
||||
{{- $ipamArgsLen := len $ipamArgs }}
|
||||
{{- if eq $ipamArgsLen 3 }}
|
||||
{{- $ipamNamespace = $ipamArgs._0 }}
|
||||
{{- $ipamName = $ipamArgs._1 }}
|
||||
{{- $ipamVersion = $ipamArgs._2 }}
|
||||
{{- else if eq $ipamArgsLen 2 }}
|
||||
{{- $ipamNamespace = print $ipamArgs._0 "-ipam-system" }}
|
||||
{{- $ipamName = $ipamArgs._0 }}
|
||||
{{- $ipamVersion = $ipamArgs._1 }}
|
||||
{{- else if eq $ipamArgsLen 1 }}
|
||||
{{- $ipamNamespace = print $ipamArgs._0 "-ipam-system" }}
|
||||
{{- $ipamName = $ipamArgs._0 }}
|
||||
{{- else }}
|
||||
{{- fail "ipam provider argument should have the following format in-cluster:v1.0.0 or mynamespace:in-cluster: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: {{ $ipamNamespace }}
|
||||
---
|
||||
apiVersion: operator.cluster.x-k8s.io/v1alpha2
|
||||
kind: IPAMProvider
|
||||
metadata:
|
||||
name: {{ $ipamName }}
|
||||
namespace: {{ $ipamNamespace }}
|
||||
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 $ipamVersion $.Values.configSecret.name $.Values.manager $.Values.additionalDeployments }}
|
||||
spec:
|
||||
{{- end }}
|
||||
{{- if $ipamVersion }}
|
||||
version: {{ $ipamVersion }}
|
||||
{{- end }}
|
||||
{{- if $.Values.manager }}
|
||||
{{- if and (kindIs "map" $.Values.manager.featureGates) (hasKey $.Values.manager.featureGates $ipamName) }}
|
||||
manager:
|
||||
{{- range $key, $value := $.Values.manager.featureGates }}
|
||||
{{- if eq $key $ipamName }}
|
||||
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 }}
|
||||
{{- if $.Values.additionalDeployments }}
|
||||
additionalDeployments: {{ toYaml $.Values.additionalDeployments | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
File diff suppressed because it is too large
Load Diff
@@ -1,72 +0,0 @@
|
||||
---
|
||||
# ---
|
||||
# Cluster API provider options
|
||||
core: ""
|
||||
bootstrap: ""
|
||||
controlPlane: ""
|
||||
infrastructure: ""
|
||||
ipam: ""
|
||||
addon: ""
|
||||
manager.featureGates: {}
|
||||
fetchConfig: {}
|
||||
# ---
|
||||
# Common configuration secret options
|
||||
configSecret: {}
|
||||
# ---
|
||||
# CAPI operator deployment options
|
||||
logLevel: 2
|
||||
replicaCount: 1
|
||||
leaderElection:
|
||||
enabled: true
|
||||
image:
|
||||
manager:
|
||||
repository: registry.k8s.io/capi-operator/cluster-api-operator
|
||||
tag: v0.18.1
|
||||
pullPolicy: IfNotPresent
|
||||
env:
|
||||
manager: []
|
||||
diagnosticsAddress: ":8443"
|
||||
healthAddr: ":9440"
|
||||
insecureDiagnostics: false
|
||||
watchConfigSecret: false
|
||||
imagePullSecrets: {}
|
||||
resources:
|
||||
manager:
|
||||
limits:
|
||||
cpu: 100m
|
||||
memory: 150Mi
|
||||
requests:
|
||||
cpu: 100m
|
||||
memory: 100Mi
|
||||
containerSecurityContext: {}
|
||||
affinity:
|
||||
nodeAffinity:
|
||||
requiredDuringSchedulingIgnoredDuringExecution:
|
||||
nodeSelectorTerms:
|
||||
- matchExpressions:
|
||||
- key: kubernetes.io/arch
|
||||
operator: In
|
||||
values:
|
||||
- amd64
|
||||
- arm64
|
||||
- ppc64le
|
||||
- key: kubernetes.io/os
|
||||
operator: In
|
||||
values:
|
||||
- linux
|
||||
tolerations:
|
||||
- effect: NoSchedule
|
||||
key: node-role.kubernetes.io/master
|
||||
- effect: NoSchedule
|
||||
key: node-role.kubernetes.io/control-plane
|
||||
volumes:
|
||||
- name: cert
|
||||
secret:
|
||||
defaultMode: 420
|
||||
secretName: capi-operator-webhook-service-cert
|
||||
volumeMounts:
|
||||
manager:
|
||||
- mountPath: /tmp/k8s-webhook-server/serving-certs
|
||||
name: cert
|
||||
readOnly: true
|
||||
enableHelmHook: true
|
@@ -8,11 +8,6 @@ questions:
|
||||
show_subquestion_if: true
|
||||
group: "Rancher Turtles Extra Settings"
|
||||
subquestions:
|
||||
- variable: cluster-api-operator.cert-manager.enabled
|
||||
default: false
|
||||
type: boolean
|
||||
description: "Flag to enable or disable installation of cert-manager. If set to false then you will need to install cert-manager manually."
|
||||
label: "Enable Cert Manager"
|
||||
- variable: turtlesUI.enabled
|
||||
default: false
|
||||
type: boolean
|
||||
@@ -35,6 +30,12 @@ questions:
|
||||
type: boolean
|
||||
label: Enable Agent TLS Mode
|
||||
group: "Rancher Turtles Features Settings"
|
||||
- variable: rancherTurtles.features.no-cert-manager.enabled
|
||||
default: false
|
||||
description: "[ALPHA] If enabled Turtles will remove cert-manager."
|
||||
type: boolean
|
||||
label: Remove cert-manager
|
||||
group: "Rancher Turtles Features Settings"
|
||||
- variable: rancherTurtles.kubectlImage
|
||||
default: "registry.suse.com/edge/3.3/kubectl:1.32.4"
|
||||
description: "Specify the image to use when running kubectl in jobs."
|
||||
|
@@ -7,10 +7,20 @@ metadata:
|
||||
"helm.sh/hook": "post-install, post-upgrade"
|
||||
"helm.sh/hook-weight": "2"
|
||||
spec:
|
||||
enableAutomaticUpdate: true
|
||||
type: addon
|
||||
additionalManifests:
|
||||
name: fleet-addon-config
|
||||
namespace: '{{ .Values.rancherTurtles.namespace }}'
|
||||
{{- if or (index .Values "cluster-api-operator" "cluster-api" "fleet" "addon" "fetchConfig" "url") (index .Values "cluster-api-operator" "cluster-api" "fleet" "addon" "fetchConfig" "selector") }}
|
||||
fetchConfig:
|
||||
{{- if index .Values "cluster-api-operator" "cluster-api" "fleet" "addon" "fetchConfig" "url" }}
|
||||
url: {{ index .Values "cluster-api-operator" "cluster-api" "fleet" "addon" "fetchConfig" "url" }}
|
||||
{{- end }}
|
||||
{{- if index .Values "cluster-api-operator" "cluster-api" "fleet" "addon" "fetchConfig" "selector" }}
|
||||
selector: {{ index .Values "cluster-api-operator" "cluster-api" "fleet" "addon" "fetchConfig" "selector" }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
@@ -58,3 +68,16 @@ data:
|
||||
matchExpressions:
|
||||
- key: cluster-api.cattle.io/disable-fleet-auto-import
|
||||
operator: DoesNotExist
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: cappf-controller-psa
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: fleet-controller-psa
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: caapf-controller-manager
|
||||
namespace: {{ .Values.rancherTurtles.namespace }}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user