Compare commits
15 Commits
main
...
chart-iron
Author | SHA256 | Date | |
---|---|---|---|
e30fc2dc3e
|
|||
05aa1341a9
|
|||
5b8cbc57e1
|
|||
16d2670d54
|
|||
58f9552a26
|
|||
7da89fbe2b
|
|||
909aa27611
|
|||
589be0a21f
|
|||
728354e926
|
|||
db28299e63
|
|||
37a92b02c4
|
|||
dc68a1d44b
|
|||
cc08766fdf
|
|||
df4fce4388
|
|||
6c6544a608
|
@@ -17,7 +17,7 @@ jobs:
|
|||||||
object-format: 'sha256'
|
object-format: 'sha256'
|
||||||
- name: Setup dependencies
|
- name: Setup dependencies
|
||||||
run: |
|
run: |
|
||||||
zypper in -y python3-ruamel.yaml
|
zypper in -y python3-PyYAML
|
||||||
- name: Check release manifest
|
- name: Check release manifest
|
||||||
run: |
|
run: |
|
||||||
python3 .obs/manifest-check.py --check
|
python3 .obs/manifest-check.py
|
24
.gitmodules
vendored
24
.gitmodules
vendored
@@ -13,27 +13,3 @@
|
|||||||
[submodule "autoconf"]
|
[submodule "autoconf"]
|
||||||
path = autoconf
|
path = autoconf
|
||||||
url = https://src.opensuse.org/SLFO-pool/autoconf.git
|
url = https://src.opensuse.org/SLFO-pool/autoconf.git
|
||||||
[submodule "python-pydantic"]
|
|
||||||
path = python-pydantic
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-pydantic
|
|
||||||
[submodule "python-pydantic-core"]
|
|
||||||
path = python-pydantic-core
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-pydantic-core
|
|
||||||
[submodule "python-inline-snapshot"]
|
|
||||||
path = python-inline-snapshot
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-inline-snapshot
|
|
||||||
[submodule "python-executing"]
|
|
||||||
path = python-executing
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-executing
|
|
||||||
[submodule "python-typing-inspection"]
|
|
||||||
path = python-typing-inspection
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-typing-inspection
|
|
||||||
[submodule "python-annotated-types"]
|
|
||||||
path = python-annotated-types
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-annotated-types
|
|
||||||
[submodule "python-typing_extensions"]
|
|
||||||
path = python-typing_extensions
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-typing_extensions
|
|
||||||
[submodule "python-flit-core"]
|
|
||||||
path = python-flit-core
|
|
||||||
url = https://src.opensuse.org/SLFO-pool/python-flit-core
|
|
||||||
|
51
.obs/manifest-check.py
Executable file → Normal file
51
.obs/manifest-check.py
Executable file → Normal file
@@ -1,15 +1,11 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
|
|
||||||
import ruamel.yaml
|
import yaml
|
||||||
import pathlib
|
|
||||||
import argparse
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
yaml = ruamel.yaml.YAML()
|
|
||||||
|
|
||||||
def get_chart_version(chart_name: str) -> str:
|
def get_chart_version(chart_name: str) -> str:
|
||||||
with open(f"./{chart_name}-chart/Chart.yaml") as f:
|
with open(f"./{chart_name}-chart/Chart.yaml") as f:
|
||||||
chart = yaml.load(f)
|
chart = yaml.safe_load(f)
|
||||||
return chart["version"]
|
return chart["version"]
|
||||||
|
|
||||||
def get_charts(chart):
|
def get_charts(chart):
|
||||||
@@ -25,57 +21,22 @@ def get_charts(chart):
|
|||||||
|
|
||||||
def get_charts_list():
|
def get_charts_list():
|
||||||
with open("./release-manifest-image/release_manifest.yaml") as f:
|
with open("./release-manifest-image/release_manifest.yaml") as f:
|
||||||
manifest = yaml.load(f)
|
manifest = yaml.safe_load(f)
|
||||||
charts = {}
|
charts = {}
|
||||||
for chart in manifest["spec"]["components"]["workloads"]["helm"]:
|
for chart in manifest["spec"]["components"]["workloads"]["helm"]:
|
||||||
charts.update(get_charts(chart))
|
charts.update(get_charts(chart))
|
||||||
return charts
|
return charts
|
||||||
|
|
||||||
def check_charts(fix: bool) -> bool:
|
def main():
|
||||||
|
print("Checking charts versions in release manifest")
|
||||||
success = True
|
success = True
|
||||||
charts = get_charts_list()
|
charts = get_charts_list()
|
||||||
to_fix = {}
|
|
||||||
for chart in charts:
|
for chart in charts:
|
||||||
expected_version = get_chart_version(chart)
|
expected_version = get_chart_version(chart)
|
||||||
if expected_version != charts[chart]:
|
if expected_version != charts[chart]:
|
||||||
success = False
|
success = False
|
||||||
to_fix[f'%%CHART_REPO%%/%%CHART_PREFIX%%{chart}'] = expected_version
|
|
||||||
print(f"{chart}: Expected: {expected_version}, Got: {charts[chart]}")
|
print(f"{chart}: Expected: {expected_version}, Got: {charts[chart]}")
|
||||||
if fix and not success:
|
if not success:
|
||||||
fix_charts(to_fix)
|
|
||||||
return True
|
|
||||||
return success
|
|
||||||
|
|
||||||
def fix_charts(to_fix):
|
|
||||||
manifest_path = pathlib.Path("./release-manifest-image/release_manifest.yaml")
|
|
||||||
manifest = yaml.load(manifest_path)
|
|
||||||
yaml.indent(mapping=2, sequence=4, offset=2)
|
|
||||||
yaml.width = 4096
|
|
||||||
for chart_index, chart in enumerate(manifest["spec"]["components"]["workloads"]["helm"]):
|
|
||||||
changed = False
|
|
||||||
if chart["chart"] in to_fix.keys():
|
|
||||||
changed = True
|
|
||||||
chart["version"] = to_fix[chart["chart"]]
|
|
||||||
for subchart_index, subchart in enumerate(chart.get("addonCharts", [])):
|
|
||||||
if subchart["chart"] in to_fix.keys():
|
|
||||||
changed = True
|
|
||||||
subchart["version"] = to_fix[subchart["chart"]]
|
|
||||||
chart["addonCharts"][subchart_index] = subchart
|
|
||||||
for subchart_index, subchart in enumerate(chart.get("dependencyCharts", [])):
|
|
||||||
if subchart["chart"] in to_fix.keys():
|
|
||||||
changed = True
|
|
||||||
subchart["version"] = to_fix[subchart["chart"]]
|
|
||||||
chart["dependencyCharts"][subchart_index] = subchart
|
|
||||||
if changed:
|
|
||||||
manifest["spec"]["components"]["workloads"]["helm"][chart_index] = chart
|
|
||||||
yaml.dump(manifest, manifest_path)
|
|
||||||
|
|
||||||
def main():
|
|
||||||
print("Checking charts versions in release manifest")
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument('-c', '--check', action='store_true')
|
|
||||||
args = parser.parse_args()
|
|
||||||
if not check_charts(not args.check):
|
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
print("All local charts in release manifest are using the right version")
|
print("All local charts in release manifest are using the right version")
|
||||||
|
@@ -1,10 +0,0 @@
|
|||||||
repos:
|
|
||||||
- repo: local
|
|
||||||
hooks:
|
|
||||||
- id: check-manifest
|
|
||||||
name: "Check release-manifest"
|
|
||||||
entry: python3 .obs/manifest-check.py
|
|
||||||
language: python
|
|
||||||
additional_dependencies: ['ruamel.yaml']
|
|
||||||
pass_filenames: false
|
|
||||||
always_run: true
|
|
12
_config
12
_config
@@ -1,5 +1,4 @@
|
|||||||
Prefer: -libqpid-proton10 -python311-urllib3_1
|
Prefer: -libqpid-proton10 -python311-urllib3_1
|
||||||
Prefer: -cargo1.58 -cargo1.57 cargo1.89
|
|
||||||
|
|
||||||
Macros:
|
Macros:
|
||||||
%__python3 /usr/bin/python3.11
|
%__python3 /usr/bin/python3.11
|
||||||
@@ -50,15 +49,6 @@ Macros:
|
|||||||
BuildFlags: excludebuild:autoconf:el
|
BuildFlags: excludebuild:autoconf:el
|
||||||
BuildFlags: excludebuild:autoconf:testsuite
|
BuildFlags: excludebuild:autoconf:testsuite
|
||||||
|
|
||||||
# Missing deps for python packages related to suse-edge-components-versions
|
|
||||||
BuildFlags: excludebuild:python-pydantic:test
|
|
||||||
BuildFlags: excludebuild:python-pydantic-core:test
|
|
||||||
BuildFlags: excludebuild:python-inline-snapshot:test
|
|
||||||
BuildFlags: excludebuild:python-executing:test
|
|
||||||
BuildFlags: excludebuild:python-annotated-types:test
|
|
||||||
BuildFlags: excludebuild:python-typing-inspection:test
|
|
||||||
BuildFlags: excludebuild:python-typing_extensions:test
|
|
||||||
|
|
||||||
# Only build manifest embedding images here
|
# Only build manifest embedding images here
|
||||||
%if "%_repository" == "test_manifest_images"
|
%if "%_repository" == "test_manifest_images"
|
||||||
BuildFlags: onlybuild:edge-image-builder-image
|
BuildFlags: onlybuild:edge-image-builder-image
|
||||||
@@ -115,7 +105,7 @@ BuildFlags: onlybuild:release-manifest-image
|
|||||||
Patterntype: none
|
Patterntype: none
|
||||||
BuildEngine: podman
|
BuildEngine: podman
|
||||||
Prefer: sles-release
|
Prefer: sles-release
|
||||||
BuildFlags: dockerarg:SLE_VERSION=15.7
|
BuildFlags: dockerarg:SLE_VERSION=15.6
|
||||||
|
|
||||||
# Publish multi-arch container images only once all archs have been built
|
# Publish multi-arch container images only once all archs have been built
|
||||||
PublishFlags: archsync
|
PublishFlags: archsync
|
||||||
|
6
_meta
6
_meta
@@ -45,7 +45,7 @@
|
|||||||
<path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
|
<path project="SUSE:SLFO:Products:SLES:16.0" repository="standard"/>
|
||||||
<path project="SUSE:SLFO:Main:Build" repository="standard"/>
|
<path project="SUSE:SLFO:Main:Build" repository="standard"/>
|
||||||
{%- else %}
|
{%- else %}
|
||||||
<path project="SUSE:CA" repository="SLE_15_SP7"/>
|
<path project="SUSE:CA" repository="SLE_15_SP6"/>
|
||||||
<path project="{{ project }}" repository="standard"/>
|
<path project="{{ project }}" repository="standard"/>
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
<arch>x86_64</arch>
|
<arch>x86_64</arch>
|
||||||
@@ -56,8 +56,8 @@
|
|||||||
{%- if release_project is defined and not for_release %}
|
{%- if release_project is defined and not for_release %}
|
||||||
<releasetarget project="{{ release_project }}" repository="standard" trigger="manual"/>
|
<releasetarget project="{{ release_project }}" repository="standard" trigger="manual"/>
|
||||||
{%- endif %}
|
{%- endif %}
|
||||||
<path project="{{ ironic_base }}:2025.1" repository="15.7"/>
|
<path project="{{ ironic_base }}:2024.2" repository="15.6"/>
|
||||||
<path project="SUSE:SLE-15-SP7:Update" repository="standard"/>
|
<path project="SUSE:SLE-15-SP6:Update" repository="standard"/>
|
||||||
<arch>x86_64</arch>
|
<arch>x86_64</arch>
|
||||||
<arch>aarch64</arch>
|
<arch>aarch64</arch>
|
||||||
</repository>
|
</repository>
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1
|
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1
|
||||||
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.1-%RELEASE%
|
#!BuildTag: %%CHART_PREFIX%%akri-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.1-%RELEASE%
|
||||||
annotations:
|
annotations:
|
||||||
catalog.cattle.io/certified: rancher
|
catalog.cattle.io/certified: rancher
|
||||||
catalog.cattle.io/namespace: cattle-ui-plugin-system
|
catalog.cattle.io/namespace: cattle-ui-plugin-system
|
||||||
@@ -12,10 +12,10 @@ annotations:
|
|||||||
catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
|
catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
|
||||||
catalog.cattle.io/kube-version: '>= v1.26.0-0'
|
catalog.cattle.io/kube-version: '>= v1.26.0-0'
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 304.0.3+up1.3.1
|
appVersion: 303.0.2+up1.3.1
|
||||||
description: 'SUSE Edge: Akri extension for Rancher Dashboard'
|
description: 'SUSE Edge: Akri extension for Rancher Dashboard'
|
||||||
name: akri-dashboard-extension
|
name: akri-dashboard-extension
|
||||||
type: application
|
type: application
|
||||||
version: "%%CHART_MAJOR%%.0.3+up1.3.1"
|
version: "%%CHART_MAJOR%%.0.2+up1.3.1"
|
||||||
icon: >-
|
icon: >-
|
||||||
https://raw.githubusercontent.com/cncf/artwork/main/projects/akri/icon/color/akri-icon-color.svg
|
https://raw.githubusercontent.com/cncf/artwork/main/projects/akri/icon/color/akri-icon-color.svg
|
||||||
|
@@ -8,7 +8,7 @@ spec:
|
|||||||
plugin:
|
plugin:
|
||||||
name: {{ include "extension-server.fullname" . }}
|
name: {{ include "extension-server.fullname" . }}
|
||||||
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
|
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
|
||||||
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/304.0.3+up1.3.1
|
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/akri-dashboard-extension/303.0.2+up1.3.1
|
||||||
noCache: {{ .Values.plugin.noCache }}
|
noCache: {{ .Values.plugin.noCache }}
|
||||||
noAuth: {{ .Values.plugin.noAuth }}
|
noAuth: {{ .Values.plugin.noAuth }}
|
||||||
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
|
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1
|
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1
|
||||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
|
@@ -1,163 +0,0 @@
|
|||||||
From f8c1ba1696fd8555e8e94246ec5afa38536fa8bd Mon Sep 17 00:00:00 2001
|
|
||||||
From: erjavaskivuori <erja.vaskivuori@est.tech>
|
|
||||||
Date: Thu, 5 Jun 2025 09:49:47 +0000
|
|
||||||
Subject: [PATCH 1/5] Enable exhaustive linter
|
|
||||||
|
|
||||||
Enable exhaustive linter to check exhaustiveness of switch statements of enum-like
|
|
||||||
constants.
|
|
||||||
|
|
||||||
Signed-off-by: erjavaskivuori <erja.vaskivuori@est.tech>
|
|
||||||
(cherry picked from commit a5a81b8717c9e6642ae626ea97933e3615fe11c0)
|
|
||||||
---
|
|
||||||
.golangci.yaml | 4 ++-
|
|
||||||
.../metal3.io/v1alpha1/baremetalhost_types.go | 1 +
|
|
||||||
.../metal3.io/baremetalhost_controller.go | 2 ++
|
|
||||||
.../metal3.io/host_state_machine.go | 4 +++
|
|
||||||
pkg/provisioner/ironic/ironic.go | 26 +++++++++----------
|
|
||||||
5 files changed, 22 insertions(+), 15 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/.golangci.yaml b/.golangci.yaml
|
|
||||||
index 58e54b31..c758b93c 100644
|
|
||||||
--- a/.golangci.yaml
|
|
||||||
+++ b/.golangci.yaml
|
|
||||||
@@ -21,7 +21,7 @@ linters:
|
|
||||||
- errchkjson
|
|
||||||
#- errname
|
|
||||||
#- errorlint
|
|
||||||
- #- exhaustive
|
|
||||||
+ - exhaustive
|
|
||||||
- exptostd
|
|
||||||
- fatcontext
|
|
||||||
#- forbidigo
|
|
||||||
@@ -78,6 +78,8 @@ linters:
|
|
||||||
# Run with --fast=false for more extensive checks
|
|
||||||
fast: true
|
|
||||||
linters-settings:
|
|
||||||
+ exhaustive:
|
|
||||||
+ default-signifies-exhaustive: true
|
|
||||||
gosec:
|
|
||||||
severity: medium
|
|
||||||
confidence: medium
|
|
||||||
diff --git a/apis/metal3.io/v1alpha1/baremetalhost_types.go b/apis/metal3.io/v1alpha1/baremetalhost_types.go
|
|
||||||
index ba1b4333..426a7a89 100644
|
|
||||||
--- a/apis/metal3.io/v1alpha1/baremetalhost_types.go
|
|
||||||
+++ b/apis/metal3.io/v1alpha1/baremetalhost_types.go
|
|
||||||
@@ -1113,6 +1113,7 @@ func (host *BareMetalHost) OperationMetricForState(operation ProvisioningState)
|
|
||||||
metric = &history.Provision
|
|
||||||
case StateDeprovisioning:
|
|
||||||
metric = &history.Deprovision
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
diff --git a/internal/controller/metal3.io/baremetalhost_controller.go b/internal/controller/metal3.io/baremetalhost_controller.go
|
|
||||||
index 33310bf7..1998627e 100644
|
|
||||||
--- a/internal/controller/metal3.io/baremetalhost_controller.go
|
|
||||||
+++ b/internal/controller/metal3.io/baremetalhost_controller.go
|
|
||||||
@@ -586,6 +586,7 @@ func getCurrentImage(host *metal3api.BareMetalHost) *metal3api.Image {
|
|
||||||
if host.Spec.Image != nil && host.Spec.Image.URL != "" {
|
|
||||||
return host.Spec.Image.DeepCopy()
|
|
||||||
}
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
@@ -816,6 +817,7 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf
|
|
||||||
if info.host.Spec.AutomatedCleaningMode == metal3api.CleaningModeDisabled {
|
|
||||||
preprovImgFormats = nil
|
|
||||||
}
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
|
|
||||||
preprovImg, err := r.getPreprovImage(info, preprovImgFormats)
|
|
||||||
diff --git a/internal/controller/metal3.io/host_state_machine.go b/internal/controller/metal3.io/host_state_machine.go
|
|
||||||
index 8b382553..6d88591b 100644
|
|
||||||
--- a/internal/controller/metal3.io/host_state_machine.go
|
|
||||||
+++ b/internal/controller/metal3.io/host_state_machine.go
|
|
||||||
@@ -107,6 +107,7 @@ func (hsm *hostStateMachine) updateHostStateFrom(initialState metal3api.Provisio
|
|
||||||
if actionRes := hsm.ensureCapacity(info, hsm.NextState); actionRes != nil {
|
|
||||||
return actionRes
|
|
||||||
}
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
|
|
||||||
info.log.Info("changing provisioning state",
|
|
||||||
@@ -137,6 +138,7 @@ func (hsm *hostStateMachine) updateHostStateFrom(initialState metal3api.Provisio
|
|
||||||
info.log.Info("saving boot mode",
|
|
||||||
"new mode", hsm.Host.Status.Provisioning.BootMode)
|
|
||||||
}
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -163,6 +165,7 @@ func (hsm *hostStateMachine) checkDelayedHost(info *reconcileInfo) actionResult
|
|
||||||
if actionRes := hsm.ensureCapacity(info, info.host.Status.Provisioning.State); actionRes != nil {
|
|
||||||
return actionRes
|
|
||||||
}
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
@@ -299,6 +302,7 @@ func (hsm *hostStateMachine) checkDetachedHost(info *reconcileInfo) (result acti
|
|
||||||
switch info.host.Status.Provisioning.State {
|
|
||||||
case metal3api.StateProvisioned, metal3api.StateExternallyProvisioned, metal3api.StateReady, metal3api.StateAvailable:
|
|
||||||
return hsm.Reconciler.detachHost(hsm.Provisioner, info)
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if info.host.Status.ErrorType == metal3api.DetachError {
|
|
||||||
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
|
|
||||||
index 9a4b4589..4c4923ad 100644
|
|
||||||
--- a/pkg/provisioner/ironic/ironic.go
|
|
||||||
+++ b/pkg/provisioner/ironic/ironic.go
|
|
||||||
@@ -335,21 +335,17 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat
|
|
||||||
return result, err
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if data.State == metal3api.StateProvisioning && data.CurrentImage.IsLiveISO() {
|
|
||||||
+ // Live ISO doesn't need pre-provisioning image
|
|
||||||
+ return result, nil
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if data.State == metal3api.StateDeprovisioning && data.AutomatedCleaningMode == metal3api.CleaningModeDisabled {
|
|
||||||
+ // No need for pre-provisioning image if cleaning disabled
|
|
||||||
+ return result, nil
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
switch data.State {
|
|
||||||
- case metal3api.StateProvisioning,
|
|
||||||
- metal3api.StateDeprovisioning:
|
|
||||||
- if data.State == metal3api.StateProvisioning {
|
|
||||||
- if data.CurrentImage.IsLiveISO() {
|
|
||||||
- // Live ISO doesn't need pre-provisioning image
|
|
||||||
- return result, nil
|
|
||||||
- }
|
|
||||||
- } else {
|
|
||||||
- if data.AutomatedCleaningMode == metal3api.CleaningModeDisabled {
|
|
||||||
- // No need for pre-provisioning image if cleaning disabled
|
|
||||||
- return result, nil
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
- fallthrough
|
|
||||||
case metal3api.StateInspecting,
|
|
||||||
metal3api.StatePreparing:
|
|
||||||
if deployImageInfo == nil {
|
|
||||||
@@ -360,6 +356,7 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat
|
|
||||||
}
|
|
||||||
return result, err
|
|
||||||
}
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
|
|
||||||
return result, nil
|
|
||||||
@@ -1724,6 +1721,7 @@ func (p *ironicProvisioner) loadBusyHosts() (hosts map[string]struct{}, err erro
|
|
||||||
if !strings.Contains(node.BootInterface, "virtual-media") {
|
|
||||||
hosts[node.Name] = struct{}{}
|
|
||||||
}
|
|
||||||
+ default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.50.1
|
|
||||||
|
|
@@ -1,91 +0,0 @@
|
|||||||
From 509ba92a8ed7303a418c5277f7544db2765c3802 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
Date: Wed, 2 Jul 2025 17:33:46 +0200
|
|
||||||
Subject: [PATCH 2/5] Stop requiring DEPLOY_KERNEL/RAMDISK
|
|
||||||
|
|
||||||
Ironic has global configuration that allows specifying them, even
|
|
||||||
depending on the architecture. Our ironic-image supports that when
|
|
||||||
IPA downloader is used (and should start supporting explicit variables
|
|
||||||
too).
|
|
||||||
|
|
||||||
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
(cherry picked from commit 0f1ef6cbeb8815f19d853ba5eab1e70c7d85e2ec)
|
|
||||||
---
|
|
||||||
pkg/provisioner/ironic/factory.go | 6 ++----
|
|
||||||
pkg/provisioner/ironic/factory_test.go | 9 ++-------
|
|
||||||
pkg/provisioner/ironic/ironic.go | 10 +++-------
|
|
||||||
3 files changed, 7 insertions(+), 18 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/pkg/provisioner/ironic/factory.go b/pkg/provisioner/ironic/factory.go
|
|
||||||
index 19571eb0..15f636b3 100644
|
|
||||||
--- a/pkg/provisioner/ironic/factory.go
|
|
||||||
+++ b/pkg/provisioner/ironic/factory.go
|
|
||||||
@@ -114,10 +114,8 @@ func loadConfigFromEnv(havePreprovImgBuilder bool) (ironicConfig, error) {
|
|
||||||
c.deployRamdiskURL = os.Getenv("DEPLOY_RAMDISK_URL")
|
|
||||||
c.deployISOURL = os.Getenv("DEPLOY_ISO_URL")
|
|
||||||
if !havePreprovImgBuilder {
|
|
||||||
- if c.deployISOURL == "" &&
|
|
||||||
- (c.deployKernelURL == "" || c.deployRamdiskURL == "") {
|
|
||||||
- return c, errors.New("either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set")
|
|
||||||
- }
|
|
||||||
+ // NOTE(dtantsur): with a PreprovisioningImage controller, it makes sense to set only the kernel.
|
|
||||||
+ // Without it, either both or neither must be set.
|
|
||||||
if (c.deployKernelURL == "" && c.deployRamdiskURL != "") ||
|
|
||||||
(c.deployKernelURL != "" && c.deployRamdiskURL == "") {
|
|
||||||
return c, errors.New("DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together")
|
|
||||||
diff --git a/pkg/provisioner/ironic/factory_test.go b/pkg/provisioner/ironic/factory_test.go
|
|
||||||
index db47d8b2..0d32eccb 100644
|
|
||||||
--- a/pkg/provisioner/ironic/factory_test.go
|
|
||||||
+++ b/pkg/provisioner/ironic/factory_test.go
|
|
||||||
@@ -98,24 +98,19 @@ func TestLoadConfigFromEnv(t *testing.T) {
|
|
||||||
ramdiskURL: "http://ramdisk",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
- {
|
|
||||||
- name: "no deploy info",
|
|
||||||
- env: EnvFixture{},
|
|
||||||
- expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set",
|
|
||||||
- },
|
|
||||||
{
|
|
||||||
name: "only kernel",
|
|
||||||
env: EnvFixture{
|
|
||||||
kernelURL: "http://kernel",
|
|
||||||
},
|
|
||||||
- expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set",
|
|
||||||
+ expectedError: "DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "only ramdisk",
|
|
||||||
env: EnvFixture{
|
|
||||||
ramdiskURL: "http://ramdisk",
|
|
||||||
},
|
|
||||||
- expectedError: "either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set",
|
|
||||||
+ expectedError: "DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together",
|
|
||||||
expectedImgBuildError: "DEPLOY_RAMDISK_URL requires DEPLOY_KERNEL_URL to be set also",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
|
|
||||||
index 4c4923ad..48db865a 100644
|
|
||||||
--- a/pkg/provisioner/ironic/ironic.go
|
|
||||||
+++ b/pkg/provisioner/ironic/ironic.go
|
|
||||||
@@ -348,14 +348,10 @@ func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessDat
|
|
||||||
switch data.State {
|
|
||||||
case metal3api.StateInspecting,
|
|
||||||
metal3api.StatePreparing:
|
|
||||||
- if deployImageInfo == nil {
|
|
||||||
- if p.config.havePreprovImgBuilder {
|
|
||||||
- result, err = transientError(provisioner.ErrNeedsPreprovisioningImage)
|
|
||||||
- } else {
|
|
||||||
- result, err = operationFailed("no preprovisioning image available")
|
|
||||||
- }
|
|
||||||
- return result, err
|
|
||||||
+ if deployImageInfo == nil && p.config.havePreprovImgBuilder {
|
|
||||||
+ result, err = transientError(provisioner.ErrNeedsPreprovisioningImage)
|
|
||||||
}
|
|
||||||
+ return result, err
|
|
||||||
default:
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.50.1
|
|
||||||
|
|
@@ -1,49 +0,0 @@
|
|||||||
From ea10df866f0fc491cac15ba5005f3b820e1ccecb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
Date: Wed, 2 Jul 2025 17:55:48 +0200
|
|
||||||
Subject: [PATCH 3/5] Remove DEPLOY_KERNEL_URL from deployment scripts for main
|
|
||||||
|
|
||||||
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
(cherry picked from commit ddcf3d915819b6344f79fbcec3e28250b217a597)
|
|
||||||
---
|
|
||||||
config/default/ironic.env | 2 --
|
|
||||||
config/overlays/e2e/ironic.env | 2 --
|
|
||||||
config/render/capm3.yaml | 2 --
|
|
||||||
3 files changed, 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/config/default/ironic.env b/config/default/ironic.env
|
|
||||||
index e72cb3c3..3fe36d25 100644
|
|
||||||
--- a/config/default/ironic.env
|
|
||||||
+++ b/config/default/ironic.env
|
|
||||||
@@ -1,7 +1,5 @@
|
|
||||||
HTTP_PORT=6180
|
|
||||||
PROVISIONING_INTERFACE=eth2
|
|
||||||
DHCP_RANGE=172.22.0.10,172.22.0.100
|
|
||||||
-DEPLOY_KERNEL_URL=http://172.22.0.2:6180/images/ironic-python-agent.kernel
|
|
||||||
-DEPLOY_RAMDISK_URL=http://172.22.0.2:6180/images/ironic-python-agent.initramfs
|
|
||||||
IRONIC_ENDPOINT=http://172.22.0.2:6385/v1/
|
|
||||||
CACHEURL=http://172.22.0.1/images
|
|
||||||
diff --git a/config/overlays/e2e/ironic.env b/config/overlays/e2e/ironic.env
|
|
||||||
index 44147ae0..6f200720 100644
|
|
||||||
--- a/config/overlays/e2e/ironic.env
|
|
||||||
+++ b/config/overlays/e2e/ironic.env
|
|
||||||
@@ -1,3 +1 @@
|
|
||||||
-DEPLOY_KERNEL_URL=http://192.168.222.1:6180/images/ironic-python-agent.kernel
|
|
||||||
-DEPLOY_RAMDISK_URL=http://192.168.222.1:6180/images/ironic-python-agent.initramfs
|
|
||||||
IRONIC_ENDPOINT=https://192.168.222.1:6385/v1/
|
|
||||||
diff --git a/config/render/capm3.yaml b/config/render/capm3.yaml
|
|
||||||
index 42283193..7568288f 100644
|
|
||||||
--- a/config/render/capm3.yaml
|
|
||||||
+++ b/config/render/capm3.yaml
|
|
||||||
@@ -2510,8 +2510,6 @@ subjects:
|
|
||||||
apiVersion: v1
|
|
||||||
data:
|
|
||||||
CACHEURL: http://172.22.0.1/images
|
|
||||||
- DEPLOY_KERNEL_URL: http://172.22.0.2:6180/images/ironic-python-agent.kernel
|
|
||||||
- DEPLOY_RAMDISK_URL: http://172.22.0.2:6180/images/ironic-python-agent.initramfs
|
|
||||||
DHCP_RANGE: 172.22.0.10,172.22.0.100
|
|
||||||
HTTP_PORT: "6180"
|
|
||||||
IRONIC_ENDPOINT: http://172.22.0.2:6385/v1/
|
|
||||||
--
|
|
||||||
2.50.1
|
|
||||||
|
|
@@ -1,422 +0,0 @@
|
|||||||
From b2e8a1a42c95a3338c9c83a4781ba4744da5ff6a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
Date: Tue, 24 Jun 2025 18:53:42 +0200
|
|
||||||
Subject: [PATCH 4/5] Refactor setting various Ironic properties
|
|
||||||
|
|
||||||
Currently, Ironic instance_info and properties fields are populated at
|
|
||||||
random either in most states or before deployment. While potentially
|
|
||||||
convenient, it makes it very hard to reason about the code.
|
|
||||||
|
|
||||||
Now, the logic is split into two parts:
|
|
||||||
1. configureNode (renamed from configureImages) writes fields that are
|
|
||||||
considered properties of the node itself: CPU architecture, deploy
|
|
||||||
images, capabilities, etc.
|
|
||||||
2. getInstanceUpdateOpts (merge of getImageUpdateOptsForNode and
|
|
||||||
getUpdateOptsForNode) writes fields that are required for deployment
|
|
||||||
and thus are properties of instance. This includes images, checksums,
|
|
||||||
runtime capabilities. As an exception, root device hints fall under
|
|
||||||
this category and thus are now set in instance_info, not properties.
|
|
||||||
|
|
||||||
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
(cherry picked from commit 0c70cba38c926c474f4fa129a7e99ef9827d6ce9)
|
|
||||||
---
|
|
||||||
.../metal3.io/baremetalhost_controller.go | 2 +-
|
|
||||||
pkg/provisioner/ironic/ironic.go | 49 +++++-------
|
|
||||||
pkg/provisioner/ironic/provision_test.go | 27 +++----
|
|
||||||
pkg/provisioner/ironic/register.go | 3 +-
|
|
||||||
pkg/provisioner/ironic/register_test.go | 78 +------------------
|
|
||||||
pkg/provisioner/provisioner.go | 2 +-
|
|
||||||
6 files changed, 40 insertions(+), 121 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/internal/controller/metal3.io/baremetalhost_controller.go b/internal/controller/metal3.io/baremetalhost_controller.go
|
|
||||||
index 1998627e..0d0c9562 100644
|
|
||||||
--- a/internal/controller/metal3.io/baremetalhost_controller.go
|
|
||||||
+++ b/internal/controller/metal3.io/baremetalhost_controller.go
|
|
||||||
@@ -848,6 +848,7 @@ func (r *BareMetalHostReconciler) registerHost(prov provisioner.Provisioner, inf
|
|
||||||
PreprovisioningNetworkData: preprovisioningNetworkData,
|
|
||||||
HasCustomDeploy: hasCustomDeploy(info.host),
|
|
||||||
DisablePowerOff: info.host.Spec.DisablePowerOff,
|
|
||||||
+ CPUArchitecture: getHostArchitecture(info.host),
|
|
||||||
},
|
|
||||||
credsChanged,
|
|
||||||
info.host.Status.ErrorType == metal3api.RegistrationError)
|
|
||||||
@@ -1271,7 +1272,6 @@ func (r *BareMetalHostReconciler) actionProvisioning(prov provisioner.Provisione
|
|
||||||
BootMode: info.host.Status.Provisioning.BootMode,
|
|
||||||
HardwareProfile: hwProf,
|
|
||||||
RootDeviceHints: info.host.Status.Provisioning.RootDeviceHints.DeepCopy(),
|
|
||||||
- CPUArchitecture: getHostArchitecture(info.host),
|
|
||||||
}, forceReboot)
|
|
||||||
if err != nil {
|
|
||||||
return actionError{errors.Wrap(err, "failed to provision")}
|
|
||||||
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
|
|
||||||
index 48db865a..b8e6d72b 100644
|
|
||||||
--- a/pkg/provisioner/ironic/ironic.go
|
|
||||||
+++ b/pkg/provisioner/ironic/ironic.go
|
|
||||||
@@ -311,20 +311,24 @@ func (p *ironicProvisioner) createPXEEnabledNodePort(uuid, macAddress string) er
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
-func (p *ironicProvisioner) configureImages(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) {
|
|
||||||
+func (p *ironicProvisioner) configureNode(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) {
|
|
||||||
updater := clients.UpdateOptsBuilder(p.log)
|
|
||||||
|
|
||||||
deployImageInfo := setDeployImage(p.config, bmcAccess, data.PreprovisioningImage)
|
|
||||||
updater.SetDriverInfoOpts(deployImageInfo, ironicNode)
|
|
||||||
|
|
||||||
- // NOTE(dtantsur): It is risky to update image information for active nodes since it may affect the ability to clean up.
|
|
||||||
- if (data.CurrentImage != nil || data.HasCustomDeploy) && ironicNode.ProvisionState != string(nodes.Active) {
|
|
||||||
- p.getImageUpdateOptsForNode(ironicNode, data.CurrentImage, data.BootMode, data.HasCustomDeploy, updater)
|
|
||||||
- }
|
|
||||||
updater.SetTopLevelOpt("automated_clean",
|
|
||||||
data.AutomatedCleaningMode != metal3api.CleaningModeDisabled,
|
|
||||||
ironicNode.AutomatedClean)
|
|
||||||
|
|
||||||
+ opts := clients.UpdateOptsData{
|
|
||||||
+ "capabilities": buildCapabilitiesValue(ironicNode, data.BootMode),
|
|
||||||
+ }
|
|
||||||
+ if data.CPUArchitecture != "" {
|
|
||||||
+ opts["cpu_arch"] = data.CPUArchitecture
|
|
||||||
+ }
|
|
||||||
+ updater.SetPropertiesOpts(opts, ironicNode)
|
|
||||||
+
|
|
||||||
_, success, result, err := p.tryUpdateNode(ironicNode, updater)
|
|
||||||
if !success {
|
|
||||||
return result, err
|
|
||||||
@@ -656,40 +660,29 @@ func (p *ironicProvisioner) setCustomDeployUpdateOptsForNode(ironicNode *nodes.N
|
|
||||||
SetTopLevelOpt("deploy_interface", "custom-agent", ironicNode.DeployInterface)
|
|
||||||
}
|
|
||||||
|
|
||||||
-func (p *ironicProvisioner) getImageUpdateOptsForNode(ironicNode *nodes.Node, imageData *metal3api.Image, bootMode metal3api.BootMode, hasCustomDeploy bool, updater *clients.NodeUpdater) {
|
|
||||||
+func (p *ironicProvisioner) getInstanceUpdateOpts(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater {
|
|
||||||
+ updater := clients.UpdateOptsBuilder(p.log)
|
|
||||||
+
|
|
||||||
+ hasCustomDeploy := data.CustomDeploy != nil && data.CustomDeploy.Method != ""
|
|
||||||
+
|
|
||||||
// instance_uuid
|
|
||||||
updater.SetTopLevelOpt("instance_uuid", string(p.objectMeta.UID), ironicNode.InstanceUUID)
|
|
||||||
|
|
||||||
updater.SetInstanceInfoOpts(clients.UpdateOptsData{
|
|
||||||
- "capabilities": buildInstanceInfoCapabilities(bootMode),
|
|
||||||
+ "capabilities": buildInstanceInfoCapabilities(data.BootMode),
|
|
||||||
+ "root_device": devicehints.MakeHintMap(data.RootDeviceHints),
|
|
||||||
}, ironicNode)
|
|
||||||
|
|
||||||
if hasCustomDeploy {
|
|
||||||
// Custom deploy process
|
|
||||||
- p.setCustomDeployUpdateOptsForNode(ironicNode, imageData, updater)
|
|
||||||
- } else if imageData.IsLiveISO() {
|
|
||||||
+ p.setCustomDeployUpdateOptsForNode(ironicNode, &data.Image, updater)
|
|
||||||
+ } else if data.Image.IsLiveISO() {
|
|
||||||
// Set live-iso format options
|
|
||||||
- p.setLiveIsoUpdateOptsForNode(ironicNode, imageData, updater)
|
|
||||||
+ p.setLiveIsoUpdateOptsForNode(ironicNode, &data.Image, updater)
|
|
||||||
} else {
|
|
||||||
// Set deploy_interface direct options when not booting a live-iso
|
|
||||||
- p.setDirectDeployUpdateOptsForNode(ironicNode, imageData, updater)
|
|
||||||
+ p.setDirectDeployUpdateOptsForNode(ironicNode, &data.Image, updater)
|
|
||||||
}
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func (p *ironicProvisioner) getUpdateOptsForNode(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater {
|
|
||||||
- updater := clients.UpdateOptsBuilder(p.log)
|
|
||||||
-
|
|
||||||
- hasCustomDeploy := data.CustomDeploy != nil && data.CustomDeploy.Method != ""
|
|
||||||
- p.getImageUpdateOptsForNode(ironicNode, &data.Image, data.BootMode, hasCustomDeploy, updater)
|
|
||||||
-
|
|
||||||
- opts := clients.UpdateOptsData{
|
|
||||||
- "root_device": devicehints.MakeHintMap(data.RootDeviceHints),
|
|
||||||
- "capabilities": buildCapabilitiesValue(ironicNode, data.BootMode),
|
|
||||||
- }
|
|
||||||
- if data.CPUArchitecture != "" {
|
|
||||||
- opts["cpu_arch"] = data.CPUArchitecture
|
|
||||||
- }
|
|
||||||
- updater.SetPropertiesOpts(opts, ironicNode)
|
|
||||||
|
|
||||||
return updater
|
|
||||||
}
|
|
||||||
@@ -792,7 +785,7 @@ func (p *ironicProvisioner) setUpForProvisioning(ironicNode *nodes.Node, data pr
|
|
||||||
p.log.Info("starting provisioning", "node properties", ironicNode.Properties)
|
|
||||||
|
|
||||||
ironicNode, success, result, err := p.tryUpdateNode(ironicNode,
|
|
||||||
- p.getUpdateOptsForNode(ironicNode, data))
|
|
||||||
+ p.getInstanceUpdateOpts(ironicNode, data))
|
|
||||||
if !success {
|
|
||||||
return result, err
|
|
||||||
}
|
|
||||||
diff --git a/pkg/provisioner/ironic/provision_test.go b/pkg/provisioner/ironic/provision_test.go
|
|
||||||
index 72ee57b7..40c714e9 100644
|
|
||||||
--- a/pkg/provisioner/ironic/provision_test.go
|
|
||||||
+++ b/pkg/provisioner/ironic/provision_test.go
|
|
||||||
@@ -713,7 +713,7 @@ func TestGetUpdateOptsForNodeWithRootHints(t *testing.T) {
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
RootDeviceHints: host.Status.Provisioning.RootDeviceHints,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -723,7 +723,7 @@ func TestGetUpdateOptsForNodeWithRootHints(t *testing.T) {
|
|
||||||
Value interface{} // the value being passed to ironic (or value associated with the key)
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
- Path: "/properties/root_device",
|
|
||||||
+ Path: "/instance_info/root_device",
|
|
||||||
Value: "userdefined_devicename",
|
|
||||||
Map: map[string]string{
|
|
||||||
"name": "s== userd_devicename",
|
|
||||||
@@ -807,7 +807,7 @@ func TestGetUpdateOptsForNodeVirtual(t *testing.T) {
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
HardwareProfile: hwProf,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -903,9 +903,8 @@ func TestGetUpdateOptsForNodeDell(t *testing.T) {
|
|
||||||
Image: *host.Spec.Image,
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
HardwareProfile: hwProf,
|
|
||||||
- CPUArchitecture: "x86_64",
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -930,10 +929,6 @@ func TestGetUpdateOptsForNodeDell(t *testing.T) {
|
|
||||||
Path: "/instance_uuid",
|
|
||||||
Value: "27720611-e5d1-45d3-ba3a-222dcfaa4ca2",
|
|
||||||
},
|
|
||||||
- {
|
|
||||||
- Path: "/properties/cpu_arch",
|
|
||||||
- Value: "x86_64",
|
|
||||||
- },
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, e := range expected {
|
|
||||||
@@ -971,7 +966,7 @@ func TestGetUpdateOptsForNodeLiveIso(t *testing.T) {
|
|
||||||
Image: *host.Spec.Image,
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -1038,7 +1033,7 @@ func TestGetUpdateOptsForNodeImageToLiveIso(t *testing.T) {
|
|
||||||
Image: *host.Spec.Image,
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -1116,7 +1111,7 @@ func TestGetUpdateOptsForNodeLiveIsoToImage(t *testing.T) {
|
|
||||||
Image: *host.Spec.Image,
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -1188,7 +1183,7 @@ func TestGetUpdateOptsForNodeCustomDeploy(t *testing.T) {
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
CustomDeploy: host.Spec.CustomDeploy,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -1245,7 +1240,7 @@ func TestGetUpdateOptsForNodeCustomDeployWithImage(t *testing.T) {
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
CustomDeploy: host.Spec.CustomDeploy,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -1312,7 +1307,7 @@ func TestGetUpdateOptsForNodeImageToCustomDeploy(t *testing.T) {
|
|
||||||
BootMode: metal3api.DefaultBootMode,
|
|
||||||
CustomDeploy: host.Spec.CustomDeploy,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
@@ -1405,7 +1400,7 @@ func TestGetUpdateOptsForNodeSecureBoot(t *testing.T) {
|
|
||||||
BootMode: metal3api.UEFISecureBoot,
|
|
||||||
HardwareProfile: hwProf,
|
|
||||||
}
|
|
||||||
- patches := prov.getUpdateOptsForNode(ironicNode, provData).Updates
|
|
||||||
+ patches := prov.getInstanceUpdateOpts(ironicNode, provData).Updates
|
|
||||||
|
|
||||||
t.Logf("patches: %v", patches)
|
|
||||||
|
|
||||||
diff --git a/pkg/provisioner/ironic/register.go b/pkg/provisioner/ironic/register.go
|
|
||||||
index 390e463f..9a600189 100644
|
|
||||||
--- a/pkg/provisioner/ironic/register.go
|
|
||||||
+++ b/pkg/provisioner/ironic/register.go
|
|
||||||
@@ -220,7 +220,7 @@ func (p *ironicProvisioner) Register(data provisioner.ManagementAccessData, cred
|
|
||||||
fallthrough
|
|
||||||
|
|
||||||
default:
|
|
||||||
- result, err = p.configureImages(data, ironicNode, bmcAccess)
|
|
||||||
+ result, err = p.configureNode(data, ironicNode, bmcAccess)
|
|
||||||
return result, provID, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -246,6 +246,7 @@ func (p *ironicProvisioner) enrollNode(data provisioner.ManagementAccessData, bm
|
|
||||||
DisablePowerOff: &data.DisablePowerOff,
|
|
||||||
Properties: map[string]interface{}{
|
|
||||||
"capabilities": buildCapabilitiesValue(nil, data.BootMode),
|
|
||||||
+ "cpu_arch": data.CPUArchitecture,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
diff --git a/pkg/provisioner/ironic/register_test.go b/pkg/provisioner/ironic/register_test.go
|
|
||||||
index e6c302b5..8e524dad 100644
|
|
||||||
--- a/pkg/provisioner/ironic/register_test.go
|
|
||||||
+++ b/pkg/provisioner/ironic/register_test.go
|
|
||||||
@@ -72,7 +72,7 @@ func TestRegisterMACOptional(t *testing.T) {
|
|
||||||
assert.Equal(t, "", result.ErrorMessage)
|
|
||||||
}
|
|
||||||
|
|
||||||
-func TestRegisterCreateNodeNoImage(t *testing.T) {
|
|
||||||
+func TestRegisterCreateNode(t *testing.T) {
|
|
||||||
// Create a host without a bootMACAddress and with a BMC that
|
|
||||||
// does not require one.
|
|
||||||
host := makeHost()
|
|
||||||
@@ -146,79 +146,6 @@ func TestRegisterCreateNodeOldInspection(t *testing.T) {
|
|
||||||
assert.Equal(t, "inspector", createdNode.InspectInterface)
|
|
||||||
}
|
|
||||||
|
|
||||||
-func TestRegisterCreateWithImage(t *testing.T) {
|
|
||||||
- // Create a host with Image specified in the Spec
|
|
||||||
- host := makeHost()
|
|
||||||
- host.Status.Provisioning.ID = "" // so we don't lookup by uuid
|
|
||||||
- host.Spec.Image.URL = "theimagefoo"
|
|
||||||
- host.Spec.Image.Checksum = "thechecksumxyz"
|
|
||||||
- host.Spec.Image.ChecksumType = "auto"
|
|
||||||
-
|
|
||||||
- var createdNode *nodes.Node
|
|
||||||
-
|
|
||||||
- createCallback := func(node nodes.Node) {
|
|
||||||
- createdNode = &node
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- ironic := testserver.NewIronic(t).WithDrivers().CreateNodes(createCallback).NoNode(host.Namespace + nameSeparator + host.Name).NoNode(host.Name)
|
|
||||||
- ironic.AddDefaultResponse("/v1/nodes/node-0", "PATCH", http.StatusOK, "{}")
|
|
||||||
- ironic.Start()
|
|
||||||
- defer ironic.Stop()
|
|
||||||
-
|
|
||||||
- auth := clients.AuthConfig{Type: clients.NoAuth}
|
|
||||||
- prov, err := newProvisionerWithSettings(host, bmc.Credentials{}, nullEventPublisher, ironic.Endpoint(), auth)
|
|
||||||
- if err != nil {
|
|
||||||
- t.Fatalf("could not create provisioner: %s", err)
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- result, provID, err := prov.Register(provisioner.ManagementAccessData{CurrentImage: host.Spec.Image.DeepCopy()}, false, false)
|
|
||||||
- if err != nil {
|
|
||||||
- t.Fatalf("error from Register: %s", err)
|
|
||||||
- }
|
|
||||||
- assert.Equal(t, "", result.ErrorMessage)
|
|
||||||
- assert.Equal(t, createdNode.UUID, provID)
|
|
||||||
- assert.Equal(t, "", createdNode.DeployInterface)
|
|
||||||
- updates, _ := ironic.GetLastRequestFor("/v1/nodes/node-0", http.MethodPatch)
|
|
||||||
- assert.Contains(t, updates, "/instance_info/image_source")
|
|
||||||
- assert.Contains(t, updates, host.Spec.Image.URL)
|
|
||||||
- assert.Contains(t, updates, "/instance_info/image_checksum")
|
|
||||||
- assert.Contains(t, updates, host.Spec.Image.Checksum)
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-func TestRegisterCreateWithLiveIso(t *testing.T) {
|
|
||||||
- // Create a host with Image specified in the Spec
|
|
||||||
- host := makeHostLiveIso()
|
|
||||||
- host.Status.Provisioning.ID = "" // so we don't lookup by uuid
|
|
||||||
-
|
|
||||||
- var createdNode *nodes.Node
|
|
||||||
-
|
|
||||||
- createCallback := func(node nodes.Node) {
|
|
||||||
- createdNode = &node
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- ironic := testserver.NewIronic(t).WithDrivers().CreateNodes(createCallback).NoNode(host.Namespace + nameSeparator + host.Name).NoNode(host.Name)
|
|
||||||
- ironic.AddDefaultResponse("/v1/nodes/node-0", "PATCH", http.StatusOK, "{}")
|
|
||||||
- ironic.Start()
|
|
||||||
- defer ironic.Stop()
|
|
||||||
-
|
|
||||||
- auth := clients.AuthConfig{Type: clients.NoAuth}
|
|
||||||
- prov, err := newProvisionerWithSettings(host, bmc.Credentials{}, nullEventPublisher, ironic.Endpoint(), auth)
|
|
||||||
- if err != nil {
|
|
||||||
- t.Fatalf("could not create provisioner: %s", err)
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- result, provID, err := prov.Register(provisioner.ManagementAccessData{CurrentImage: host.Spec.Image.DeepCopy()}, false, false)
|
|
||||||
- if err != nil {
|
|
||||||
- t.Fatalf("error from Register: %s", err)
|
|
||||||
- }
|
|
||||||
- assert.Equal(t, "", result.ErrorMessage)
|
|
||||||
- assert.Equal(t, createdNode.UUID, provID)
|
|
||||||
- assert.Equal(t, "ramdisk", createdNode.DeployInterface)
|
|
||||||
- updates, _ := ironic.GetLastRequestFor("/v1/nodes/node-0", http.MethodPatch)
|
|
||||||
- assert.Contains(t, updates, "/instance_info/boot_iso")
|
|
||||||
- assert.Contains(t, updates, host.Spec.Image.URL)
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
func TestRegisterExistingNode(t *testing.T) {
|
|
||||||
// Create a host without a bootMACAddress and with a BMC that
|
|
||||||
// does not require one.
|
|
||||||
@@ -342,6 +269,7 @@ func TestRegisterExistingNodeContinue(t *testing.T) {
|
|
||||||
"test_password": "******", // ironic returns a placeholder
|
|
||||||
"test_port": "42",
|
|
||||||
},
|
|
||||||
+ Properties: map[string]interface{}{"capabilities": ""},
|
|
||||||
}).NodeUpdate(nodes.Node{
|
|
||||||
UUID: "uuid",
|
|
||||||
})
|
|
||||||
@@ -521,6 +449,7 @@ func TestRegisterExistingSteadyStateNoUpdate(t *testing.T) {
|
|
||||||
DeployInterface: imageType.DeployInterface,
|
|
||||||
InstanceInfo: imageType.InstanceInfo,
|
|
||||||
DriverInfo: imageType.DriverInfo,
|
|
||||||
+ Properties: map[string]interface{}{"capabilities": ""},
|
|
||||||
}).NodeUpdate(nodes.Node{
|
|
||||||
UUID: "uuid",
|
|
||||||
})
|
|
||||||
@@ -577,6 +506,7 @@ func TestRegisterExistingNodeWaiting(t *testing.T) {
|
|
||||||
"test_password": "******", // ironic returns a placeholder
|
|
||||||
"test_port": "42",
|
|
||||||
},
|
|
||||||
+ Properties: map[string]interface{}{"capabilities": ""},
|
|
||||||
}
|
|
||||||
ironic := testserver.NewIronic(t).CreateNodes(createCallback).Node(node).NodeUpdate(nodes.Node{
|
|
||||||
UUID: "uuid",
|
|
||||||
diff --git a/pkg/provisioner/provisioner.go b/pkg/provisioner/provisioner.go
|
|
||||||
index faddd0fd..e2018e63 100644
|
|
||||||
--- a/pkg/provisioner/provisioner.go
|
|
||||||
+++ b/pkg/provisioner/provisioner.go
|
|
||||||
@@ -82,6 +82,7 @@ type ManagementAccessData struct {
|
|
||||||
PreprovisioningNetworkData string
|
|
||||||
HasCustomDeploy bool
|
|
||||||
DisablePowerOff bool
|
|
||||||
+ CPUArchitecture string
|
|
||||||
}
|
|
||||||
|
|
||||||
type AdoptData struct {
|
|
||||||
@@ -122,7 +123,6 @@ type ProvisionData struct {
|
|
||||||
HardwareProfile profile.Profile
|
|
||||||
RootDeviceHints *metal3api.RootDeviceHints
|
|
||||||
CustomDeploy *metal3api.CustomDeploy
|
|
||||||
- CPUArchitecture string
|
|
||||||
}
|
|
||||||
|
|
||||||
type HTTPHeaders []map[string]string
|
|
||||||
--
|
|
||||||
2.50.1
|
|
||||||
|
|
@@ -1,46 +0,0 @@
|
|||||||
From 5419f8d95306efed8667936156d8081c21e068ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
Date: Wed, 9 Jul 2025 14:02:23 +0200
|
|
||||||
Subject: [PATCH 5/5] Provide inline docs for node configuration calls
|
|
||||||
|
|
||||||
Signed-off-by: Dmitry Tantsur <dtantsur@protonmail.com>
|
|
||||||
(cherry picked from commit 778d9342747aefc8079f1ccaa6a14f83b26f28ff)
|
|
||||||
---
|
|
||||||
pkg/provisioner/ironic/ironic.go | 7 +++++++
|
|
||||||
1 file changed, 7 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/pkg/provisioner/ironic/ironic.go b/pkg/provisioner/ironic/ironic.go
|
|
||||||
index b8e6d72b..166d929c 100644
|
|
||||||
--- a/pkg/provisioner/ironic/ironic.go
|
|
||||||
+++ b/pkg/provisioner/ironic/ironic.go
|
|
||||||
@@ -311,6 +311,10 @@ func (p *ironicProvisioner) createPXEEnabledNodePort(uuid, macAddress string) er
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
+// configureNode configures Node properties that are not related to any specific provisioning phase.
|
|
||||||
+// It populates the AutomatedClean field, as well as capabilities and architecture in Properties.
|
|
||||||
+// It also calls setDeployImage to populate IPA parameters in DriverInfo and
|
|
||||||
+// checks if the required PreprovisioningImage is provided and ready.
|
|
||||||
func (p *ironicProvisioner) configureNode(data provisioner.ManagementAccessData, ironicNode *nodes.Node, bmcAccess bmc.AccessDetails) (result provisioner.Result, err error) {
|
|
||||||
updater := clients.UpdateOptsBuilder(p.log)
|
|
||||||
|
|
||||||
@@ -426,6 +430,8 @@ func setExternalURL(p *ironicProvisioner, driverInfo map[string]interface{}) map
|
|
||||||
return driverInfo
|
|
||||||
}
|
|
||||||
|
|
||||||
+// setDeployImage configures the IPA ramdisk parameters in the Node's DriverInfo.
|
|
||||||
+// It can use either the provided PreprovisioningImage or the global configuration from ironicConfig.
|
|
||||||
func setDeployImage(config ironicConfig, accessDetails bmc.AccessDetails, hostImage *provisioner.PreprovisioningImage) clients.UpdateOptsData {
|
|
||||||
deployImageInfo := clients.UpdateOptsData{
|
|
||||||
deployKernelKey: nil,
|
|
||||||
@@ -660,6 +666,7 @@ func (p *ironicProvisioner) setCustomDeployUpdateOptsForNode(ironicNode *nodes.N
|
|
||||||
SetTopLevelOpt("deploy_interface", "custom-agent", ironicNode.DeployInterface)
|
|
||||||
}
|
|
||||||
|
|
||||||
+// getInstanceUpdateOpts constructs InstanceInfo options required to provision a Node in Ironic.
|
|
||||||
func (p *ironicProvisioner) getInstanceUpdateOpts(ironicNode *nodes.Node, data provisioner.ProvisionData) *clients.NodeUpdater {
|
|
||||||
updater := clients.UpdateOptsBuilder(p.log)
|
|
||||||
|
|
||||||
--
|
|
||||||
2.50.1
|
|
||||||
|
|
@@ -2,7 +2,7 @@
|
|||||||
<service name="obs_scm">
|
<service name="obs_scm">
|
||||||
<param name="url">https://github.com/metal3-io/baremetal-operator</param>
|
<param name="url">https://github.com/metal3-io/baremetal-operator</param>
|
||||||
<param name="scm">git</param>
|
<param name="scm">git</param>
|
||||||
<param name="revision">v0.10.2</param>
|
<param name="revision">v0.9.1</param>
|
||||||
<param name="version">_auto_</param>
|
<param name="version">_auto_</param>
|
||||||
<param name="versionformat">@PARENT_TAG@</param>
|
<param name="versionformat">@PARENT_TAG@</param>
|
||||||
<param name="changesgenerate">enable</param>
|
<param name="changesgenerate">enable</param>
|
||||||
|
@@ -17,21 +17,14 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: baremetal-operator
|
Name: baremetal-operator
|
||||||
Version: 0.10.2
|
Version: 0.9.1
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Implements a Kubernetes API for managing bare metal hosts
|
Summary: Implements a Kubernetes API for managing bare metal hosts
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
URL: https://github.com/metal3-io/baremetal-operator
|
URL: https://github.com/metal3-io/baremetal-operator
|
||||||
Source: baremetal-operator-%{version}.tar
|
Source: baremetal-operator-%{version}.tar
|
||||||
Source1: vendor.tar.gz
|
Source1: vendor.tar.gz
|
||||||
# Patches related to multi-architecture support, upstream PRs #2506 #2559 #2537
|
BuildRequires: golang(API) = 1.23
|
||||||
Patch0: 0001-Enable-exhaustive-linter.patch
|
|
||||||
Patch1: 0002-Stop-requiring-DEPLOY_KERNEL-RAMDISK.patch
|
|
||||||
Patch2: 0003-Remove-DEPLOY_KERNEL_URL-from-deployment-scripts-for.patch
|
|
||||||
Patch3: 0004-Refactor-setting-various-Ironic-properties.patch
|
|
||||||
Patch4: 0005-Provide-inline-docs-for-node-configuration-calls.patch
|
|
||||||
|
|
||||||
BuildRequires: golang(API) = 1.24
|
|
||||||
ExcludeArch: s390
|
ExcludeArch: s390
|
||||||
ExcludeArch: %{ix86}
|
ExcludeArch: %{ix86}
|
||||||
|
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.1_up0.6.0
|
#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.0_up0.5.0
|
||||||
#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.1_up0.6.0-%RELEASE%
|
#!BuildTag: %%CHART_PREFIX%%cdi:%%CHART_MAJOR%%.0.0_up0.5.0-%RELEASE%
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 1.62.0
|
appVersion: 1.61.0
|
||||||
description: A Helm chart for Containerized Data Importer (CDI)
|
description: A Helm chart for Containerized Data Importer (CDI)
|
||||||
icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
|
icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
|
||||||
name: cdi
|
name: cdi
|
||||||
type: application
|
type: application
|
||||||
version: "%%CHART_MAJOR%%.0.1+up0.6.0"
|
version: "%%CHART_MAJOR%%.0.0+up0.5.0"
|
||||||
|
@@ -109,9 +109,9 @@ spec:
|
|||||||
description: CDIConfig at CDI level
|
description: CDIConfig at CDI level
|
||||||
properties:
|
properties:
|
||||||
dataVolumeTTLSeconds:
|
dataVolumeTTLSeconds:
|
||||||
description: |-
|
description: DataVolumeTTLSeconds is the time in seconds after
|
||||||
DataVolumeTTLSeconds is the time in seconds after DataVolume completion it can be garbage collected. Disabled by default.
|
DataVolume completion it can be garbage collected. Disabled
|
||||||
Deprecated: Removed in v1.62.
|
by default.
|
||||||
format: int32
|
format: int32
|
||||||
type: integer
|
type: integer
|
||||||
featureGates:
|
featureGates:
|
||||||
@@ -2641,9 +2641,9 @@ spec:
|
|||||||
description: CDIConfig at CDI level
|
description: CDIConfig at CDI level
|
||||||
properties:
|
properties:
|
||||||
dataVolumeTTLSeconds:
|
dataVolumeTTLSeconds:
|
||||||
description: |-
|
description: DataVolumeTTLSeconds is the time in seconds after
|
||||||
DataVolumeTTLSeconds is the time in seconds after DataVolume completion it can be garbage collected. Disabled by default.
|
DataVolume completion it can be garbage collected. Disabled
|
||||||
Deprecated: Removed in v1.62.
|
by default.
|
||||||
format: int32
|
format: int32
|
||||||
type: integer
|
type: integer
|
||||||
featureGates:
|
featureGates:
|
||||||
|
@@ -599,8 +599,6 @@ spec:
|
|||||||
strategy: {}
|
strategy: {}
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
|
||||||
openshift.io/required-scc: restricted-v2
|
|
||||||
labels:
|
labels:
|
||||||
cdi.kubevirt.io: cdi-operator
|
cdi.kubevirt.io: cdi-operator
|
||||||
name: cdi-operator
|
name: cdi-operator
|
||||||
|
@@ -18,8 +18,4 @@ spec:
|
|||||||
{{- with .Values.cdi.workload }}
|
{{- with .Values.cdi.workload }}
|
||||||
workload:
|
workload:
|
||||||
{{- toYaml . | nindent 4 }}
|
{{- toYaml . | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- with .Values.cdi.customizeComponents }}
|
|
||||||
customizeComponents:
|
|
||||||
{{- toYaml . | nindent 4 }}
|
|
||||||
{{- end }}
|
|
@@ -1,12 +1,12 @@
|
|||||||
deployment:
|
deployment:
|
||||||
version: 1.62.0-150700.9.3.1
|
version: 1.61.0-150600.3.12.1
|
||||||
operatorImage: registry.suse.com/suse/sles/15.7/cdi-operator
|
operatorImage: registry.suse.com/suse/sles/15.6/cdi-operator
|
||||||
controllerImage: registry.suse.com/suse/sles/15.7/cdi-controller
|
controllerImage: registry.suse.com/suse/sles/15.6/cdi-controller
|
||||||
importerImage: registry.suse.com/suse/sles/15.7/cdi-importer
|
importerImage: registry.suse.com/suse/sles/15.6/cdi-importer
|
||||||
clonerImage: registry.suse.com/suse/sles/15.7/cdi-cloner
|
clonerImage: registry.suse.com/suse/sles/15.6/cdi-cloner
|
||||||
apiserverImage: registry.suse.com/suse/sles/15.7/cdi-apiserver
|
apiserverImage: registry.suse.com/suse/sles/15.6/cdi-apiserver
|
||||||
uploadserverImage: registry.suse.com/suse/sles/15.7/cdi-uploadserver
|
uploadserverImage: registry.suse.com/suse/sles/15.6/cdi-uploadserver
|
||||||
uploadproxyImage: registry.suse.com/suse/sles/15.7/cdi-uploadproxy
|
uploadproxyImage: registry.suse.com/suse/sles/15.6/cdi-uploadproxy
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
affinity:
|
affinity:
|
||||||
podAffinity:
|
podAffinity:
|
||||||
@@ -30,7 +30,6 @@ cdi:
|
|||||||
featureGates:
|
featureGates:
|
||||||
- HonorWaitForFirstConsumer
|
- HonorWaitForFirstConsumer
|
||||||
imagePullPolicy: "IfNotPresent"
|
imagePullPolicy: "IfNotPresent"
|
||||||
customizeComponents: {}
|
|
||||||
infra:
|
infra:
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
kubernetes.io/os: linux
|
kubernetes.io/os: linux
|
||||||
@@ -42,7 +41,7 @@ cdi:
|
|||||||
nodeSelector:
|
nodeSelector:
|
||||||
kubernetes.io/os: linux
|
kubernetes.io/os: linux
|
||||||
|
|
||||||
hookImage: registry.rancher.com/rancher/kubectl:v1.33.1
|
hookImage: registry.rancher.com/rancher/kubectl:v1.30.10
|
||||||
hookRestartPolicy: OnFailure
|
hookRestartPolicy: OnFailure
|
||||||
hookSecurityContext:
|
hookSecurityContext:
|
||||||
seccompProfile:
|
seccompProfile:
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:latest
|
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1
|
||||||
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:latest-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%edge-image-builder:1.2.1-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-base:$SLE_VERSION
|
FROM registry.suse.com/bci/bci-base:$SLE_VERSION
|
||||||
MAINTAINER SUSE LLC (https://www.suse.com/)
|
MAINTAINER SUSE LLC (https://www.suse.com/)
|
||||||
@@ -14,11 +15,11 @@ RUN zypper --non-interactive install --no-recommends edge-image-builder qemu-x86
|
|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
|
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
|
||||||
LABEL org.opencontainers.image.title="SLE edge-image-builder Container Image"
|
LABEL org.opencontainers.image.title="SLE edge-image-builder Container Image"
|
||||||
LABEL org.opencontainers.image.description="edge-image-builder based on the SLE Base Container Image."
|
LABEL org.opencontainers.image.description="edge-image-builder based on the SLE Base Container Image."
|
||||||
LABEL org.opencontainers.image.version="latest"
|
LABEL org.opencontainers.image.version="1.2.1"
|
||||||
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
|
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
|
||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%edge-image-builder:latest-%RELEASE%"
|
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%edge-image-builder:1.2.1-%RELEASE%"
|
||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
|
LABEL org.openbuildservice.disturl="%DISTURL%"
|
||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
||||||
|
@@ -10,8 +10,6 @@ kubernetes:
|
|||||||
k3s:
|
k3s:
|
||||||
selinuxPackage: k3s-selinux-1.6-1.slemicro.noarch
|
selinuxPackage: k3s-selinux-1.6-1.slemicro.noarch
|
||||||
selinuxRepository: https://rpm.rancher.io/k3s/stable/common/slemicro/noarch
|
selinuxRepository: https://rpm.rancher.io/k3s/stable/common/slemicro/noarch
|
||||||
releaseURL: https://github.com/k3s-io/k3s/releases/download/
|
|
||||||
rke2:
|
rke2:
|
||||||
selinuxPackage: rke2-selinux
|
selinuxPackage: rke2-selinux
|
||||||
selinuxRepository: https://rpm.rancher.io/rke2/stable/common/slemicro/noarch
|
selinuxRepository: https://rpm.rancher.io/rke2/stable/common/slemicro/noarch
|
||||||
releaseURL: https://github.com/rancher/rke2/releases/download/
|
|
||||||
|
@@ -3,11 +3,11 @@
|
|||||||
<param name="url">https://github.com/suse-edge/edge-image-builder.git</param>
|
<param name="url">https://github.com/suse-edge/edge-image-builder.git</param>
|
||||||
<param name="scm">git</param>
|
<param name="scm">git</param>
|
||||||
<param name="exclude">.git</param>
|
<param name="exclude">.git</param>
|
||||||
<param name="revision">1bfee6bb5bd0dc1ed18e2d09820750f9987c96c9</param>
|
<param name="revision">v1.2.1</param>
|
||||||
<!-- Uncomment and set this For Pre-Release Version -->
|
<!-- Uncomment and set this For Pre-Release Version -->
|
||||||
<!-- <param name="version">1.2.0~rc1</param> -->
|
<!-- <param name="version">1.2.0~rc1</param> -->
|
||||||
<!-- Uncomment and this for regular version -->
|
<!-- Uncomment and this for regular version -->
|
||||||
<param name="versionformat">%h</param>
|
<param name="versionformat">@PARENT_TAG@</param>
|
||||||
<param name="versionrewrite-pattern">v(\d+).(\d+).(\d+)</param>
|
<param name="versionrewrite-pattern">v(\d+).(\d+).(\d+)</param>
|
||||||
<param name="versionrewrite-replacement">\1.\2.\3</param>
|
<param name="versionrewrite-replacement">\1.\2.\3</param>
|
||||||
<param name="changesgenerate">enable</param>
|
<param name="changesgenerate">enable</param>
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
|
|
||||||
Name: edge-image-builder
|
Name: edge-image-builder
|
||||||
Version: latest
|
Version: 1.2.1
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Edge Image Builder
|
Summary: Edge Image Builder
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%
|
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%
|
||||||
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%endpoint-copier-operator:%%endpoint-copier-operator_version%%-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6
|
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6
|
||||||
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%frr:8.5.6-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%
|
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%
|
||||||
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%frr-k8s:v%%frr-k8s_version%%-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.2
|
#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.5
|
||||||
#!BuildTag: %%IMG_PREFIX%%ironic:29.0.4.2-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%ironic:26.1.2.5-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
|
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
@@ -19,11 +20,11 @@ RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes
|
|||||||
|
|
||||||
#!ArchExclusiveLine: x86_64
|
#!ArchExclusiveLine: x86_64
|
||||||
RUN if [ "$(uname -m)" = "x86_64" ];then \
|
RUN if [ "$(uname -m)" = "x86_64" ];then \
|
||||||
zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 bind-utils procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic; \
|
zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
|
||||||
fi
|
fi
|
||||||
#!ArchExclusiveLine: aarch64
|
#!ArchExclusiveLine: aarch64
|
||||||
RUN if [ "$(uname -m)" = "aarch64" ];then \
|
RUN if [ "$(uname -m)" = "aarch64" ];then \
|
||||||
zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 bind-utils procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic; \
|
zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python311-pyinotify python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# DATABASE
|
# DATABASE
|
||||||
@@ -41,8 +42,8 @@ LABEL org.opencontainers.image.description="Openstack Ironic based on the SLE Ba
|
|||||||
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
|
LABEL org.opencontainers.image.url="https://www.suse.com/products/server/"
|
||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
||||||
LABEL org.opencontainers.image.version="29.0.4.2"
|
LABEL org.opencontainers.image.version="26.1.2.5"
|
||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:29.0.4.2-%RELEASE%"
|
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic:26.1.2.5-%RELEASE%"
|
||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
|
LABEL org.openbuildservice.disturl="%DISTURL%"
|
||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
||||||
@@ -70,9 +71,6 @@ COPY scripts/ /bin/
|
|||||||
COPY configure-nonroot.sh /bin/
|
COPY configure-nonroot.sh /bin/
|
||||||
RUN set -euo pipefail; chmod +x /bin/configure-ironic.sh /bin/ironic-probe.sh /bin/rundatabase-upgrade /bin/rundnsmasq /bin/runhttpd /bin/runironic /bin/runlogwatch.sh /bin/runonline-data-migrations /bin/configure-nonroot.sh
|
RUN set -euo pipefail; chmod +x /bin/configure-ironic.sh /bin/ironic-probe.sh /bin/rundatabase-upgrade /bin/rundnsmasq /bin/runhttpd /bin/runironic /bin/runlogwatch.sh /bin/runonline-data-migrations /bin/configure-nonroot.sh
|
||||||
|
|
||||||
RUN mv /bin/ironic-probe.sh /bin/ironic-readiness
|
|
||||||
RUN cp /bin/ironic-readiness /bin/ironic-liveness
|
|
||||||
|
|
||||||
COPY ironic-config/inspector.ipxe.j2 ironic-config/httpd-ironic-api.conf.j2 \
|
COPY ironic-config/inspector.ipxe.j2 ironic-config/httpd-ironic-api.conf.j2 \
|
||||||
ironic-config/ipxe_config.template ironic-config/dnsmasq.conf.j2 \
|
ironic-config/ipxe_config.template ironic-config/dnsmasq.conf.j2 \
|
||||||
/tmp/
|
/tmp/
|
||||||
@@ -88,7 +86,8 @@ RUN if [ "$(uname -m)" = "aarch64" ]; then\
|
|||||||
cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
|
cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
|
||||||
fi
|
fi
|
||||||
|
|
||||||
COPY --from=base /tmp/uefi_esp_*.img /templates/
|
COPY --from=base /tmp/esp-x86_64.img /tmp/uefi_esp-x86_64.img
|
||||||
|
COPY --from=base /tmp/esp-aarch64.img /tmp/uefi_esp-arm64.img
|
||||||
|
|
||||||
COPY ironic-config/ironic.conf.j2 ironic-config/network-data-schema-empty.json /etc/ironic/
|
COPY ironic-config/ironic.conf.j2 ironic-config/network-data-schema-empty.json /etc/ironic/
|
||||||
|
|
||||||
|
@@ -45,10 +45,10 @@ chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /run
|
|||||||
|
|
||||||
# ironic and httpd related changes
|
# ironic and httpd related changes
|
||||||
mkdir -p /etc/httpd/conf.d
|
mkdir -p /etc/httpd/conf.d
|
||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/ironic /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d/
|
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /etc/ironic /etc/httpd/conf /etc/httpd/conf.d
|
||||||
chmod 2775 /etc/ironic /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.modules.d/
|
chmod 2775 /etc/ironic /etc/httpd/conf /etc/httpd/conf.d
|
||||||
#chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.d/*
|
#chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.d/*
|
||||||
chmod 664 /etc/ironic/* /etc/httpd/conf/* /etc/httpd/conf.modules.d/*
|
chmod 664 /etc/ironic/* /etc/httpd/conf/*
|
||||||
|
|
||||||
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /var/lib/ironic
|
chown -R "${IRONIC_USER}":"${IRONIC_GROUP}" /var/lib/ironic
|
||||||
chmod 2775 /var/lib/ironic
|
chmod 2775 /var/lib/ironic
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
Listen 0.0.0.0:{{ env.IPXE_TLS_PORT }}
|
Listen {{ env.IPXE_TLS_PORT }}
|
||||||
Listen [::]:{{ env.IPXE_TLS_PORT }}
|
|
||||||
|
|
||||||
<VirtualHost *:{{ env.IPXE_TLS_PORT }}>
|
<VirtualHost *:{{ env.IPXE_TLS_PORT }}>
|
||||||
ErrorLog /dev/stderr
|
ErrorLog /dev/stderr
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
Listen 0.0.0.0:{{ env.VMEDIA_TLS_PORT }}
|
Listen {{ env.VMEDIA_TLS_PORT }}
|
||||||
Listen [::]:{{ env.VMEDIA_TLS_PORT }}
|
|
||||||
|
|
||||||
<VirtualHost *:{{ env.VMEDIA_TLS_PORT }}>
|
<VirtualHost *:{{ env.VMEDIA_TLS_PORT }}>
|
||||||
ErrorLog /dev/stderr
|
ErrorLog /dev/stderr
|
||||||
@@ -11,15 +10,13 @@ Listen [::]:{{ env.VMEDIA_TLS_PORT }}
|
|||||||
SSLCertificateFile {{ env.IRONIC_VMEDIA_CERT_FILE }}
|
SSLCertificateFile {{ env.IRONIC_VMEDIA_CERT_FILE }}
|
||||||
SSLCertificateKeyFile {{ env.IRONIC_VMEDIA_KEY_FILE }}
|
SSLCertificateKeyFile {{ env.IRONIC_VMEDIA_KEY_FILE }}
|
||||||
|
|
||||||
<Directory "/shared/html/">
|
<Directory ~ "/shared/html">
|
||||||
Options Indexes FollowSymLinks
|
Order deny,allow
|
||||||
AllowOverride None
|
deny from all
|
||||||
Require all granted
|
|
||||||
</Directory>
|
</Directory>
|
||||||
<Directory ~ "/shared/html/(redfish|ilo)/">
|
<Directory ~ "/shared/html/(redfish|ilo)/">
|
||||||
Options Indexes FollowSymLinks
|
Order allow,deny
|
||||||
AllowOverride None
|
allow from all
|
||||||
Require all granted
|
|
||||||
</Directory>
|
</Directory>
|
||||||
</VirtualHost>
|
</VirtualHost>
|
||||||
|
|
||||||
|
@@ -12,21 +12,11 @@
|
|||||||
|
|
||||||
|
|
||||||
{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
|
{% if env.LISTEN_ALL_INTERFACES | lower == "true" %}
|
||||||
Listen 0.0.0.0:{{ env.IRONIC_LISTEN_PORT }}
|
Listen {{ env.IRONIC_LISTEN_PORT }}
|
||||||
Listen [::]:{{ env.IRONIC_LISTEN_PORT }}
|
|
||||||
<VirtualHost *:{{ env.IRONIC_LISTEN_PORT }}>
|
<VirtualHost *:{{ env.IRONIC_LISTEN_PORT }}>
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if env.ENABLE_IPV4 %}
|
Listen {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_LISTEN_PORT }}
|
||||||
Listen {{ env.IRONIC_IP }}:{{ env.IRONIC_LISTEN_PORT }}
|
<VirtualHost {{ env.IRONIC_URL_HOST }}:{{ env.IRONIC_LISTEN_PORT }}>
|
||||||
{% endif %}
|
|
||||||
{% if env.ENABLE_IPV6 %}
|
|
||||||
Listen [{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}
|
|
||||||
{% endif %}
|
|
||||||
{% if env.IRONIC_URL_HOSTNAME is defined and env.IRONIC_URL_HOSTNAME|length %}
|
|
||||||
<VirtualHost {{ env.IRONIC_URL_HOSTNAME }}:{{ env.IRONIC_LISTEN_PORT }}>
|
|
||||||
{% else %}
|
|
||||||
<VirtualHost {% if env.ENABLE_IPV4 %}{{ env.IRONIC_IP }}:{{ env.IRONIC_LISTEN_PORT }}{% endif %} {% if env.ENABLE_IPV6 %}[{{ env.IRONIC_IPV6 }}]:{{ env.IRONIC_LISTEN_PORT }}{% endif %}>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if env.IRONIC_PRIVATE_PORT == "unix" %}
|
{% if env.IRONIC_PRIVATE_PORT == "unix" %}
|
||||||
|
@@ -17,4 +17,4 @@ LoadModule authn_core_module /usr/lib64/apache2/mod_authn_core.so
|
|||||||
LoadModule auth_basic_module /usr/lib64/apache2/mod_auth_basic.so
|
LoadModule auth_basic_module /usr/lib64/apache2/mod_auth_basic.so
|
||||||
LoadModule authn_file_module /usr/lib64/apache2/mod_authn_file.so
|
LoadModule authn_file_module /usr/lib64/apache2/mod_authn_file.so
|
||||||
LoadModule authz_user_module /usr/lib64/apache2/mod_authz_user.so
|
LoadModule authz_user_module /usr/lib64/apache2/mod_authz_user.so
|
||||||
#LoadModule access_compat_module /usr/lib64/apache2/mod_access_compat.so
|
LoadModule access_compat_module /usr/lib64/apache2/mod_access_compat.so
|
||||||
|
@@ -1,14 +1,8 @@
|
|||||||
ServerRoot {{ env.HTTPD_DIR }}
|
ServerRoot {{ env.HTTPD_DIR }}
|
||||||
{%- if env.LISTEN_ALL_INTERFACES | lower == "true" %}
|
{%- if env.LISTEN_ALL_INTERFACES | lower == "true" %}
|
||||||
Listen 0.0.0.0:{{ env.HTTP_PORT }}
|
Listen {{ env.HTTP_PORT }}
|
||||||
Listen [::]:{{ env.HTTP_PORT }}
|
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if env.ENABLE_IPV4 %}
|
Listen {{ env.IRONIC_URL_HOST }}:{{ env.HTTP_PORT }}
|
||||||
Listen {{ env.IRONIC_IP }}:{{ env.HTTP_PORT }}
|
|
||||||
{% endif %}
|
|
||||||
{% if env.ENABLE_IPV6 %}
|
|
||||||
Listen [{{ env.IRONIC_IPV6 }}]:{{ env.HTTP_PORT }}
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
Include /etc/httpd/conf.modules.d/*.conf
|
Include /etc/httpd/conf.modules.d/*.conf
|
||||||
User ironic-suse
|
User ironic-suse
|
||||||
|
@@ -5,6 +5,6 @@ echo In inspector.ipxe
|
|||||||
imgfree
|
imgfree
|
||||||
# NOTE(dtantsur): keep inspection kernel params in [mdns]params in
|
# NOTE(dtantsur): keep inspection kernel params in [mdns]params in
|
||||||
# ironic-inspector-image and configuration in configure-ironic.sh
|
# ironic-inspector-image and configuration in configure-ironic.sh
|
||||||
kernel --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.kernel ipa-insecure={{ env.IPA_INSECURE }} ipa-inspection-collectors={{ env.IRONIC_IPA_COLLECTORS }} systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-debug=1 ipa-enable-vlan-interfaces={{ env.IRONIC_ENABLE_VLAN_INTERFACES }} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 {{ env.INSPECTOR_EXTRA_ARGS }} initrd=ironic-python-agent-${buildarch}.initramfs {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} || goto retry_boot
|
kernel --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.kernel ipa-insecure=1 ipa-inspection-collectors={{ env.IRONIC_IPA_COLLECTORS }} systemd.journald.forward_to_console=yes BOOTIF=${mac} ipa-debug=1 ipa-enable-vlan-interfaces={{ env.IRONIC_ENABLE_VLAN_INTERFACES }} ipa-inspection-dhcp-all-interfaces=1 ipa-collect-lldp=1 {{ env.INSPECTOR_EXTRA_ARGS }} initrd=ironic-python-agent-${buildarch}.initramfs {% if env.IRONIC_RAMDISK_SSH_KEY %}sshkey="{{ env.IRONIC_RAMDISK_SSH_KEY|trim }}"{% endif %} {{ env.IRONIC_KERNEL_PARAMS|trim }} || goto retry_boot
|
||||||
initrd --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.initramfs || goto retry_boot
|
initrd --timeout 60000 {{ env.IRONIC_HTTP_URL }}/images/ironic-python-agent-${buildarch}.initramfs || goto retry_boot
|
||||||
boot
|
boot
|
||||||
|
@@ -25,13 +25,7 @@ rpc_transport = none
|
|||||||
use_stderr = true
|
use_stderr = true
|
||||||
# NOTE(dtantsur): the default md5 is not compatible with FIPS mode
|
# NOTE(dtantsur): the default md5 is not compatible with FIPS mode
|
||||||
hash_ring_algorithm = sha256
|
hash_ring_algorithm = sha256
|
||||||
{% if env.ENABLE_IPV4 %}
|
|
||||||
my_ip = {{ env.IRONIC_IP }}
|
my_ip = {{ env.IRONIC_IP }}
|
||||||
{% endif %}
|
|
||||||
{% if env.ENABLE_IPV6 %}
|
|
||||||
my_ipv6 = {{ env.IRONIC_IPV6 }}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
host = {{ env.IRONIC_CONDUCTOR_HOST }}
|
host = {{ env.IRONIC_CONDUCTOR_HOST }}
|
||||||
tempdir = {{ env.IRONIC_TMP_DATA_DIR }}
|
tempdir = {{ env.IRONIC_TMP_DATA_DIR }}
|
||||||
|
|
||||||
@@ -71,7 +65,7 @@ port = {{ env.IRONIC_PRIVATE_PORT }}
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
public_endpoint = {{ env.IRONIC_BASE_URL }}
|
public_endpoint = {{ env.IRONIC_BASE_URL }}
|
||||||
{% else %}
|
{% else %}
|
||||||
host_ip = {{ env.IRONIC_HOST_IP }}
|
host_ip = {% if env.LISTEN_ALL_INTERFACES | lower == "true" %}::{% else %}{{ env.IRONIC_IP }}{% endif %}
|
||||||
port = {{ env.IRONIC_LISTEN_PORT }}
|
port = {{ env.IRONIC_LISTEN_PORT }}
|
||||||
{% if env.IRONIC_TLS_SETUP == "true" %}
|
{% if env.IRONIC_TLS_SETUP == "true" %}
|
||||||
enable_ssl_api = true
|
enable_ssl_api = true
|
||||||
@@ -91,23 +85,17 @@ send_sensor_data = {{ env.SEND_SENSOR_DATA }}
|
|||||||
# Power state is checked every 60 seconds and BMC activity should
|
# Power state is checked every 60 seconds and BMC activity should
|
||||||
# be avoided more often than once every sixty seconds.
|
# be avoided more often than once every sixty seconds.
|
||||||
send_sensor_data_interval = 160
|
send_sensor_data_interval = 160
|
||||||
bootloader_by_arch = {{ env.BOOTLOADER_BY_ARCH }}
|
bootloader = {{ env.IRONIC_HTTP_URL }}/uefi_esp-{{ env.DEPLOY_ARCHITECTURE }}.img
|
||||||
verify_step_priority_override = management.clear_job_queue:90
|
verify_step_priority_override = management.clear_job_queue:90
|
||||||
# We don't use this feature, and it creates an additional load on the database
|
# We don't use this feature, and it creates an additional load on the database
|
||||||
node_history = False
|
node_history = False
|
||||||
# Provide for a timeout longer than 60 seconds for certain vendor's hardware
|
# Provide for a timeout longer than 60 seconds for certain vendor's hardware
|
||||||
power_state_change_timeout = 120
|
power_state_change_timeout = 120
|
||||||
{% if env.DEPLOY_KERNEL_URL is defined %}
|
{% if env.IRONIC_DEFAULT_KERNEL is defined %}
|
||||||
deploy_kernel = {{ env.DEPLOY_KERNEL_URL }}
|
deploy_kernel = file://{{ env.IRONIC_DEFAULT_KERNEL }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if env.DEPLOY_KERNEL_BY_ARCH is defined %}
|
{% if env.IRONIC_DEFAULT_RAMDISK is defined %}
|
||||||
deploy_kernel_by_arch = {{ env.DEPLOY_KERNEL_BY_ARCH }}
|
deploy_ramdisk = file://{{ env.IRONIC_DEFAULT_RAMDISK }}
|
||||||
{% endif %}
|
|
||||||
{% if env.DEPLOY_RAMDISK_URL is defined %}
|
|
||||||
deploy_ramdisk = {{ env.DEPLOY_RAMDISK_URL }}
|
|
||||||
{% endif %}
|
|
||||||
{% if env.DEPLOY_RAMDISK_BY_ARCH is defined %}
|
|
||||||
deploy_ramdisk_by_arch = {{ env.DEPLOY_RAMDISK_BY_ARCH }}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if env.DISABLE_DEEP_IMAGE_INSPECTION | lower == "true" %}
|
{% if env.DISABLE_DEEP_IMAGE_INSPECTION | lower == "true" %}
|
||||||
disable_deep_image_inspection = True
|
disable_deep_image_inspection = True
|
||||||
@@ -129,15 +117,15 @@ default_boot_option = local
|
|||||||
erase_devices_metadata_priority = 10
|
erase_devices_metadata_priority = 10
|
||||||
erase_devices_priority = 0
|
erase_devices_priority = 0
|
||||||
http_root = /shared/html/
|
http_root = /shared/html/
|
||||||
http_url = {% if env.VMEDIA_TLS_PORT %}{{ env.IRONIC_HTTPS_VMEDIA_URL }}{% else %}{{ env.IRONIC_HTTP_URL }}{% endif %}
|
http_url = {{ env.IRONIC_HTTP_URL }}
|
||||||
fast_track = {{ env.IRONIC_FAST_TRACK }}
|
fast_track = {{ env.IRONIC_FAST_TRACK }}
|
||||||
{% if env.IRONIC_BOOT_ISO_SOURCE %}
|
{% if env.IRONIC_BOOT_ISO_SOURCE %}
|
||||||
ramdisk_image_download_source = {{ env.IRONIC_BOOT_ISO_SOURCE }}
|
ramdisk_image_download_source = {{ env.IRONIC_BOOT_ISO_SOURCE }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if env.IRONIC_EXTERNAL_HTTP_URL %}
|
{% if env.IRONIC_EXTERNAL_HTTP_URL %}
|
||||||
external_http_url = {{ env.IRONIC_EXTERNAL_HTTP_URL }}
|
external_http_url = {{ env.IRONIC_EXTERNAL_HTTP_URL }}
|
||||||
{% elif env.VMEDIA_TLS_PORT %}
|
{% elif env.IRONIC_VMEDIA_TLS_SETUP == "true" %}
|
||||||
external_http_url = {{ env.IRONIC_HTTPS_VMEDIA_URL }}
|
external_http_url = https://{{ env.IRONIC_URL_HOST }}:{{ env.VMEDIA_TLS_PORT }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if env.IRONIC_EXTERNAL_CALLBACK_URL %}
|
{% if env.IRONIC_EXTERNAL_CALLBACK_URL %}
|
||||||
external_callback_url = {{ env.IRONIC_EXTERNAL_CALLBACK_URL }}
|
external_callback_url = {{ env.IRONIC_EXTERNAL_CALLBACK_URL }}
|
||||||
@@ -193,7 +181,7 @@ cipher_suite_versions = 3,17
|
|||||||
# containers are in host networking.
|
# containers are in host networking.
|
||||||
auth_strategy = http_basic
|
auth_strategy = http_basic
|
||||||
http_basic_auth_user_file = {{ env.IRONIC_RPC_HTPASSWD_FILE }}
|
http_basic_auth_user_file = {{ env.IRONIC_RPC_HTPASSWD_FILE }}
|
||||||
host_ip = {{ env.IRONIC_HOST_IP }}
|
host_ip = {% if env.LISTEN_ALL_INTERFACES | lower == "true" %}::{% else %}{{ env.IRONIC_IP }}{% endif %}
|
||||||
{% if env.IRONIC_TLS_SETUP == "true" %}
|
{% if env.IRONIC_TLS_SETUP == "true" %}
|
||||||
use_ssl = true
|
use_ssl = true
|
||||||
cafile = {{ env.IRONIC_CACERT_FILE }}
|
cafile = {{ env.IRONIC_CACERT_FILE }}
|
||||||
@@ -213,7 +201,7 @@ images_path = /shared/html/tmp
|
|||||||
instance_master_path = /shared/html/master_images
|
instance_master_path = /shared/html/master_images
|
||||||
tftp_master_path = /shared/tftpboot/master_images
|
tftp_master_path = /shared/tftpboot/master_images
|
||||||
tftp_root = /shared/tftpboot
|
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=1 {% 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
|
||||||
# This makes networking boot templates generated even for nodes using local
|
# This makes networking boot templates generated even for nodes using local
|
||||||
# boot (the default), ensuring that they boot correctly even if they start
|
# boot (the default), ensuring that they boot correctly even if they start
|
||||||
# netbooting for some reason (e.g. with the noop management interface).
|
# netbooting for some reason (e.g. with the noop management interface).
|
||||||
@@ -226,14 +214,14 @@ ipxe_config_template = /tmp/ipxe_config.template
|
|||||||
|
|
||||||
[redfish]
|
[redfish]
|
||||||
use_swift = false
|
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=1 {% 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
|
||||||
|
|
||||||
[ilo]
|
[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=1 {% 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
|
||||||
use_web_server_for_images = true
|
use_web_server_for_images = true
|
||||||
|
|
||||||
[irmc]
|
[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=1 {% 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
|
||||||
|
|
||||||
[service_catalog]
|
[service_catalog]
|
||||||
endpoint_override = {{ env.IRONIC_BASE_URL }}
|
endpoint_override = {{ env.IRONIC_BASE_URL }}
|
||||||
|
@@ -9,7 +9,7 @@ declare -A efi_arch=(
|
|||||||
|
|
||||||
for arch in "${!efi_arch[@]}"; do
|
for arch in "${!efi_arch[@]}"; do
|
||||||
|
|
||||||
DEST=/tmp/uefi_esp_${arch}.img
|
DEST=/tmp/esp-${arch}.img
|
||||||
|
|
||||||
dd bs=1024 count=6400 if=/dev/zero of=$DEST
|
dd bs=1024 count=6400 if=/dev/zero of=$DEST
|
||||||
mkfs.msdos -F 12 -n 'ESP_IMAGE' $DEST
|
mkfs.msdos -F 12 -n 'ESP_IMAGE' $DEST
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
IRONIC_EXTERNAL_IP="${IRONIC_EXTERNAL_IP:-}"
|
IRONIC_EXTERNAL_IP="${IRONIC_EXTERNAL_IP:-}"
|
||||||
export VMEDIA_TLS_PORT="${VMEDIA_TLS_PORT:-}"
|
|
||||||
|
|
||||||
# Define the VLAN interfaces to be included in introspection report, e.g.
|
# Define the VLAN interfaces to be included in introspection report, e.g.
|
||||||
# all - all VLANs on all interfaces using LLDP information
|
# all - all VLANs on all interfaces using LLDP information
|
||||||
@@ -52,18 +51,6 @@ export IRONIC_IPA_COLLECTORS=${IRONIC_IPA_COLLECTORS:-default,logs}
|
|||||||
|
|
||||||
wait_for_interface_or_ip
|
wait_for_interface_or_ip
|
||||||
|
|
||||||
if [[ "$(echo "$LISTEN_ALL_INTERFACES" | tr '[:upper:]' '[:lower:]')" == "true" ]]; then
|
|
||||||
export IRONIC_HOST_IP="::"
|
|
||||||
elif [[ -n "${ENABLE_IPV6}" ]]; then
|
|
||||||
export IRONIC_HOST_IP="$IRONIC_IPV6"
|
|
||||||
else
|
|
||||||
export IRONIC_HOST_IP="$IRONIC_IP"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "${VMEDIA_TLS_PORT}" ]]; then
|
|
||||||
export IRONIC_HTTPS_VMEDIA_URL="https://${IRONIC_URL_HOST}:${VMEDIA_TLS_PORT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Hostname to use for the current conductor instance.
|
# Hostname to use for the current conductor instance.
|
||||||
export IRONIC_CONDUCTOR_HOST=${IRONIC_CONDUCTOR_HOST:-${IRONIC_URL_HOST}}
|
export IRONIC_CONDUCTOR_HOST=${IRONIC_CONDUCTOR_HOST:-${IRONIC_URL_HOST}}
|
||||||
|
|
||||||
@@ -76,41 +63,10 @@ if [[ -n "$IRONIC_EXTERNAL_IP" ]]; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
IMAGE_CACHE_PREFIX="/shared/html/images/ironic-python-agent"
|
IMAGE_CACHE_PREFIX="/shared/html/images/ironic-python-agent-${DEPLOY_ARCHITECTURE}"
|
||||||
if [[ -z "${DEPLOY_KERNEL_URL:-}" ]] && [[ -z "${DEPLOY_RAMDISK_URL:-}" ]] && \
|
if [[ -f "${IMAGE_CACHE_PREFIX}.kernel" ]] && [[ -f "${IMAGE_CACHE_PREFIX}.initramfs" ]]; then
|
||||||
[[ -f "${IMAGE_CACHE_PREFIX}.kernel" ]] && [[ -f "${IMAGE_CACHE_PREFIX}.initramfs" ]]; then
|
export IRONIC_DEFAULT_KERNEL="${IMAGE_CACHE_PREFIX}.kernel"
|
||||||
export DEPLOY_KERNEL_URL="file://${IMAGE_CACHE_PREFIX}.kernel"
|
export IRONIC_DEFAULT_RAMDISK="${IMAGE_CACHE_PREFIX}.initramfs"
|
||||||
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
|
fi
|
||||||
|
|
||||||
if [[ -f "${IRONIC_CONF_DIR}/ironic.conf" ]]; then
|
if [[ -f "${IRONIC_CONF_DIR}/ironic.conf" ]]; then
|
||||||
@@ -118,13 +74,6 @@ if [[ -f "${IRONIC_CONF_DIR}/ironic.conf" ]]; then
|
|||||||
cp "${IRONIC_CONF_DIR}/ironic.conf" "${IRONIC_CONF_DIR}/ironic.conf.orig"
|
cp "${IRONIC_CONF_DIR}/ironic.conf" "${IRONIC_CONF_DIR}/ironic.conf.orig"
|
||||||
fi
|
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
|
# oslo.config also supports Config Opts From Environment, log them to stdout
|
||||||
echo 'Options set from Environment variables'
|
echo 'Options set from Environment variables'
|
||||||
env | grep "^OS_" || true
|
env | grep "^OS_" || true
|
||||||
@@ -143,11 +92,4 @@ render_j2_config "/etc/ironic/ironic.conf.j2" \
|
|||||||
configure_json_rpc_auth
|
configure_json_rpc_auth
|
||||||
|
|
||||||
# Make sure ironic traffic bypasses any proxies
|
# Make sure ironic traffic bypasses any proxies
|
||||||
export NO_PROXY="${NO_PROXY:-}"
|
export NO_PROXY="${NO_PROXY:-},$IRONIC_IP"
|
||||||
|
|
||||||
if [[ -n "$IRONIC_IPV6" ]]; then
|
|
||||||
export NO_PROXY="${NO_PROXY},${IRONIC_IPV6}"
|
|
||||||
fi
|
|
||||||
if [[ -n "$IRONIC_IP" ]]; then
|
|
||||||
export NO_PROXY="${NO_PROXY},${IRONIC_IP}"
|
|
||||||
fi
|
|
||||||
|
@@ -5,11 +5,9 @@ set -euxo pipefail
|
|||||||
# Export IRONIC_IP to avoid needing to lean on IRONIC_URL_HOST for consumption in
|
# Export IRONIC_IP to avoid needing to lean on IRONIC_URL_HOST for consumption in
|
||||||
# e.g. dnsmasq configuration
|
# e.g. dnsmasq configuration
|
||||||
export IRONIC_IP="${IRONIC_IP:-}"
|
export IRONIC_IP="${IRONIC_IP:-}"
|
||||||
IRONIC_IPV6="${IRONIC_IPV6:-}"
|
|
||||||
PROVISIONING_INTERFACE="${PROVISIONING_INTERFACE:-}"
|
PROVISIONING_INTERFACE="${PROVISIONING_INTERFACE:-}"
|
||||||
PROVISIONING_IP="${PROVISIONING_IP:-}"
|
PROVISIONING_IP="${PROVISIONING_IP:-}"
|
||||||
PROVISIONING_MACS="${PROVISIONING_MACS:-}"
|
PROVISIONING_MACS="${PROVISIONING_MACS:-}"
|
||||||
IRONIC_URL_HOSTNAME="${IRONIC_URL_HOSTNAME:-}"
|
|
||||||
IPXE_CUSTOM_FIRMWARE_DIR="${IPXE_CUSTOM_FIRMWARE_DIR:-/shared/custom_ipxe_firmware}"
|
IPXE_CUSTOM_FIRMWARE_DIR="${IPXE_CUSTOM_FIRMWARE_DIR:-/shared/custom_ipxe_firmware}"
|
||||||
CUSTOM_CONFIG_DIR="${CUSTOM_CONFIG_DIR:-/conf}"
|
CUSTOM_CONFIG_DIR="${CUSTOM_CONFIG_DIR:-/conf}"
|
||||||
CUSTOM_DATA_DIR="${CUSTOM_DATA_DIR:-/data}"
|
CUSTOM_DATA_DIR="${CUSTOM_DATA_DIR:-/data}"
|
||||||
@@ -35,85 +33,6 @@ export LOCAL_DB_URI="sqlite:///${IRONIC_DB_DIR}/ironic.sqlite"
|
|||||||
|
|
||||||
export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-false}
|
export IRONIC_USE_MARIADB=${IRONIC_USE_MARIADB:-false}
|
||||||
|
|
||||||
|
|
||||||
get_ip_of_hostname()
|
|
||||||
{
|
|
||||||
if [[ "$#" -ne 2 ]]; then
|
|
||||||
echo "${FUNCNAME}: two parameters required, $# provided" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
case $2 in
|
|
||||||
4)
|
|
||||||
QUERY="a";;
|
|
||||||
6)
|
|
||||||
QUERY="aaaa";;
|
|
||||||
*)
|
|
||||||
echo "${FUNCNAME}: the second parameter should be [a|aaaa] for A and AAAA records"
|
|
||||||
return 1;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
local HOSTNAME=$1
|
|
||||||
|
|
||||||
echo $(nslookup -type=${QUERY} "${HOSTNAME}" | tail -n2 | grep -w "Address:" | cut -d " " -f2)
|
|
||||||
}
|
|
||||||
|
|
||||||
get_interface_of_ip()
|
|
||||||
{
|
|
||||||
local IP_VERS=""
|
|
||||||
|
|
||||||
if [[ "$#" -gt 2 ]]; then
|
|
||||||
echo "${FUNCNAME}: too many parameters" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$#" -eq 2 ]]; then
|
|
||||||
case $2 in
|
|
||||||
4|6)
|
|
||||||
local IP_VERS="-${2}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "${FUNCNAME}: the second parameter should be [4|6] (or missing for both)" >&2
|
|
||||||
return 2
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
local IP_ADDR=$1
|
|
||||||
|
|
||||||
# Convert the address using ipcalc which strips out the subnet.
|
|
||||||
# For IPv6 addresses, this will give the short-form address
|
|
||||||
IP_ADDR="$(ipcalc "${IP_ADDR}" | grep "^Address:" | awk '{print $2}')"
|
|
||||||
|
|
||||||
echo $(ip ${IP_VERS} -br addr show scope global | grep -i " ${IP_ADDR}/" | cut -f 1 -d ' ' | cut -f 1 -d '@')
|
|
||||||
}
|
|
||||||
|
|
||||||
get_ip_of_interface()
|
|
||||||
{
|
|
||||||
local IP_VERS=""
|
|
||||||
|
|
||||||
if [[ "$#" -gt 2 ]]; then
|
|
||||||
echo "${FUNCNAME}: too many parameters" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [[ "$#" -eq 2 ]]; then
|
|
||||||
case $2 in
|
|
||||||
4|6)
|
|
||||||
local IP_VERS="-${2}"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "${FUNCNAME}: the second parameter should be [4|6] (or missing for both)" >&2
|
|
||||||
return 2
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
local IFACE=$1
|
|
||||||
|
|
||||||
echo $(ip ${IP_VERS} -br addr show scope global up dev ${IFACE} | awk '{print $3}' | sed -e 's%/.*%%' | head -n 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
get_provisioning_interface()
|
get_provisioning_interface()
|
||||||
{
|
{
|
||||||
if [[ -n "$PROVISIONING_INTERFACE" ]]; then
|
if [[ -n "$PROVISIONING_INTERFACE" ]]; then
|
||||||
@@ -122,7 +41,13 @@ get_provisioning_interface()
|
|||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local interface=""
|
local interface="provisioning"
|
||||||
|
|
||||||
|
if [[ -n "${PROVISIONING_IP}" ]]; then
|
||||||
|
if ip -br addr show | grep -i " ${PROVISIONING_IP}/" &>/dev/null; then
|
||||||
|
interface="$(ip -br addr show | grep -i " ${PROVISIONING_IP}/" | cut -f 1 -d ' ' | cut -f 1 -d '@')"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
for mac in ${PROVISIONING_MACS//,/ }; do
|
for mac in ${PROVISIONING_MACS//,/ }; do
|
||||||
if ip -br link show up | grep -i "$mac" &>/dev/null; then
|
if ip -br link show up | grep -i "$mac" &>/dev/null; then
|
||||||
@@ -146,111 +71,32 @@ wait_for_interface_or_ip()
|
|||||||
# available on an interface, otherwise we look at $PROVISIONING_INTERFACE
|
# available on an interface, otherwise we look at $PROVISIONING_INTERFACE
|
||||||
# for an IP
|
# for an IP
|
||||||
if [[ -n "${PROVISIONING_IP}" ]]; then
|
if [[ -n "${PROVISIONING_IP}" ]]; then
|
||||||
local IFACE_OF_IP=""
|
# Convert the address using ipcalc which strips out the subnet.
|
||||||
|
# For IPv6 addresses, this will give the short-form address
|
||||||
until [[ -n "$IFACE_OF_IP" ]]; do
|
IRONIC_IP="$(ipcalc "${PROVISIONING_IP}" | grep "^Address:" | awk '{print $2}')"
|
||||||
echo "Waiting for ${PROVISIONING_IP} to be configured on an interface..."
|
export IRONIC_IP
|
||||||
IFACE_OF_IP="$(get_interface_of_ip "${PROVISIONING_IP}")"
|
until grep -F " ${IRONIC_IP}/" <(ip -br addr show); do
|
||||||
|
echo "Waiting for ${IRONIC_IP} to be configured on an interface"
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Found $PROVISIONING_IP on interface \"${IFACE_OF_IP}\"!"
|
|
||||||
|
|
||||||
export PROVISIONING_INTERFACE="$IFACE_OF_IP"
|
|
||||||
# If the IP contains a colon, then it's an IPv6 address
|
|
||||||
if [[ "$PROVISIONING_IP" =~ .*:.* ]]; then
|
|
||||||
export IRONIC_IPV6="$PROVISIONING_IP"
|
|
||||||
export IRONIC_IP=""
|
|
||||||
else
|
|
||||||
export IRONIC_IP="$PROVISIONING_IP"
|
|
||||||
fi
|
|
||||||
elif [[ -n "${IRONIC_IP}" ]]; then
|
|
||||||
if [[ "$IRONIC_IP" =~ .*:.* ]]; then
|
|
||||||
export IRONIC_IPV6="$IRONIC_IP"
|
|
||||||
export IRONIC_IP=""
|
|
||||||
fi
|
|
||||||
elif [[ -n "${PROVISIONING_INTERFACE}" ]]; then
|
|
||||||
until [[ -n "$IRONIC_IPV6" ]] || [[ -n "$IRONIC_IP" ]]; do
|
|
||||||
echo "Waiting for ${PROVISIONING_INTERFACE} interface to be configured..."
|
|
||||||
|
|
||||||
IRONIC_IPV6="$(get_ip_of_interface "${PROVISIONING_INTERFACE}" 6)"
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
IRONIC_IP="$(get_ip_of_interface "${PROVISIONING_INTERFACE}" 4)"
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
if [[ -n "$IRONIC_IPV6" ]]; then
|
|
||||||
echo "Found $IRONIC_IPV6 on interface \"${PROVISIONING_INTERFACE}\"!"
|
|
||||||
export IRONIC_IPV6
|
|
||||||
fi
|
|
||||||
if [[ -n "$IRONIC_IP" ]]; then
|
|
||||||
echo "Found $IRONIC_IP on interface \"${PROVISIONING_INTERFACE}\"!"
|
|
||||||
export IRONIC_IP
|
|
||||||
fi
|
|
||||||
elif [[ -n "$IRONIC_URL_HOSTNAME" ]]; then
|
|
||||||
local IPV6_IFACE=""
|
|
||||||
local IPV4_IFACE=""
|
|
||||||
|
|
||||||
# we should get at least one IP address
|
|
||||||
until [[ -n "$IPV6_IFACE" ]] || [[ -n "$IPV4_IFACE" ]]; do
|
|
||||||
local IPV6_RECORD=""
|
|
||||||
local IPV4_RECORD=""
|
|
||||||
|
|
||||||
IPV6_RECORD="$(get_ip_of_hostname "${IRONIC_URL_HOSTNAME}" 6)"
|
|
||||||
IPV4_RECORD="$(get_ip_of_hostname "${IRONIC_URL_HOSTNAME}" 4)"
|
|
||||||
|
|
||||||
# We couldn't get any IP
|
|
||||||
if [[ -z "$IPV4_RECORD" ]] && [[ -z "$IPV6_RECORD" ]]; then
|
|
||||||
echo "${FUNCNAME}: no valid IP found for hostname ${IRONIC_URL_HOSTNAME}" >&2
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Waiting for ${IPV6_RECORD} to be configured on an interface"
|
|
||||||
IPV6_IFACE="$(get_interface_of_ip "${IPV6_RECORD}" 6)"
|
|
||||||
sleep 1
|
|
||||||
|
|
||||||
echo "Waiting for ${IPV4_RECORD} to be configured on an interface"
|
|
||||||
IPV4_IFACE="$(get_interface_of_ip "${IPV4_RECORD}" 4)"
|
|
||||||
sleep 1
|
|
||||||
done
|
|
||||||
|
|
||||||
# Add some debugging output
|
|
||||||
if [[ -n "$IPV6_IFACE" ]]; then
|
|
||||||
echo "Found $IPV6_RECORD on interface \"${IPV6_IFACE}\"!"
|
|
||||||
export IRONIC_IPV6="$IPV6_RECORD"
|
|
||||||
fi
|
|
||||||
if [[ -n "$IPV4_IFACE" ]]; then
|
|
||||||
echo "Found $IPV4_RECORD on interface \"${IPV4_IFACE}\"!"
|
|
||||||
export IRONIC_IP="$IPV4_RECORD"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Make sure both IPs are asigned to the same interface
|
|
||||||
if [[ -n "$IPV6_IFACE" ]] && [[ -n "$IPV4_IFACE" ]] && [[ "$IPV6_IFACE" != "$IPV4_IFACE" ]]; then
|
|
||||||
echo "Warning, the IPv4 and IPv6 addresses from \"${HOSTNAME}\" are assigned to different " \
|
|
||||||
"interfaces (\"${IPV6_IFACE}\" and \"${IPV4_IFACE}\")" >&2
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
else
|
||||||
echo "Cannot determine an interface or an IP for binding and creating URLs"
|
until [[ -n "$IRONIC_IP" ]]; do
|
||||||
return 1
|
echo "Waiting for ${PROVISIONING_INTERFACE} interface to be configured"
|
||||||
|
IRONIC_IP="$(ip -br add show scope global up dev "${PROVISIONING_INTERFACE}" | awk '{print $3}' | sed -e 's%/.*%%' | head -n 1)"
|
||||||
|
export IRONIC_IP
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Define the URLs based on the what we have found,
|
# If the IP contains a colon, then it's an IPv6 address, and the HTTP
|
||||||
# prioritize IPv6 for IRONIC_URL_HOST
|
# host needs surrounding with brackets
|
||||||
if [[ -n "$IRONIC_IP" ]]; then
|
if [[ "$IRONIC_IP" =~ .*:.* ]]; then
|
||||||
export ENABLE_IPV4=yes
|
export IPV=6
|
||||||
|
export IRONIC_URL_HOST="[$IRONIC_IP]"
|
||||||
|
else
|
||||||
|
export IPV=4
|
||||||
export IRONIC_URL_HOST="$IRONIC_IP"
|
export IRONIC_URL_HOST="$IRONIC_IP"
|
||||||
fi
|
fi
|
||||||
if [[ -n "$IRONIC_IPV6" ]]; then
|
|
||||||
export ENABLE_IPV6=yes
|
|
||||||
export IRONIC_URL_HOST="[${IRONIC_IPV6}]" # The HTTP host needs surrounding with brackets
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Once determined if we have IPv4 and/or IPv6, override the hostname if provided
|
|
||||||
if [[ -n "$IRONIC_URL_HOSTNAME" ]]; then
|
|
||||||
IRONIC_URL_HOST=$IRONIC_URL_HOSTNAME
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Avoid having to construct full URL multiple times while allowing
|
# Avoid having to construct full URL multiple times while allowing
|
||||||
# the override of IRONIC_HTTP_URL for environments in which IRONIC_IP
|
# the override of IRONIC_HTTP_URL for environments in which IRONIC_IP
|
||||||
|
@@ -37,6 +37,7 @@ export INSPECTOR_EXTRA_ARGS
|
|||||||
|
|
||||||
# Copy files to shared mount
|
# Copy files to shared mount
|
||||||
render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe
|
render_j2_config /tmp/inspector.ipxe.j2 /shared/html/inspector.ipxe
|
||||||
|
cp /tmp/uefi_esp*.img /shared/html/
|
||||||
# cp -r /etc/httpd/* "${HTTPD_DIR}"
|
# cp -r /etc/httpd/* "${HTTPD_DIR}"
|
||||||
if [[ -f "${HTTPD_CONF_DIR}/httpd.conf" ]]; then
|
if [[ -f "${HTTPD_CONF_DIR}/httpd.conf" ]]; then
|
||||||
mv "${HTTPD_CONF_DIR}/httpd.conf" "${HTTPD_CONF_DIR}/httpd.conf.example"
|
mv "${HTTPD_CONF_DIR}/httpd.conf" "${HTTPD_CONF_DIR}/httpd.conf.example"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.9
|
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8
|
||||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.9-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
@@ -18,11 +18,11 @@ FROM micro AS final
|
|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
|
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
|
||||||
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
|
LABEL org.opencontainers.image.title="SLE Based Ironic IPA Downloader Container Image"
|
||||||
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
|
LABEL org.opencontainers.image.description="ironic-ipa-downloader based on the SLE Base Container Image."
|
||||||
LABEL org.opencontainers.image.version="3.0.9"
|
LABEL org.opencontainers.image.version="3.0.8"
|
||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
|
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
|
||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.9-%RELEASE%"
|
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%"
|
||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
|
LABEL org.openbuildservice.disturl="%DISTURL%"
|
||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
||||||
|
@@ -29,12 +29,13 @@ if [ -z "${IPA_BASEURI}" ]; then
|
|||||||
# SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages
|
# SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages
|
||||||
mkdir -p /shared/html/images
|
mkdir -p /shared/html/images
|
||||||
if [ -f ${IMAGES_BASE_PATH}/initrd-x86_64.zst ]; then
|
if [ -f ${IMAGES_BASE_PATH}/initrd-x86_64.zst ]; then
|
||||||
cp ${IMAGES_BASE_PATH}/initrd-x86_64.zst /shared/html/images/ironic-python-agent_x86_64.initramfs
|
cp ${IMAGES_BASE_PATH}/initrd-x86_64.zst /shared/html/images/ironic-python-agent-x86_64.initramfs
|
||||||
cp ${IMAGES_BASE_PATH}/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent_x86_64.kernel
|
cp ${IMAGES_BASE_PATH}/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent-x86_64.kernel
|
||||||
fi
|
fi
|
||||||
|
# Use arm64 as destination for iPXE compatibility
|
||||||
if [ -f ${IMAGES_BASE_PATH}/initrd-aarch64.zst ]; then
|
if [ -f ${IMAGES_BASE_PATH}/initrd-aarch64.zst ]; then
|
||||||
cp ${IMAGES_BASE_PATH}/initrd-aarch64.zst /shared/html/images/ironic-python-agent_aarch64.initramfs
|
cp ${IMAGES_BASE_PATH}/initrd-aarch64.zst /shared/html/images/ironic-python-agent-arm64.initramfs
|
||||||
cp ${IMAGES_BASE_PATH}/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent_aarch64.kernel
|
cp ${IMAGES_BASE_PATH}/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent-arm64.kernel
|
||||||
fi
|
fi
|
||||||
|
|
||||||
cp /tmp/images.sha256 /shared/images.sha256
|
cp /tmp/images.sha256 /shared/images.sha256
|
||||||
@@ -86,8 +87,8 @@ else
|
|||||||
chmod 755 "$TMPDIR"
|
chmod 755 "$TMPDIR"
|
||||||
mv "$TMPDIR" "$FILENAME-$ETAG"
|
mv "$TMPDIR" "$FILENAME-$ETAG"
|
||||||
ln -sf "$FILENAME-$ETAG/$FFILENAME.headers" "$FFILENAME.headers"
|
ln -sf "$FILENAME-$ETAG/$FFILENAME.headers" "$FFILENAME.headers"
|
||||||
ln -sf "$FILENAME-$ETAG/$FILENAME.initramfs" "${FILENAME}_${ARCH,,}.initramfs"
|
ln -sf "$FILENAME-$ETAG/$FILENAME.initramfs" "$FILENAME-${ARCH,,}.initramfs"
|
||||||
ln -sf "$FILENAME-$ETAG/$FILENAME.kernel" "${FILENAME}_${ARCH,,}.kernel"
|
ln -sf "$FILENAME-$ETAG/$FILENAME.kernel" "$FILENAME-${ARCH,,}.kernel"
|
||||||
|
|
||||||
IMAGE_CHANGED=1
|
IMAGE_CHANGED=1
|
||||||
else
|
else
|
||||||
@@ -99,7 +100,7 @@ if [ "${CERTS_CHANGED:-0}" = "1" ] || [ "${IMAGE_CHANGED:-0}" = "1" ]; then
|
|||||||
mkdir -p /tmp/ca/tmp-initrd && cd /tmp/ca/tmp-initrd
|
mkdir -p /tmp/ca/tmp-initrd && cd /tmp/ca/tmp-initrd
|
||||||
mkdir -p etc/ironic-python-agent.d/ca-certs
|
mkdir -p etc/ironic-python-agent.d/ca-certs
|
||||||
cp /tmp/ironic-certificates/* etc/ironic-python-agent.d/ca-certs/
|
cp /tmp/ironic-certificates/* etc/ironic-python-agent.d/ca-certs/
|
||||||
for initramfs in /shared/html/images/ironic-python-agent_*.initramfs; do
|
for initramfs in /shared/html/images/ironic-python-agent-*.initramfs; do
|
||||||
find . | cpio -o -H newc --reproducible | zstd -c >> "${initramfs}"
|
find . | cpio -o -H newc --reproducible | zstd -c >> "${initramfs}"
|
||||||
done
|
done
|
||||||
cp /tmp/certificates.sha256 /shared/certificates.sha256
|
cp /tmp/certificates.sha256 /shared/certificates.sha256
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%
|
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%
|
||||||
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%kube-rbac-proxy:%%kube-rbac-proxy_version%%-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4
|
#!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4
|
||||||
#!BuildTag: %%IMG_PREFIX%%kubectl:1.33.4-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%kubectl:1.32.4-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
@@ -15,11 +16,11 @@ FROM micro AS final
|
|||||||
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
|
LABEL org.opencontainers.image.authors="SUSE LLC (https://www.suse.com/)"
|
||||||
LABEL org.opencontainers.image.title="SLE kubectl image"
|
LABEL org.opencontainers.image.title="SLE kubectl image"
|
||||||
LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image."
|
LABEL org.opencontainers.image.description="kubectl on the SLE Base Container Image."
|
||||||
LABEL org.opencontainers.image.version="1.33.4"
|
LABEL org.opencontainers.image.version="1.32.4"
|
||||||
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
|
LABEL org.opencontainers.image.url="https://www.suse.com/solutions/edge-computing/"
|
||||||
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
LABEL org.opencontainers.image.created="%BUILDTIME%"
|
||||||
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
LABEL org.opencontainers.image.vendor="SUSE LLC"
|
||||||
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.33.4-%RELEASE%"
|
LABEL org.opensuse.reference="%%IMG_REPO%%/%%IMG_PREFIX%%kubectl:1.32.4-%RELEASE%"
|
||||||
LABEL org.openbuildservice.disturl="%DISTURL%"
|
LABEL org.openbuildservice.disturl="%DISTURL%"
|
||||||
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
LABEL com.suse.supportlevel="%%SUPPORT_LEVEL%%"
|
||||||
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
LABEL com.suse.eula="SUSE Combined EULA February 2024"
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
%global debug_package %{nil}
|
%global debug_package %{nil}
|
||||||
|
|
||||||
Name: kubectl
|
Name: kubectl
|
||||||
Version: 1.33.4
|
Version: 1.32.4
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Command-line utility for interacting with a Kubernetes cluster
|
Summary: Command-line utility for interacting with a Kubernetes cluster
|
||||||
|
|
||||||
|
BIN
kubectl/kubectl_1.32.4.orig.tar.gz
(Stored with Git LFS)
Normal file
BIN
kubectl/kubectl_1.32.4.orig.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
kubectl/kubectl_1.33.4.orig.tar.gz
(Stored with Git LFS)
BIN
kubectl/kubectl_1.33.4.orig.tar.gz
(Stored with Git LFS)
Binary file not shown.
@@ -1,9 +1,9 @@
|
|||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.1_up0.6.0-%RELEASE%
|
#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.0_up0.5.0-%RELEASE%
|
||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.1_up0.6.0
|
#!BuildTag: %%CHART_PREFIX%%kubevirt:%%CHART_MAJOR%%.0.0_up0.5.0
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 1.5.2
|
appVersion: 1.4.0
|
||||||
description: A Helm chart for KubeVirt
|
description: A Helm chart for KubeVirt
|
||||||
icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
|
icon: https://raw.githubusercontent.com/cncf/artwork/main/projects/kubevirt/icon/color/kubevirt-icon-color.svg
|
||||||
name: kubevirt
|
name: kubevirt
|
||||||
type: application
|
type: application
|
||||||
version: "%%CHART_MAJOR%%.0.1+up0.6.0"
|
version: "%%CHART_MAJOR%%.0.0+up0.5.0"
|
||||||
|
@@ -593,13 +593,6 @@ spec:
|
|||||||
If set to true, migrations will still start in pre-copy, but switch to post-copy when
|
If set to true, migrations will still start in pre-copy, but switch to post-copy when
|
||||||
CompletionTimeoutPerGiB triggers. Defaults to false
|
CompletionTimeoutPerGiB triggers. Defaults to false
|
||||||
type: boolean
|
type: boolean
|
||||||
allowWorkloadDisruption:
|
|
||||||
description: |-
|
|
||||||
AllowWorkloadDisruption indicates that the migration shouldn't be
|
|
||||||
canceled after acceptableCompletionTime is exceeded. Instead, if
|
|
||||||
permitted, migration will be switched to post-copy or the VMI will be
|
|
||||||
paused to allow the migration to complete
|
|
||||||
type: boolean
|
|
||||||
bandwidthPerMigration:
|
bandwidthPerMigration:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
@@ -612,8 +605,8 @@ spec:
|
|||||||
completionTimeoutPerGiB:
|
completionTimeoutPerGiB:
|
||||||
description: |-
|
description: |-
|
||||||
CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
|
CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
|
||||||
If the timeout is reached, the migration will be either paused, switched
|
If a live-migration takes longer to migrate than this value multiplied by the size of the VMI,
|
||||||
to post-copy or cancelled depending on other settings. Defaults to 150
|
the migration will be cancelled, unless AllowPostCopy is true. Defaults to 150
|
||||||
format: int64
|
format: int64
|
||||||
type: integer
|
type: integer
|
||||||
disableTLS:
|
disableTLS:
|
||||||
@@ -971,17 +964,17 @@ spec:
|
|||||||
type: object
|
type: object
|
||||||
type: object
|
type: object
|
||||||
vmRolloutStrategy:
|
vmRolloutStrategy:
|
||||||
description: |-
|
description: VMRolloutStrategy defines how changes to a VM object
|
||||||
VMRolloutStrategy defines how live-updatable fields, like CPU sockets, memory,
|
propagate to its VMI
|
||||||
tolerations, and affinity, are propagated from a VM to its VMI.
|
|
||||||
enum:
|
enum:
|
||||||
- Stage
|
- Stage
|
||||||
- LiveUpdate
|
- LiveUpdate
|
||||||
nullable: true
|
nullable: true
|
||||||
type: string
|
type: string
|
||||||
vmStateStorageClass:
|
vmStateStorageClass:
|
||||||
description: VMStateStorageClass is the name of the storage class
|
description: |-
|
||||||
to use for the PVCs created to preserve VM state, like TPM.
|
VMStateStorageClass is the name of the storage class to use for the PVCs created to preserve VM state, like TPM.
|
||||||
|
The storage class must support RWX in filesystem mode.
|
||||||
type: string
|
type: string
|
||||||
webhookConfiguration:
|
webhookConfiguration:
|
||||||
description: |-
|
description: |-
|
||||||
@@ -3857,13 +3850,6 @@ spec:
|
|||||||
If set to true, migrations will still start in pre-copy, but switch to post-copy when
|
If set to true, migrations will still start in pre-copy, but switch to post-copy when
|
||||||
CompletionTimeoutPerGiB triggers. Defaults to false
|
CompletionTimeoutPerGiB triggers. Defaults to false
|
||||||
type: boolean
|
type: boolean
|
||||||
allowWorkloadDisruption:
|
|
||||||
description: |-
|
|
||||||
AllowWorkloadDisruption indicates that the migration shouldn't be
|
|
||||||
canceled after acceptableCompletionTime is exceeded. Instead, if
|
|
||||||
permitted, migration will be switched to post-copy or the VMI will be
|
|
||||||
paused to allow the migration to complete
|
|
||||||
type: boolean
|
|
||||||
bandwidthPerMigration:
|
bandwidthPerMigration:
|
||||||
anyOf:
|
anyOf:
|
||||||
- type: integer
|
- type: integer
|
||||||
@@ -3876,8 +3862,8 @@ spec:
|
|||||||
completionTimeoutPerGiB:
|
completionTimeoutPerGiB:
|
||||||
description: |-
|
description: |-
|
||||||
CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
|
CompletionTimeoutPerGiB is the maximum number of seconds per GiB a migration is allowed to take.
|
||||||
If the timeout is reached, the migration will be either paused, switched
|
If a live-migration takes longer to migrate than this value multiplied by the size of the VMI,
|
||||||
to post-copy or cancelled depending on other settings. Defaults to 150
|
the migration will be cancelled, unless AllowPostCopy is true. Defaults to 150
|
||||||
format: int64
|
format: int64
|
||||||
type: integer
|
type: integer
|
||||||
disableTLS:
|
disableTLS:
|
||||||
@@ -4235,17 +4221,17 @@ spec:
|
|||||||
type: object
|
type: object
|
||||||
type: object
|
type: object
|
||||||
vmRolloutStrategy:
|
vmRolloutStrategy:
|
||||||
description: |-
|
description: VMRolloutStrategy defines how changes to a VM object
|
||||||
VMRolloutStrategy defines how live-updatable fields, like CPU sockets, memory,
|
propagate to its VMI
|
||||||
tolerations, and affinity, are propagated from a VM to its VMI.
|
|
||||||
enum:
|
enum:
|
||||||
- Stage
|
- Stage
|
||||||
- LiveUpdate
|
- LiveUpdate
|
||||||
nullable: true
|
nullable: true
|
||||||
type: string
|
type: string
|
||||||
vmStateStorageClass:
|
vmStateStorageClass:
|
||||||
description: VMStateStorageClass is the name of the storage class
|
description: |-
|
||||||
to use for the PVCs created to preserve VM state, like TPM.
|
VMStateStorageClass is the name of the storage class to use for the PVCs created to preserve VM state, like TPM.
|
||||||
|
The storage class must support RWX in filesystem mode.
|
||||||
type: string
|
type: string
|
||||||
webhookConfiguration:
|
webhookConfiguration:
|
||||||
description: |-
|
description: |-
|
||||||
|
@@ -608,7 +608,6 @@ rules:
|
|||||||
resources:
|
resources:
|
||||||
- virtualmachinesnapshots
|
- virtualmachinesnapshots
|
||||||
- virtualmachinesnapshots/status
|
- virtualmachinesnapshots/status
|
||||||
- virtualmachinesnapshots/finalizers
|
|
||||||
- virtualmachinesnapshotcontents
|
- virtualmachinesnapshotcontents
|
||||||
- virtualmachinesnapshotcontents/status
|
- virtualmachinesnapshotcontents/status
|
||||||
- virtualmachinesnapshotcontents/finalizers
|
- virtualmachinesnapshotcontents/finalizers
|
||||||
@@ -661,18 +660,15 @@ rules:
|
|||||||
- kubevirt.io
|
- kubevirt.io
|
||||||
resources:
|
resources:
|
||||||
- virtualmachines/finalizers
|
- virtualmachines/finalizers
|
||||||
- virtualmachineinstances/finalizers
|
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- subresources.kubevirt.io
|
- subresources.kubevirt.io
|
||||||
resources:
|
resources:
|
||||||
- virtualmachines/stop
|
|
||||||
- virtualmachineinstances/addvolume
|
- virtualmachineinstances/addvolume
|
||||||
- virtualmachineinstances/removevolume
|
- virtualmachineinstances/removevolume
|
||||||
- virtualmachineinstances/freeze
|
- virtualmachineinstances/freeze
|
||||||
- virtualmachineinstances/unfreeze
|
- virtualmachineinstances/unfreeze
|
||||||
- virtualmachineinstances/reset
|
|
||||||
- virtualmachineinstances/softreboot
|
- virtualmachineinstances/softreboot
|
||||||
- virtualmachineinstances/sev/setupsession
|
- virtualmachineinstances/sev/setupsession
|
||||||
- virtualmachineinstances/sev/injectlaunchsecret
|
- virtualmachineinstances/sev/injectlaunchsecret
|
||||||
@@ -776,14 +772,6 @@ rules:
|
|||||||
verbs:
|
verbs:
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
|
||||||
- batch
|
|
||||||
resources:
|
|
||||||
- jobs
|
|
||||||
verbs:
|
|
||||||
- create
|
|
||||||
- get
|
|
||||||
- delete
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- kubevirt.io
|
- kubevirt.io
|
||||||
resources:
|
resources:
|
||||||
@@ -895,7 +883,6 @@ rules:
|
|||||||
- virtualmachineinstances/freeze
|
- virtualmachineinstances/freeze
|
||||||
- virtualmachineinstances/unfreeze
|
- virtualmachineinstances/unfreeze
|
||||||
- virtualmachineinstances/softreboot
|
- virtualmachineinstances/softreboot
|
||||||
- virtualmachineinstances/reset
|
|
||||||
- virtualmachineinstances/sev/setupsession
|
- virtualmachineinstances/sev/setupsession
|
||||||
- virtualmachineinstances/sev/injectlaunchsecret
|
- virtualmachineinstances/sev/injectlaunchsecret
|
||||||
verbs:
|
verbs:
|
||||||
@@ -915,6 +902,7 @@ rules:
|
|||||||
- virtualmachines/restart
|
- virtualmachines/restart
|
||||||
- virtualmachines/addvolume
|
- virtualmachines/addvolume
|
||||||
- virtualmachines/removevolume
|
- virtualmachines/removevolume
|
||||||
|
- virtualmachines/migrate
|
||||||
- virtualmachines/memorydump
|
- virtualmachines/memorydump
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
@@ -931,6 +919,7 @@ rules:
|
|||||||
- virtualmachineinstances
|
- virtualmachineinstances
|
||||||
- virtualmachineinstancepresets
|
- virtualmachineinstancepresets
|
||||||
- virtualmachineinstancereplicasets
|
- virtualmachineinstancereplicasets
|
||||||
|
- virtualmachineinstancemigrations
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- delete
|
- delete
|
||||||
@@ -940,14 +929,6 @@ rules:
|
|||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
- deletecollection
|
- deletecollection
|
||||||
- apiGroups:
|
|
||||||
- kubevirt.io
|
|
||||||
resources:
|
|
||||||
- virtualmachineinstancemigrations
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
- list
|
|
||||||
- watch
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- snapshot.kubevirt.io
|
- snapshot.kubevirt.io
|
||||||
resources:
|
resources:
|
||||||
@@ -1051,7 +1032,6 @@ rules:
|
|||||||
- virtualmachineinstances/freeze
|
- virtualmachineinstances/freeze
|
||||||
- virtualmachineinstances/unfreeze
|
- virtualmachineinstances/unfreeze
|
||||||
- virtualmachineinstances/softreboot
|
- virtualmachineinstances/softreboot
|
||||||
- virtualmachineinstances/reset
|
|
||||||
- virtualmachineinstances/sev/setupsession
|
- virtualmachineinstances/sev/setupsession
|
||||||
- virtualmachineinstances/sev/injectlaunchsecret
|
- virtualmachineinstances/sev/injectlaunchsecret
|
||||||
verbs:
|
verbs:
|
||||||
@@ -1071,6 +1051,7 @@ rules:
|
|||||||
- virtualmachines/restart
|
- virtualmachines/restart
|
||||||
- virtualmachines/addvolume
|
- virtualmachines/addvolume
|
||||||
- virtualmachines/removevolume
|
- virtualmachines/removevolume
|
||||||
|
- virtualmachines/migrate
|
||||||
- virtualmachines/memorydump
|
- virtualmachines/memorydump
|
||||||
verbs:
|
verbs:
|
||||||
- update
|
- update
|
||||||
@@ -1087,6 +1068,7 @@ rules:
|
|||||||
- virtualmachineinstances
|
- virtualmachineinstances
|
||||||
- virtualmachineinstancepresets
|
- virtualmachineinstancepresets
|
||||||
- virtualmachineinstancereplicasets
|
- virtualmachineinstancereplicasets
|
||||||
|
- virtualmachineinstancemigrations
|
||||||
verbs:
|
verbs:
|
||||||
- get
|
- get
|
||||||
- delete
|
- delete
|
||||||
@@ -1095,14 +1077,6 @@ rules:
|
|||||||
- patch
|
- patch
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
|
||||||
- kubevirt.io
|
|
||||||
resources:
|
|
||||||
- virtualmachineinstancemigrations
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
- list
|
|
||||||
- watch
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- snapshot.kubevirt.io
|
- snapshot.kubevirt.io
|
||||||
resources:
|
resources:
|
||||||
@@ -1281,25 +1255,6 @@ rules:
|
|||||||
- get
|
- get
|
||||||
- list
|
- list
|
||||||
- watch
|
- watch
|
||||||
- apiGroups:
|
|
||||||
- subresources.kubevirt.io
|
|
||||||
resources:
|
|
||||||
- virtualmachines/migrate
|
|
||||||
verbs:
|
|
||||||
- update
|
|
||||||
- apiGroups:
|
|
||||||
- kubevirt.io
|
|
||||||
resources:
|
|
||||||
- virtualmachineinstancemigrations
|
|
||||||
verbs:
|
|
||||||
- get
|
|
||||||
- delete
|
|
||||||
- create
|
|
||||||
- update
|
|
||||||
- patch
|
|
||||||
- list
|
|
||||||
- watch
|
|
||||||
- deletecollection
|
|
||||||
- apiGroups:
|
- apiGroups:
|
||||||
- authentication.k8s.io
|
- authentication.k8s.io
|
||||||
resources:
|
resources:
|
||||||
@@ -1345,8 +1300,6 @@ spec:
|
|||||||
type: RollingUpdate
|
type: RollingUpdate
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
|
||||||
openshift.io/required-scc: restricted-v2
|
|
||||||
labels:
|
labels:
|
||||||
kubevirt.io: virt-operator
|
kubevirt.io: virt-operator
|
||||||
name: virt-operator
|
name: virt-operator
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
operator:
|
operator:
|
||||||
image: registry.suse.com/suse/sles/15.7/virt-operator
|
image: registry.suse.com/suse/sles/15.6/virt-operator
|
||||||
version: 1.5.2-150700.3.5.2
|
version: 1.4.0-150600.5.15.1
|
||||||
replicas: 2
|
replicas: 2
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
affinity:
|
affinity:
|
||||||
@@ -40,7 +40,7 @@ kubevirt:
|
|||||||
monitorAccount: ""
|
monitorAccount: ""
|
||||||
monitorNamespace: ""
|
monitorNamespace: ""
|
||||||
|
|
||||||
hookImage: registry.rancher.com/rancher/kubectl:v1.33.1
|
hookImage: registry.rancher.com/rancher/kubectl:v1.30.10
|
||||||
hookRestartPolicy: OnFailure
|
hookRestartPolicy: OnFailure
|
||||||
hookSecurityContext:
|
hookSecurityContext:
|
||||||
seccompProfile:
|
seccompProfile:
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.2
|
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2
|
||||||
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.3_up1.3.2-%RELEASE%
|
#!BuildTag: %%CHART_PREFIX%%kubevirt-dashboard-extension:%%CHART_MAJOR%%.0.2_up1.3.2-%RELEASE%
|
||||||
annotations:
|
annotations:
|
||||||
catalog.cattle.io/certified: rancher
|
catalog.cattle.io/certified: rancher
|
||||||
catalog.cattle.io/namespace: cattle-ui-plugin-system
|
catalog.cattle.io/namespace: cattle-ui-plugin-system
|
||||||
@@ -12,10 +12,10 @@ annotations:
|
|||||||
catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
|
catalog.cattle.io/ui-extensions-version: '>= 3.0.2 < 4.0.0'
|
||||||
catalog.cattle.io/kube-version: '>= v1.26.0-0'
|
catalog.cattle.io/kube-version: '>= v1.26.0-0'
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 304.0.3+up1.3.2
|
appVersion: 303.0.2+up1.3.2
|
||||||
description: 'SUSE Edge: KubeVirt extension for Rancher Dashboard'
|
description: 'SUSE Edge: KubeVirt extension for Rancher Dashboard'
|
||||||
name: kubevirt-dashboard-extension
|
name: kubevirt-dashboard-extension
|
||||||
type: application
|
type: application
|
||||||
version: "%%CHART_MAJOR%%.0.3+up1.3.2"
|
version: "%%CHART_MAJOR%%.0.2+up1.3.2"
|
||||||
icon: >-
|
icon: >-
|
||||||
https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevirt/icon/color/kubevirt-icon-color.svg
|
https://raw.githubusercontent.com/cncf/artwork/master/projects/kubevirt/icon/color/kubevirt-icon-color.svg
|
||||||
|
@@ -8,7 +8,7 @@ spec:
|
|||||||
plugin:
|
plugin:
|
||||||
name: {{ include "extension-server.fullname" . }}
|
name: {{ include "extension-server.fullname" . }}
|
||||||
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
|
version: {{ (semver (default .Chart.AppVersion .Values.plugin.versionOverride)).Original }}
|
||||||
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/kubevirt-dashboard-extension/304.0.3+up1.3.2
|
endpoint: https://raw.githubusercontent.com/suse-edge/dashboard-extensions/gh-pages/extensions/kubevirt-dashboard-extension/303.0.2+up1.3.2
|
||||||
noCache: {{ .Values.plugin.noCache }}
|
noCache: {{ .Values.plugin.noCache }}
|
||||||
noAuth: {{ .Values.plugin.noAuth }}
|
noAuth: {{ .Values.plugin.noAuth }}
|
||||||
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
|
metadata: {{ include "extension-server.pluginMetadata" . | indent 6 }}
|
||||||
|
@@ -1,28 +1,28 @@
|
|||||||
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.15_up0.12.5
|
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.9_up0.11.7
|
||||||
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.15_up0.12.5-%RELEASE%
|
#!BuildTag: %%CHART_PREFIX%%metal3:%%CHART_MAJOR%%.0.9_up0.11.7-%RELEASE%
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 0.12.5
|
appVersion: 0.11.7
|
||||||
dependencies:
|
dependencies:
|
||||||
- alias: metal3-baremetal-operator
|
- alias: metal3-baremetal-operator
|
||||||
name: baremetal-operator
|
name: baremetal-operator
|
||||||
repository: file://./charts/baremetal-operator
|
repository: file://./charts/baremetal-operator
|
||||||
version: 0.10.4
|
version: 0.9.2
|
||||||
- alias: metal3-ironic
|
- alias: metal3-ironic
|
||||||
name: ironic
|
name: ironic
|
||||||
repository: file://./charts/ironic
|
repository: file://./charts/ironic
|
||||||
version: 0.11.3
|
version: 0.11.0
|
||||||
- alias: metal3-mariadb
|
- alias: metal3-mariadb
|
||||||
condition: global.enable_mariadb
|
condition: global.enable_mariadb
|
||||||
name: mariadb
|
name: mariadb
|
||||||
repository: file://./charts/mariadb
|
repository: file://./charts/mariadb
|
||||||
version: 0.6.1
|
version: 0.6.0
|
||||||
- alias: metal3-media
|
- alias: metal3-media
|
||||||
condition: global.enable_metal3_media_server
|
condition: global.enable_metal3_media_server
|
||||||
name: media
|
name: media
|
||||||
repository: file://./charts/media
|
repository: file://./charts/media
|
||||||
version: 0.6.6
|
version: 0.6.3
|
||||||
description: A Helm chart that installs all of the dependencies needed for Metal3
|
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
|
icon: https://github.com/cncf/artwork/raw/master/projects/metal3/icon/color/metal3-icon-color.svg
|
||||||
name: metal3
|
name: metal3
|
||||||
type: application
|
type: application
|
||||||
version: "%%CHART_MAJOR%%.0.15+up0.12.5"
|
version: "%%CHART_MAJOR%%.0.9+up0.11.7"
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 0.10.2
|
appVersion: 0.9.1
|
||||||
description: A Helm chart for baremetal-operator, used by Metal3
|
description: A Helm chart for baremetal-operator, used by Metal3
|
||||||
name: baremetal-operator
|
name: baremetal-operator
|
||||||
type: application
|
type: application
|
||||||
version: 0.10.4
|
version: 0.9.2
|
||||||
|
@@ -202,11 +202,6 @@ spec:
|
|||||||
description: Description is a human-entered text used to help identify
|
description: Description is a human-entered text used to help identify
|
||||||
the host.
|
the host.
|
||||||
type: string
|
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:
|
externallyProvisioned:
|
||||||
description: |-
|
description: |-
|
||||||
ExternallyProvisioned means something else has provisioned the
|
ExternallyProvisioned means something else has provisioned the
|
||||||
|
@@ -61,19 +61,3 @@ Create the name of the service account to use
|
|||||||
{{- default "default" .Values.serviceAccount.name }}
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create the URL to use for connecting to the Ironic servers (e.g. API, cache)
|
|
||||||
*/}}
|
|
||||||
{{- define "baremetal-operator.ironicHttpHost" -}}
|
|
||||||
{{- $hostIP := include "metal3.hostIP" . -}}
|
|
||||||
{{- with .Values.global }}
|
|
||||||
{{- if .provisioningHostname }}
|
|
||||||
{{- .provisioningHostname }}
|
|
||||||
{{- else if regexMatch ".*:.*" $hostIP}}
|
|
||||||
{{- print "[" $hostIP "]" }}
|
|
||||||
{{- else }}
|
|
||||||
{{- $hostIP }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
@@ -1,18 +1,19 @@
|
|||||||
{{- $enableTLS := .Values.global.enable_tls }}
|
{{- $enableTLS := .Values.global.enable_tls }}
|
||||||
{{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
|
{{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
|
||||||
{{- $protocol := ternary "https" "http" $enableTLS }}
|
{{- $protocol := ternary "https" "http" $enableTLS }}
|
||||||
{{- $ironicHost := include "baremetal-operator.ironicHttpHost" . | required "Missing host information for BMO to connect to Ironic" }}
|
{{- $ironicIP := .Values.global.ironicIP | default "" }}
|
||||||
{{- $ironicApiHost := print $ironicHost ":6385" }}
|
{{- $ironicApiHost := print $ironicIP ":6385" }}
|
||||||
{{- $ironicBootHost := print $ironicHost ":6180" }}
|
{{- $ironicBootHost := print $ironicIP ":6180" }}
|
||||||
{{- $ironicCacheHost := print $ironicHost ":6180" }}
|
{{- $ironicCacheHost := print $ironicIP ":6180" }}
|
||||||
|
{{- $deployArch := .Values.global.deployArchitecture }}
|
||||||
|
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
data:
|
data:
|
||||||
IRONIC_ENDPOINT: "{{ $protocol }}://{{ $ironicApiHost }}/v1/"
|
IRONIC_ENDPOINT: "{{ $protocol }}://{{ $ironicApiHost }}/v1/"
|
||||||
# Switch VMedia to HTTP if enable_vmedia_tls is false
|
# Switch VMedia to HTTP if enable_vmedia_tls is false
|
||||||
{{- if and $enableTLS $enableVMediaTLS }}
|
{{- if and $enableTLS $enableVMediaTLS }}
|
||||||
{{- $ironicBootHost = print $ironicHost ":" .Values.global.vmediaTLSPort }}
|
{{- $ironicBootHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
|
||||||
{{- $ironicCacheHost = print $ironicHost ":" .Values.global.vmediaTLSPort }}
|
{{- $ironicCacheHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
|
||||||
{{- $protocol = "https" }}
|
{{- $protocol = "https" }}
|
||||||
RESTART_CONTAINER_CERTIFICATE_UPDATED: "true"
|
RESTART_CONTAINER_CERTIFICATE_UPDATED: "true"
|
||||||
{{- else }}
|
{{- else }}
|
||||||
@@ -20,10 +21,9 @@ data:
|
|||||||
RESTART_CONTAINER_CERTIFICATE_UPDATED: "false"
|
RESTART_CONTAINER_CERTIFICATE_UPDATED: "false"
|
||||||
{{- end }}
|
{{- end }}
|
||||||
CACHEURL: "{{ $protocol }}://{{ $ironicCacheHost }}/images"
|
CACHEURL: "{{ $protocol }}://{{ $ironicCacheHost }}/images"
|
||||||
{{- if .Values.baremetaloperator.externalHttpIPv6 }}
|
DEPLOY_KERNEL_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.kernel"
|
||||||
{{- $port := ternary .Values.global.vmediaTLSPort .Values.baremetaloperator.httpPort $enableVMediaTLS }}
|
DEPLOY_RAMDISK_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.initramfs"
|
||||||
IRONIC_EXTERNAL_URL_V6: "{{ $protocol }}://[{{ .Values.baremetaloperator.externalHttpIPv6 }}]:{{ $port }}"
|
DEPLOY_ARCHITECTURE: "{{ $deployArch }}"
|
||||||
{{- end }}
|
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
metadata:
|
metadata:
|
||||||
name: baremetal-operator-ironic
|
name: baremetal-operator-ironic
|
||||||
|
@@ -6,7 +6,6 @@ metadata:
|
|||||||
control-plane: controller-manager
|
control-plane: controller-manager
|
||||||
name: {{ include "baremetal-operator.fullname" . }}-controller-manager-metrics-service
|
name: {{ include "baremetal-operator.fullname" . }}-controller-manager-metrics-service
|
||||||
spec:
|
spec:
|
||||||
ipFamilyPolicy: PreferDualStack
|
|
||||||
ports:
|
ports:
|
||||||
- name: https
|
- name: https
|
||||||
port: 8443
|
port: 8443
|
||||||
|
@@ -5,7 +5,6 @@ metadata:
|
|||||||
{{- include "baremetal-operator.labels" . | nindent 4 }}
|
{{- include "baremetal-operator.labels" . | nindent 4 }}
|
||||||
name: {{ include "baremetal-operator.fullname" . }}-webhook-service
|
name: {{ include "baremetal-operator.fullname" . }}-webhook-service
|
||||||
spec:
|
spec:
|
||||||
ipFamilyPolicy: PreferDualStack
|
|
||||||
ports:
|
ports:
|
||||||
- port: 443
|
- port: 443
|
||||||
targetPort: 9443
|
targetPort: 9443
|
||||||
|
@@ -28,7 +28,7 @@ images:
|
|||||||
baremetalOperator:
|
baremetalOperator:
|
||||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/baremetal-operator
|
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/baremetal-operator
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
tag: "0.10.2.1"
|
tag: "0.9.1.1"
|
||||||
|
|
||||||
imagePullSecrets: []
|
imagePullSecrets: []
|
||||||
nameOverride: "manger"
|
nameOverride: "manger"
|
||||||
@@ -84,8 +84,3 @@ affinity: {}
|
|||||||
|
|
||||||
baremetaloperator:
|
baremetaloperator:
|
||||||
httpPort: "6180"
|
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: ""
|
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 29.0.4
|
appVersion: 26.1.2
|
||||||
description: A Helm chart for Ironic, used by Metal3
|
description: A Helm chart for Ironic, used by Metal3
|
||||||
name: ironic
|
name: ironic
|
||||||
type: application
|
type: application
|
||||||
version: 0.11.3
|
version: 0.11.0
|
||||||
|
@@ -83,50 +83,3 @@ Get ironic CA volumeMounts
|
|||||||
readOnly: true
|
readOnly: true
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{/*
|
|
||||||
Get the formatted "External" hostname or IP based URL
|
|
||||||
*/}}
|
|
||||||
{{- define "ironic.externalHttpUrl" }}
|
|
||||||
{{- $host := ternary (include "metal3.hostIP" .) .Values.global.externalHttpHost (empty .Values.global.externalHttpHost) }}
|
|
||||||
{{- if regexMatch ".*:.*" $host }}
|
|
||||||
{{- $host = print "[" $host "]" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- $protocol := "http" }}
|
|
||||||
{{- $port := "6180" }}
|
|
||||||
{{- if .Values.global.enable_vmedia_tls }}
|
|
||||||
{{- $protocol = "https" }}
|
|
||||||
{{- $port = .Values.global.vmediaTLSPort | default "6185" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- print $protocol "://" $host ":" $port }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Get the command to use for Liveness and Readiness probes
|
|
||||||
*/}}
|
|
||||||
{{- define "ironic.probeCommand" }}
|
|
||||||
{{- $host := "127.0.0.1" }}
|
|
||||||
{{- if eq .Values.listenOnAll false }}
|
|
||||||
{{- $host = coalesce .Values.global.provisioningIP .Values.global.ironicIP .Values.global.provisioningHostname }}
|
|
||||||
{{- if regexMatch ".*:.*" $host }}
|
|
||||||
{{- $host = print "[" $host "]" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- print "curl -sSfk https://" $host ":6385" }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create the subjectAltNames section to be set on the Certificate
|
|
||||||
*/}}
|
|
||||||
{{- define "ironic.subjectAltNames" -}}
|
|
||||||
{{- with .Values.global }}
|
|
||||||
{{- if .provisioningHostname }}
|
|
||||||
dnsNames:
|
|
||||||
- {{ .provisioningHostname }}
|
|
||||||
{{- end -}}
|
|
||||||
{{- if or .ironicIP .provisioningIP }}
|
|
||||||
ipAddresses:
|
|
||||||
- {{ coalesce .provisioningIP .ironicIP }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
@@ -6,7 +6,8 @@ metadata:
|
|||||||
spec:
|
spec:
|
||||||
commonName: ironic-ca
|
commonName: ironic-ca
|
||||||
isCA: true
|
isCA: true
|
||||||
{{- include "ironic.subjectAltNames" . | indent 2 }}
|
ipAddresses:
|
||||||
|
- {{ .Values.global.ironicIP }}
|
||||||
issuerRef:
|
issuerRef:
|
||||||
kind: Issuer
|
kind: Issuer
|
||||||
name: selfsigned-issuer
|
name: selfsigned-issuer
|
||||||
@@ -18,7 +19,8 @@ metadata:
|
|||||||
name: ironic-cert
|
name: ironic-cert
|
||||||
spec:
|
spec:
|
||||||
commonName: ironic-cert
|
commonName: ironic-cert
|
||||||
{{- include "ironic.subjectAltNames" . | indent 2 }}
|
ipAddresses:
|
||||||
|
- {{ .Values.global.ironicIP }}
|
||||||
issuerRef:
|
issuerRef:
|
||||||
kind: Issuer
|
kind: Issuer
|
||||||
name: ca-issuer
|
name: ca-issuer
|
||||||
@@ -31,7 +33,8 @@ metadata:
|
|||||||
name: ironic-vmedia-cert
|
name: ironic-vmedia-cert
|
||||||
spec:
|
spec:
|
||||||
commonName: ironic-vmedia-cert
|
commonName: ironic-vmedia-cert
|
||||||
{{- include "ironic.subjectAltNames" . | indent 2 }}
|
ipAddresses:
|
||||||
|
- {{ .Values.global.ironicIP }}
|
||||||
issuerRef:
|
issuerRef:
|
||||||
kind: Issuer
|
kind: Issuer
|
||||||
name: ca-issuer
|
name: ca-issuer
|
||||||
|
@@ -5,7 +5,16 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
{{- include "ironic.labels" . | nindent 4 }}
|
{{- include "ironic.labels" . | nindent 4 }}
|
||||||
data:
|
data:
|
||||||
|
{{- $enableTLS := .Values.global.enable_tls }}
|
||||||
|
{{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
|
||||||
|
{{- $protocol := ternary "https" "http" $enableTLS }}
|
||||||
|
{{- $ironicIP := .Values.global.ironicIP | default "" }}
|
||||||
|
{{- $ironicBootHost := print $ironicIP ":6180" }}
|
||||||
|
{{- $ironicCacheHost := print $ironicIP ":6180" }}
|
||||||
|
{{- $deployArch := .Values.global.deployArchitecture }}
|
||||||
|
|
||||||
{{- if ( .Values.global.enable_dnsmasq ) }}
|
{{- if ( .Values.global.enable_dnsmasq ) }}
|
||||||
|
DNSMASQ_BOOT_SERVER_ADDRESS: {{ $ironicBootHost }}
|
||||||
DNSMASQ_DNS_SERVER_ADDRESS: {{ .Values.global.dnsmasqDNSServer }}
|
DNSMASQ_DNS_SERVER_ADDRESS: {{ .Values.global.dnsmasqDNSServer }}
|
||||||
DNSMASQ_DEFAULT_ROUTER: {{ .Values.global.dnsmasqDefaultRouter }}
|
DNSMASQ_DEFAULT_ROUTER: {{ .Values.global.dnsmasqDefaultRouter }}
|
||||||
DHCP_RANGE: {{ .Values.global.dhcpRange }}
|
DHCP_RANGE: {{ .Values.global.dhcpRange }}
|
||||||
@@ -15,20 +24,29 @@ data:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
HTTP_PORT: "6180"
|
HTTP_PORT: "6180"
|
||||||
PREDICTABLE_NIC_NAMES: "{{ .Values.global.predictableNicNames }}"
|
PREDICTABLE_NIC_NAMES: "{{ .Values.global.predictableNicNames }}"
|
||||||
IRONIC_EXTERNAL_HTTP_URL: {{ include "ironic.externalHttpUrl" . }}
|
# Switch VMedia to HTTP if enable_vmedia_tls is false
|
||||||
|
{{- if and $enableTLS $enableVMediaTLS }}
|
||||||
|
{{- $ironicBootHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
|
||||||
|
{{- $ironicCacheHost = print $ironicIP ":" .Values.global.vmediaTLSPort }}
|
||||||
|
{{- $protocol = "https" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $protocol = "http" }}
|
||||||
|
{{- end }}
|
||||||
|
IRONIC_EXTERNAL_HTTP_URL: {{ $protocol }}://{{ $ironicCacheHost }}
|
||||||
|
DEPLOY_ARCHITECTURE: {{ $deployArch }}
|
||||||
|
IRONIC_BOOT_BASE_URL: {{ $protocol }}://{{ $ironicBootHost }}
|
||||||
ENABLE_PXE_BOOT: "{{ .Values.global.enable_pxe_boot }}"
|
ENABLE_PXE_BOOT: "{{ .Values.global.enable_pxe_boot }}"
|
||||||
{{- if .Values.global.provisioningInterface }}
|
{{- if .Values.global.provisioningInterface }}
|
||||||
PROVISIONING_INTERFACE: {{ .Values.global.provisioningInterface }}
|
PROVISIONING_INTERFACE: {{ .Values.global.provisioningInterface }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- if .Values.global.provisioningIP }}
|
{{- if .Values.global.provisioningIP }}
|
||||||
PROVISIONING_IP: {{ include "metal3.hostIP" . }}
|
PROVISIONING_IP: {{ .Values.global.provisioningIP }}
|
||||||
{{- else if .Values.global.ironicIP }}
|
|
||||||
IRONIC_IP: {{ include "metal3.hostIP" . }}
|
|
||||||
{{- else if .Values.global.provisioningHostname }}
|
|
||||||
IRONIC_URL_HOSTNAME: {{ .Values.global.provisioningHostname }}
|
|
||||||
{{- end }}
|
{{- end }}
|
||||||
IRONIC_FAST_TRACK: "true"
|
IRONIC_FAST_TRACK: "true"
|
||||||
LISTEN_ALL_INTERFACES: "{{ .Values.listenOnAll }}"
|
LISTEN_ALL_INTERFACES: "true"
|
||||||
|
{{- if .Values.global.ironicIP }}
|
||||||
|
IRONIC_IP: {{ .Values.global.ironicIP }}
|
||||||
|
{{- end }}
|
||||||
{{- if ( .Values.global.enable_tls ) }}
|
{{- if ( .Values.global.enable_tls ) }}
|
||||||
RESTART_CONTAINER_CERTIFICATE_UPDATED: "true"
|
RESTART_CONTAINER_CERTIFICATE_UPDATED: "true"
|
||||||
IRONIC_KERNEL_PARAMS: {{ .Values.global.ironicKernelParams }} tls.enabled=true
|
IRONIC_KERNEL_PARAMS: {{ .Values.global.ironicKernelParams }} tls.enabled=true
|
||||||
|
@@ -42,7 +42,7 @@ spec:
|
|||||||
name: ironic
|
name: ironic
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
exec:
|
exec:
|
||||||
command: ["sh", "-c", "{{ include "ironic.probeCommand" . }}"]
|
command: ["sh", "-c", "curl -sSfk https://127.0.0.1:6385"]
|
||||||
failureThreshold: 10
|
failureThreshold: 10
|
||||||
initialDelaySeconds: 30
|
initialDelaySeconds: 30
|
||||||
periodSeconds: 30
|
periodSeconds: 30
|
||||||
@@ -60,7 +60,7 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
exec:
|
exec:
|
||||||
command: ["sh", "-c", "{{ include "ironic.probeCommand" . }}"]
|
command: ["sh", "-c", "curl -sSfk https://127.0.0.1:6385"]
|
||||||
failureThreshold: 10
|
failureThreshold: 10
|
||||||
initialDelaySeconds: 30
|
initialDelaySeconds: 30
|
||||||
periodSeconds: 30
|
periodSeconds: 30
|
||||||
|
@@ -10,7 +10,6 @@ metadata:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
spec:
|
spec:
|
||||||
type: {{ .Values.service.type }}
|
type: {{ .Values.service.type }}
|
||||||
ipFamilyPolicy: PreferDualStack
|
|
||||||
ports:
|
ports:
|
||||||
{{- $enableTLS := .Values.global.enable_tls }}
|
{{- $enableTLS := .Values.global.enable_tls }}
|
||||||
{{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
|
{{- $enableVMediaTLS := .Values.global.enable_vmedia_tls }}
|
||||||
|
@@ -32,12 +32,6 @@ global:
|
|||||||
# IP Address assigned to network interface on provisioning network
|
# IP Address assigned to network interface on provisioning network
|
||||||
provisioningIP: ""
|
provisioningIP: ""
|
||||||
|
|
||||||
# Fully Qualified Domain Name used by Ironic for both binding (to the
|
|
||||||
# associated IPv4 and/or IPv6 addresses) and exposing the API, dnsmask and
|
|
||||||
# media, also used by BMO. Note, this is the only way to enable a fully
|
|
||||||
# working dual-stack configuration.
|
|
||||||
provisioningHostname: ""
|
|
||||||
|
|
||||||
# Whether the NIC names should be predictable or not
|
# Whether the NIC names should be predictable or not
|
||||||
predictableNicNames: "true"
|
predictableNicNames: "true"
|
||||||
|
|
||||||
@@ -58,17 +52,15 @@ global:
|
|||||||
|
|
||||||
replicaCount: 1
|
replicaCount: 1
|
||||||
|
|
||||||
listenOnAll: true
|
|
||||||
|
|
||||||
images:
|
images:
|
||||||
ironic:
|
ironic:
|
||||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
|
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
tag: 29.0.4.2
|
tag: 26.1.2.5
|
||||||
ironicIPADownloader:
|
ironicIPADownloader:
|
||||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader
|
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
tag: 3.0.9
|
tag: 3.0.8
|
||||||
|
|
||||||
nameOverride: ""
|
nameOverride: ""
|
||||||
fullnameOverride: ""
|
fullnameOverride: ""
|
||||||
|
@@ -3,4 +3,4 @@ appVersion: "10.11"
|
|||||||
description: A Helm chart for MariaDB, used by Metal3
|
description: A Helm chart for MariaDB, used by Metal3
|
||||||
name: mariadb
|
name: mariadb
|
||||||
type: application
|
type: application
|
||||||
version: 0.6.1
|
version: 0.6.0
|
||||||
|
@@ -5,11 +5,10 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
{{- include "mariadb.labels" . | nindent 4 }}
|
{{- include "mariadb.labels" . | nindent 4 }}
|
||||||
spec:
|
spec:
|
||||||
ipFamilyPolicy: PreferDualStack
|
|
||||||
type: {{ .Values.service.type }}
|
type: {{ .Values.service.type }}
|
||||||
selector:
|
selector:
|
||||||
{{- include "mariadb.selectorLabels" . | nindent 4 }}
|
{{- include "mariadb.selectorLabels" . | nindent 4 }}
|
||||||
ports:
|
ports:
|
||||||
{{- with .Values.service.ports }}
|
{{- with .Values.service.ports }}
|
||||||
{{- toYaml . | nindent 2 }}
|
{{- toYaml . | nindent 2 }}
|
||||||
{{- end }}
|
{{- end }}
|
@@ -3,4 +3,4 @@ appVersion: 1.16.0
|
|||||||
description: A Helm chart for Media, used by Metal3
|
description: A Helm chart for Media, used by Metal3
|
||||||
name: media
|
name: media
|
||||||
type: application
|
type: application
|
||||||
version: 0.6.6
|
version: 0.6.3
|
||||||
|
@@ -5,7 +5,6 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
{{- include "media.labels" . | nindent 4 }}
|
{{- include "media.labels" . | nindent 4 }}
|
||||||
spec:
|
spec:
|
||||||
ipFamilyPolicy: PreferDualStack
|
|
||||||
type: {{ .Values.service.type }}
|
type: {{ .Values.service.type }}
|
||||||
ports:
|
ports:
|
||||||
- port: {{ .Values.service.port }}
|
- port: {{ .Values.service.port }}
|
||||||
|
@@ -24,7 +24,7 @@ replicaCount: 1
|
|||||||
image:
|
image:
|
||||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
|
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
tag: 29.0.4.2
|
tag: 26.1.2.5
|
||||||
|
|
||||||
imagePullSecrets: []
|
imagePullSecrets: []
|
||||||
nameOverride: ""
|
nameOverride: ""
|
||||||
|
@@ -60,18 +60,3 @@ Create the name of the service account to use
|
|||||||
{{- default "default" .Values.serviceAccount.name }}
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{/*
|
|
||||||
Produce the correct IP or hostname for Ironic provisioning
|
|
||||||
*/}}
|
|
||||||
{{- define "metal3.hostIP" -}}
|
|
||||||
{{- with .Values.global }}
|
|
||||||
{{- if and .provisioningHostname (or .provisioningIP .ironicIP) }}
|
|
||||||
{{ fail "Please provide either provisioningHostname or provisioningIP or ironicIP" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- if and .provisioningIP .ironicIP }}
|
|
||||||
{{ fail "Please provide either ironicIP or provisioningIP" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- coalesce .provisioningIP .ironicIP }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
@@ -60,18 +60,12 @@ global:
|
|||||||
# IP Address assigned to network interface on provisioning network
|
# IP Address assigned to network interface on provisioning network
|
||||||
provisioningIP: ""
|
provisioningIP: ""
|
||||||
|
|
||||||
# Fully Qualified Domain Name used by Ironic for both binding (to the
|
|
||||||
# associated IPv4 and/or IPv6 addresses) and exposing the API, dnsmask and
|
|
||||||
# media, also used by BMO. Note, this is the only way to enable a fully
|
|
||||||
# working dual-stack configuration.
|
|
||||||
provisioningHostname: ""
|
|
||||||
|
|
||||||
# Hostname or IP for accessing the Ironic API server from a non-provisioning network
|
|
||||||
externalHttpHost: ""
|
|
||||||
|
|
||||||
# Name for the MariaDB service
|
# Name for the MariaDB service
|
||||||
databaseServiceName: metal3-mariadb
|
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
|
# In a multi-node cluster use the node selector to ensure the pods
|
||||||
# all run on the same host where the dnsmasqDNSServer and provisioningIP
|
# all run on the same host where the dnsmasqDNSServer and provisioningIP
|
||||||
# and /opt/media exist. Uncomment the nodeSelector and update the
|
# and /opt/media exist. Uncomment the nodeSelector and update the
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%
|
#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%
|
||||||
#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%metallb-controller:v%%metallb-controller_version%%-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
# SPDX-License-Identifier: Apache-2.0
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
#!BuildTag: %%IMG_PREFIX%%metallb-speaker:v%%metallb-speaker_version%%
|
#!BuildTag: %%IMG_PREFIX%%metallb-speaker:v%%metallb-speaker_version%%
|
||||||
#!BuildTag: %%IMG_PREFIX%%metallb-speaker:v%%metallb-speaker_version%%-%RELEASE%
|
#!BuildTag: %%IMG_PREFIX%%metallb-speaker:v%%metallb-speaker_version%%-%RELEASE%
|
||||||
|
#!BuildVersion: 15.6
|
||||||
ARG SLE_VERSION
|
ARG SLE_VERSION
|
||||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||||
|
|
||||||
|
@@ -1,31 +0,0 @@
|
|||||||
# 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"]
|
|
@@ -1,19 +0,0 @@
|
|||||||
<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>
|
|
@@ -1,26 +0,0 @@
|
|||||||
<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>
|
|
@@ -1,80 +0,0 @@
|
|||||||
#
|
|
||||||
# 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
|
|
Submodule python-annotated-types deleted from ffc9e3fb44
Submodule python-executing deleted from ac466db0b5
Submodule python-flit-core deleted from 4362b05ea3
Submodule python-inline-snapshot deleted from 1e917444d7
Submodule python-pydantic deleted from f19a5a780f
Submodule python-pydantic-core deleted from 00355d0825
@@ -1,39 +0,0 @@
|
|||||||
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."
|
|
||||||
)
|
|
@@ -1,3 +0,0 @@
|
|||||||
<services>
|
|
||||||
<service name="download_assets"></service>
|
|
||||||
</services>
|
|
@@ -1,58 +0,0 @@
|
|||||||
#
|
|
||||||
# spec file for package python-pyhelm3
|
|
||||||
#
|
|
||||||
# Copyright (c) 2025 SUSE LLC
|
|
||||||
#
|
|
||||||
# All modifications and additions to the file contributed by third parties
|
|
||||||
# remain the property of their copyright owners, unless otherwise agreed
|
|
||||||
# upon. The license for this file, and modifications and additions to the
|
|
||||||
# file, is the same license as for the pristine package itself (unless the
|
|
||||||
# license for the pristine package is not an Open Source License, in which
|
|
||||||
# case the license is the MIT License). An "Open Source License" is a
|
|
||||||
# license that conforms to the Open Source Definition (Version 1.9)
|
|
||||||
# published by the Open Source Initiative.
|
|
||||||
|
|
||||||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
|
||||||
|
|
||||||
Name: python-pyhelm3
|
|
||||||
Version: 0.4.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}
|
|
||||||
BuildRequires: %{python_module setuptools_scm >= 3.4}
|
|
||||||
BuildRequires: %{python_module wheel}
|
|
||||||
BuildRequires: fdupes
|
|
||||||
Requires: %{python_module pydantic}
|
|
||||||
Requires: %{python_module PyYAML}
|
|
||||||
BuildArch: noarch
|
|
||||||
%python_subpackages
|
|
||||||
|
|
||||||
%description
|
|
||||||
Python library for managing Helm releases using Helm 3.
|
|
||||||
|
|
||||||
%prep
|
|
||||||
%autosetup -p1 -n pyhelm3-%{version}
|
|
||||||
|
|
||||||
%build
|
|
||||||
%pyproject_wheel
|
|
||||||
|
|
||||||
%install
|
|
||||||
%pyproject_install
|
|
||||||
%python_expand %fdupes %{buildroot}%{$python_sitelib}
|
|
||||||
|
|
||||||
%files %{python_files}
|
|
||||||
%doc README.md
|
|
||||||
%license LICENSE
|
|
||||||
%{python_sitelib}/pyhelm3
|
|
||||||
%{python_sitelib}/pyhelm3-%{version}.dist-info
|
|
||||||
|
|
||||||
%changelog
|
|
@@ -1,3 +0,0 @@
|
|||||||
<services>
|
|
||||||
<service name="download_assets"></service>
|
|
||||||
</services>
|
|
@@ -1,45 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@@ -1,66 +0,0 @@
|
|||||||
#
|
|
||||||
# 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
|
|
@@ -1,3 +0,0 @@
|
|||||||
<services>
|
|
||||||
<service name="download_assets"></service>
|
|
||||||
</services>
|
|
@@ -1,98 +0,0 @@
|
|||||||
#
|
|
||||||
# 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.1.1
|
|
||||||
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 json 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/*.json %{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 json files
|
|
||||||
/usr/share/suse-edge-components-versions/
|
|
||||||
|
|
||||||
%changelog
|
|
Submodule python-typing-inspection deleted from 9400618fae
Submodule python-typing_extensions deleted from 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.4_up0.20.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.4_up0.20.0-%RELEASE%
|
||||||
apiVersion: v2
|
apiVersion: v2
|
||||||
appVersion: 0.21.0
|
appVersion: 0.20.0
|
||||||
description: Rancher Turtles utility chart for airgap scenarios
|
description: Rancher Turtles utility chart for airgap scenarios
|
||||||
home: https://github.com/rancher/turtles/
|
home: https://github.com/rancher/turtles/
|
||||||
icon: https://raw.githubusercontent.com/rancher/turtles/main/logos/capi.svg
|
icon: https://raw.githubusercontent.com/rancher/turtles/main/logos/capi.svg
|
||||||
name: rancher-turtles-airgap-resources
|
name: rancher-turtles-airgap-resources
|
||||||
type: application
|
type: application
|
||||||
version: "%%CHART_MAJOR%%.0.5+up0.21.0"
|
version: "%%CHART_MAJOR%%.0.4+up0.20.0"
|
||||||
|
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user