forked from suse-edge/Factory
Compare commits
10 Commits
bmo-arch
...
remove-dup
Author | SHA256 | Date | |
---|---|---|---|
df55d2abd4 | |||
214a65f2db | |||
d00b6ece5f
|
|||
67f63aadc7
|
|||
f88e75a724
|
|||
ef6989b0d8
|
|||
b2ca623d14
|
|||
53c16ce7c9
|
|||
e55bf1ab63 | |||
4f71473b0a
|
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.0
|
||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.0-%RELEASE%
|
||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1
|
||||
#!BuildTag: %%IMG_PREFIX%%baremetal-operator:%%baremetal-operator_version%%.1-%RELEASE%
|
||||
#!BuildVersion: 15.6
|
||||
ARG SLE_VERSION
|
||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||
|
@@ -1,529 +0,0 @@
|
||||
From 19cbf4febbf042248266188e3629e0c88e06906a Mon Sep 17 00:00:00 2001
|
||||
From: Nicolas Belouin <nicolas.belouin@suse.com>
|
||||
Date: Thu, 26 Jun 2025 09:37:19 +0200
|
||||
Subject: [PATCH] Allow configuring different IPA images per architecture
|
||||
|
||||
When using multiple architectures, having a way to set the Ironic
|
||||
"bootloader" (a.k.a EFI partition) accordingly is important, so this
|
||||
commit adds a new `DEPLOY_BOOTLOADER_URL` variable to set this Ironic
|
||||
option.
|
||||
|
||||
This commit adds a set of new environment variables allowing to specify
|
||||
different URLs per target CPU architecture for the IPA image:
|
||||
- `DEPLOY_KERNEL_URL_<ARCH>`
|
||||
- `DEPLOY_RAMDISK_URL_<ARCH>`
|
||||
- `DEPLOY_ISO_URL_<ARCH>`
|
||||
- `DEPLOY_BOOTLOADER_URL_<ARCH>`
|
||||
|
||||
Non suffixed variables are used as defaults, if there is no architecture
|
||||
specific image(s) defined for the BMH CPU architecture.
|
||||
|
||||
Signed-off-by: Nicolas Belouin <nicolas.belouin@suse.com>
|
||||
---
|
||||
.../metal3.io/baremetalhost_controller.go | 1 +
|
||||
pkg/imageprovider/imageprovider.go | 1 +
|
||||
pkg/provisioner/ironic/factory.go | 61 ++++++++++----
|
||||
pkg/provisioner/ironic/factory_test.go | 25 ++++--
|
||||
pkg/provisioner/ironic/ironic.go | 46 ++++++++---
|
||||
pkg/provisioner/ironic/ironic_test.go | 10 ++-
|
||||
pkg/provisioner/ironic/register_test.go | 80 ++++++++++++-------
|
||||
pkg/provisioner/provisioner.go | 1 +
|
||||
8 files changed, 160 insertions(+), 65 deletions(-)
|
||||
|
||||
diff --git a/internal/controller/metal3.io/baremetalhost_controller.go b/internal/controller/metal3.io/baremetalhost_controller.go
|
||||
index d04bb618..a4ea9d19 100644
|
||||
--- a/internal/controller/metal3.io/baremetalhost_controller.go
|
||||
+++ b/internal/controller/metal3.io/baremetalhost_controller.go
|
||||
@@ -847,6 +847,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)
|
||||
diff --git a/pkg/imageprovider/imageprovider.go b/pkg/imageprovider/imageprovider.go
|
||||
index 459fdf2d..f307c041 100644
|
||||
--- a/pkg/imageprovider/imageprovider.go
|
||||
+++ b/pkg/imageprovider/imageprovider.go
|
||||
@@ -20,6 +20,7 @@ type ImageData struct {
|
||||
type GeneratedImage struct {
|
||||
ImageURL string
|
||||
KernelURL string
|
||||
+ BootloaderURL string
|
||||
ExtraKernelParams string
|
||||
}
|
||||
|
||||
diff --git a/pkg/provisioner/ironic/factory.go b/pkg/provisioner/ironic/factory.go
|
||||
index 95cc21b4..5f4189bb 100644
|
||||
--- a/pkg/provisioner/ironic/factory.go
|
||||
+++ b/pkg/provisioner/ironic/factory.go
|
||||
@@ -58,9 +58,10 @@ func (f *ironicProvisionerFactory) init(havePreprovImgBuilder bool) error {
|
||||
f.log.Info("ironic settings",
|
||||
"endpoint", ironicEndpoint,
|
||||
"ironicAuthType", ironicAuth.Type,
|
||||
- "deployKernelURL", f.config.deployKernelURL,
|
||||
- "deployRamdiskURL", f.config.deployRamdiskURL,
|
||||
- "deployISOURL", f.config.deployISOURL,
|
||||
+ "defaultDeployKernelURL", f.config.defaultDeployConfig.kernelURL,
|
||||
+ "defaultDeployRamdiskURL", f.config.defaultDeployConfig.ramdiskURL,
|
||||
+ "defaultDeployISOURL", f.config.defaultDeployConfig.ISOURL,
|
||||
+ "defaultDeployBootloaderURL", f.config.defaultDeployConfig.bootloaderURL,
|
||||
"liveISOForcePersistentBootDevice", f.config.liveISOForcePersistentBootDevice,
|
||||
"CACertFile", tlsConf.TrustedCAFile,
|
||||
"ClientCertFile", tlsConf.ClientCertificateFile,
|
||||
@@ -105,27 +106,55 @@ func (f ironicProvisionerFactory) NewProvisioner(ctx context.Context, hostData p
|
||||
return f.ironicProvisioner(ctx, hostData, publisher)
|
||||
}
|
||||
|
||||
-func loadConfigFromEnv(havePreprovImgBuilder bool) (ironicConfig, error) {
|
||||
- c := ironicConfig{
|
||||
- havePreprovImgBuilder: havePreprovImgBuilder,
|
||||
+func loadDeployURLFromEnv(arch string, havePreprovImgBuilder bool) (ironicDeployConfig, error) {
|
||||
+ c := ironicDeployConfig{}
|
||||
+ var suffix string
|
||||
+ if arch != "" {
|
||||
+ suffix = "_" + strings.ToUpper(arch)
|
||||
}
|
||||
+ c.kernelURL = os.Getenv("DEPLOY_KERNEL_URL" + suffix)
|
||||
+ c.ramdiskURL = os.Getenv("DEPLOY_RAMDISK_URL" + suffix)
|
||||
+ c.ISOURL = os.Getenv("DEPLOY_ISO_URL" + suffix)
|
||||
+ c.bootloaderURL = os.Getenv("DEPLOY_BOOTLOADER_URL" + suffix)
|
||||
|
||||
- c.deployKernelURL = os.Getenv("DEPLOY_KERNEL_URL")
|
||||
- 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")
|
||||
- }
|
||||
- if (c.deployKernelURL == "" && c.deployRamdiskURL != "") ||
|
||||
- (c.deployKernelURL != "" && c.deployRamdiskURL == "") {
|
||||
+ if (c.kernelURL == "" && c.ramdiskURL != "") ||
|
||||
+ (c.kernelURL != "" && c.ramdiskURL == "") {
|
||||
return c, errors.New("DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL can only be set together")
|
||||
}
|
||||
}
|
||||
- if c.deployKernelURL == "" && c.deployRamdiskURL != "" {
|
||||
+ if c.kernelURL == "" && c.ramdiskURL != "" {
|
||||
return c, errors.New("DEPLOY_RAMDISK_URL requires DEPLOY_KERNEL_URL to be set also")
|
||||
}
|
||||
+ return c, nil
|
||||
+}
|
||||
+
|
||||
+func loadConfigFromEnv(havePreprovImgBuilder bool) (ironicConfig, error) {
|
||||
+ c := ironicConfig{
|
||||
+ havePreprovImgBuilder: havePreprovImgBuilder,
|
||||
+ archDeployConfig: make(map[string]ironicDeployConfig),
|
||||
+ }
|
||||
+ var err error
|
||||
+ c.defaultDeployConfig, err = loadDeployURLFromEnv("", havePreprovImgBuilder)
|
||||
+ if err != nil {
|
||||
+ return c, err
|
||||
+ }
|
||||
+ for _, arch := range supportedArch {
|
||||
+ archDeployConfig, err := loadDeployURLFromEnv(arch, havePreprovImgBuilder)
|
||||
+ // Only register valid arch specific deploy configuration
|
||||
+ if archDeployConfig.ISOURL != "" || (archDeployConfig.kernelURL != "" && archDeployConfig.ramdiskURL != "") {
|
||||
+ c.archDeployConfig[arch] = archDeployConfig
|
||||
+ }
|
||||
+ if err != nil {
|
||||
+ return c, err
|
||||
+ }
|
||||
+ }
|
||||
+ if !havePreprovImgBuilder {
|
||||
+ if c.defaultDeployConfig.ISOURL == "" &&
|
||||
+ (c.defaultDeployConfig.kernelURL == "" || c.defaultDeployConfig.ramdiskURL == "") {
|
||||
+ return c, errors.New("either DEPLOY_KERNEL_URL and DEPLOY_RAMDISK_URL or DEPLOY_ISO_URL must be set")
|
||||
+ }
|
||||
+ }
|
||||
|
||||
c.maxBusyHosts = 20
|
||||
if maxHostsStr := os.Getenv("PROVISIONING_LIMIT"); maxHostsStr != "" {
|
||||
diff --git a/pkg/provisioner/ironic/factory_test.go b/pkg/provisioner/ironic/factory_test.go
|
||||
index db47d8b2..acdedf1c 100644
|
||||
--- a/pkg/provisioner/ironic/factory_test.go
|
||||
+++ b/pkg/provisioner/ironic/factory_test.go
|
||||
@@ -14,6 +14,11 @@ type EnvFixture struct {
|
||||
kernelURL string
|
||||
ramdiskURL string
|
||||
isoURL string
|
||||
+ bootloaderURL string
|
||||
+ aarch64kernelURL string
|
||||
+ aarch64ramdiskURL string
|
||||
+ aarch64isoURL string
|
||||
+ aarch64bootloaderURL string
|
||||
liveISOForcePersistentBootDevice string
|
||||
ironicCACertFile string
|
||||
ironicClientCertFile string
|
||||
@@ -49,6 +54,11 @@ func (f *EnvFixture) SetUp() {
|
||||
f.replace("DEPLOY_KERNEL_URL", f.kernelURL)
|
||||
f.replace("DEPLOY_RAMDISK_URL", f.ramdiskURL)
|
||||
f.replace("DEPLOY_ISO_URL", f.isoURL)
|
||||
+ f.replace("DEPLOY_BOOTLOADER_URL", f.bootloaderURL)
|
||||
+ f.replace("DEPLOY_KERNEL_URL_AARCH64", f.aarch64kernelURL)
|
||||
+ f.replace("DEPLOY_RAMDISK_URL_AARCH64", f.aarch64ramdiskURL)
|
||||
+ f.replace("DEPLOY_ISO_URL_AARCH64", f.aarch64isoURL)
|
||||
+ f.replace("DEPLOY_BOOTLOADER_URL_AARCH64", f.aarch64bootloaderURL)
|
||||
f.replace("LIVE_ISO_FORCE_PERSISTENT_BOOT_DEVICE", f.liveISOForcePersistentBootDevice)
|
||||
f.replace("IRONIC_CACERT_FILE", f.ironicCACertFile)
|
||||
f.replace("IRONIC_CLIENT_CERT_FILE", f.ironicClientCertFile)
|
||||
@@ -58,9 +68,14 @@ func (f *EnvFixture) SetUp() {
|
||||
}
|
||||
func (f EnvFixture) VerifyConfig(t *testing.T, c ironicConfig, _ string) {
|
||||
t.Helper()
|
||||
- assert.Equal(t, f.kernelURL, c.deployKernelURL)
|
||||
- assert.Equal(t, f.ramdiskURL, c.deployRamdiskURL)
|
||||
- assert.Equal(t, f.isoURL, c.deployISOURL)
|
||||
+ assert.Equal(t, f.kernelURL, c.defaultDeployConfig.kernelURL)
|
||||
+ assert.Equal(t, f.ramdiskURL, c.defaultDeployConfig.ramdiskURL)
|
||||
+ assert.Equal(t, f.isoURL, c.defaultDeployConfig.ISOURL)
|
||||
+ assert.Equal(t, f.bootloaderURL, c.defaultDeployConfig.bootloaderURL)
|
||||
+ assert.Equal(t, f.aarch64kernelURL, c.archDeployConfig["aarch64"].kernelURL)
|
||||
+ assert.Equal(t, f.aarch64ramdiskURL, c.archDeployConfig["aarch64"].ramdiskURL)
|
||||
+ assert.Equal(t, f.aarch64isoURL, c.archDeployConfig["aarch64"].ISOURL)
|
||||
+ assert.Equal(t, f.aarch64bootloaderURL, c.archDeployConfig["aarch64"].bootloaderURL)
|
||||
assert.Equal(t, f.liveISOForcePersistentBootDevice, c.liveISOForcePersistentBootDevice)
|
||||
}
|
||||
|
||||
@@ -108,14 +123,14 @@ func TestLoadConfigFromEnv(t *testing.T) {
|
||||
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 4bc753f2..52d03479 100644
|
||||
--- a/pkg/provisioner/ironic/ironic.go
|
||||
+++ b/pkg/provisioner/ironic/ironic.go
|
||||
@@ -30,6 +30,7 @@ var (
|
||||
subscriptionRequeueDelay = time.Second * 10
|
||||
introspectionRequeueDelay = time.Second * 15
|
||||
softPowerOffTimeout = time.Second * 180
|
||||
+ supportedArch = [...]string{"x86_64", "aarch64"}
|
||||
)
|
||||
|
||||
const (
|
||||
@@ -41,6 +42,7 @@ const (
|
||||
nameSeparator = "~"
|
||||
customDeployPriority = 80
|
||||
|
||||
+ bootloaderKey = "bootloader"
|
||||
deployKernelKey = "deploy_kernel"
|
||||
deployRamdiskKey = "deploy_ramdisk"
|
||||
deployISOKey = "deploy_iso"
|
||||
@@ -61,11 +63,17 @@ func NewMacAddressConflictError(address, node string) error {
|
||||
return macAddressConflictError{Address: address, ExistingNode: node}
|
||||
}
|
||||
|
||||
+type ironicDeployConfig struct {
|
||||
+ kernelURL string
|
||||
+ ramdiskURL string
|
||||
+ bootloaderURL string
|
||||
+ ISOURL string
|
||||
+}
|
||||
+
|
||||
type ironicConfig struct {
|
||||
havePreprovImgBuilder bool
|
||||
- deployKernelURL string
|
||||
- deployRamdiskURL string
|
||||
- deployISOURL string
|
||||
+ defaultDeployConfig ironicDeployConfig
|
||||
+ archDeployConfig map[string]ironicDeployConfig
|
||||
liveISOForcePersistentBootDevice string
|
||||
maxBusyHosts int
|
||||
externalURL string
|
||||
@@ -318,7 +326,7 @@ func (p *ironicProvisioner) createPXEEnabledNodePort(uuid, macAddress string) er
|
||||
func (p *ironicProvisioner) configureImages(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)
|
||||
+ deployImageInfo := setDeployImage(p.config, bmcAccess, data.PreprovisioningImage, data.CPUArchitecture)
|
||||
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.
|
||||
@@ -430,14 +438,20 @@ func setExternalURL(p *ironicProvisioner, driverInfo map[string]interface{}) map
|
||||
return driverInfo
|
||||
}
|
||||
|
||||
-func setDeployImage(config ironicConfig, accessDetails bmc.AccessDetails, hostImage *provisioner.PreprovisioningImage) clients.UpdateOptsData {
|
||||
+func setDeployImage(config ironicConfig, accessDetails bmc.AccessDetails, hostImage *provisioner.PreprovisioningImage, cpuArch string) clients.UpdateOptsData {
|
||||
deployImageInfo := clients.UpdateOptsData{
|
||||
+ bootloaderKey: nil,
|
||||
deployKernelKey: nil,
|
||||
deployRamdiskKey: nil,
|
||||
deployISOKey: nil,
|
||||
kernelParamsKey: nil,
|
||||
}
|
||||
|
||||
+ deployConfig, ok := config.archDeployConfig[cpuArch]
|
||||
+ if !ok {
|
||||
+ deployConfig = config.defaultDeployConfig
|
||||
+ }
|
||||
+
|
||||
allowISO := accessDetails.SupportsISOPreprovisioningImage()
|
||||
|
||||
if hostImage != nil {
|
||||
@@ -450,10 +464,15 @@ func setDeployImage(config ironicConfig, accessDetails bmc.AccessDetails, hostIm
|
||||
case metal3api.ImageFormatInitRD:
|
||||
if hostImage.KernelURL != "" {
|
||||
deployImageInfo[deployKernelKey] = hostImage.KernelURL
|
||||
- } else if config.deployKernelURL == "" {
|
||||
+ } else if deployConfig.kernelURL == "" {
|
||||
return nil
|
||||
} else {
|
||||
- deployImageInfo[deployKernelKey] = config.deployKernelURL
|
||||
+ deployImageInfo[deployKernelKey] = deployConfig.kernelURL
|
||||
+ }
|
||||
+ if hostImage.BootloaderURL != "" {
|
||||
+ deployImageInfo[bootloaderKey] = hostImage.BootloaderURL
|
||||
+ } else if deployConfig.bootloaderURL != "" {
|
||||
+ deployImageInfo[bootloaderKey] = deployConfig.bootloaderURL
|
||||
}
|
||||
deployImageInfo[deployRamdiskKey] = hostImage.ImageURL
|
||||
if hostImage.ExtraKernelParams != "" {
|
||||
@@ -465,13 +484,16 @@ func setDeployImage(config ironicConfig, accessDetails bmc.AccessDetails, hostIm
|
||||
}
|
||||
|
||||
if !config.havePreprovImgBuilder {
|
||||
- if allowISO && config.deployISOURL != "" {
|
||||
- deployImageInfo[deployISOKey] = config.deployISOURL
|
||||
+ if allowISO && deployConfig.ISOURL != "" {
|
||||
+ deployImageInfo[deployISOKey] = deployConfig.ISOURL
|
||||
return deployImageInfo
|
||||
}
|
||||
- if config.deployKernelURL != "" && config.deployRamdiskURL != "" {
|
||||
- deployImageInfo[deployKernelKey] = config.deployKernelURL
|
||||
- deployImageInfo[deployRamdiskKey] = config.deployRamdiskURL
|
||||
+ if deployConfig.kernelURL != "" && deployConfig.ramdiskURL != "" {
|
||||
+ deployImageInfo[deployKernelKey] = deployConfig.kernelURL
|
||||
+ deployImageInfo[deployRamdiskKey] = deployConfig.ramdiskURL
|
||||
+ if deployConfig.bootloaderURL != "" {
|
||||
+ deployImageInfo[bootloaderKey] = deployConfig.bootloaderURL
|
||||
+ }
|
||||
return deployImageInfo
|
||||
}
|
||||
}
|
||||
diff --git a/pkg/provisioner/ironic/ironic_test.go b/pkg/provisioner/ironic/ironic_test.go
|
||||
index a8759c44..f65592e6 100644
|
||||
--- a/pkg/provisioner/ironic/ironic_test.go
|
||||
+++ b/pkg/provisioner/ironic/ironic_test.go
|
||||
@@ -27,10 +27,12 @@ func newTestProvisionerFactory() ironicProvisionerFactory {
|
||||
return ironicProvisionerFactory{
|
||||
log: logf.Log,
|
||||
config: ironicConfig{
|
||||
- deployKernelURL: "http://deploy.test/ipa.kernel",
|
||||
- deployRamdiskURL: "http://deploy.test/ipa.initramfs",
|
||||
- deployISOURL: "http://deploy.test/ipa.iso",
|
||||
- maxBusyHosts: 20,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: "http://deploy.test/ipa.kernel",
|
||||
+ ramdiskURL: "http://deploy.test/ipa.initramfs",
|
||||
+ ISOURL: "http://deploy.test/ipa.iso",
|
||||
+ },
|
||||
+ maxBusyHosts: 20,
|
||||
},
|
||||
}
|
||||
}
|
||||
diff --git a/pkg/provisioner/ironic/register_test.go b/pkg/provisioner/ironic/register_test.go
|
||||
index c7d6bc75..9ded5946 100644
|
||||
--- a/pkg/provisioner/ironic/register_test.go
|
||||
+++ b/pkg/provisioner/ironic/register_test.go
|
||||
@@ -1112,9 +1112,11 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "iso no imgbuilder",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: false,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: isoDriver,
|
||||
ExpectBuild: false,
|
||||
@@ -1125,8 +1127,10 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "no imgbuilder no iso",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: false,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ },
|
||||
},
|
||||
Driver: isoDriver,
|
||||
ExpectBuild: false,
|
||||
@@ -1137,9 +1141,11 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "pxe no imgbuilder",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: false,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
ExpectBuild: false,
|
||||
@@ -1150,9 +1156,11 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "iso no build",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: isoDriver,
|
||||
ExpectISO: false,
|
||||
@@ -1162,9 +1170,11 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "iso build",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: isoDriver,
|
||||
Image: &provisioner.PreprovisioningImage{
|
||||
@@ -1181,9 +1191,11 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "pxe build",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
Image: &provisioner.PreprovisioningImage{
|
||||
@@ -1200,9 +1212,11 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "pxe build with new kernel and kernel params",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
Image: &provisioner.PreprovisioningImage{
|
||||
@@ -1223,9 +1237,11 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "pxe iso build",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployKernelURL: localKernel,
|
||||
- deployRamdiskURL: localRamdisk,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ ramdiskURL: localRamdisk,
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
Image: &provisioner.PreprovisioningImage{
|
||||
@@ -1242,7 +1258,9 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "pxe build no kernel",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
Image: &provisioner.PreprovisioningImage{
|
||||
@@ -1273,7 +1291,9 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "pxe iso build no initrd",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployKernelURL: localKernel,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
Image: &provisioner.PreprovisioningImage{
|
||||
@@ -1289,7 +1309,9 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "no build no initrd",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: true,
|
||||
- deployKernelURL: localKernel,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ kernelURL: localKernel,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
ExpectISO: false,
|
||||
@@ -1299,7 +1321,9 @@ func TestSetDeployImage(t *testing.T) {
|
||||
Scenario: "pxe no imgbuilder no pxe",
|
||||
Config: ironicConfig{
|
||||
havePreprovImgBuilder: false,
|
||||
- deployISOURL: localIso,
|
||||
+ defaultDeployConfig: ironicDeployConfig{
|
||||
+ ISOURL: localIso,
|
||||
+ },
|
||||
},
|
||||
Driver: pxeDriver,
|
||||
ExpectISO: false,
|
||||
@@ -1318,7 +1342,7 @@ func TestSetDeployImage(t *testing.T) {
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.Scenario, func(t *testing.T) {
|
||||
- opts := setDeployImage(tc.Config, tc.Driver, tc.Image)
|
||||
+ opts := setDeployImage(tc.Config, tc.Driver, tc.Image, "x86_64")
|
||||
|
||||
switch {
|
||||
case tc.ExpectISO:
|
||||
diff --git a/pkg/provisioner/provisioner.go b/pkg/provisioner/provisioner.go
|
||||
index faddd0fd..f7f55c0d 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 {
|
||||
--
|
||||
2.50.0
|
||||
|
@@ -2,7 +2,7 @@
|
||||
<service name="obs_scm">
|
||||
<param name="url">https://github.com/metal3-io/baremetal-operator</param>
|
||||
<param name="scm">git</param>
|
||||
<param name="revision">v0.10.2</param>
|
||||
<param name="revision">v0.9.1</param>
|
||||
<param name="version">_auto_</param>
|
||||
<param name="versionformat">@PARENT_TAG@</param>
|
||||
<param name="changesgenerate">enable</param>
|
||||
|
@@ -17,15 +17,14 @@
|
||||
|
||||
|
||||
Name: baremetal-operator
|
||||
Version: 0.10.2
|
||||
Version: 0.9.1
|
||||
Release: 0
|
||||
Summary: Implements a Kubernetes API for managing bare metal hosts
|
||||
License: Apache-2.0
|
||||
URL: https://github.com/metal3-io/baremetal-operator
|
||||
Patch0: 0001-Allow-configuring-different-IPA-images-per-architect.patch
|
||||
Source: baremetal-operator-%{version}.tar
|
||||
Source1: vendor.tar.gz
|
||||
BuildRequires: golang(API) = 1.24
|
||||
BuildRequires: golang(API) = 1.23
|
||||
ExcludeArch: s390
|
||||
ExcludeArch: %{ix86}
|
||||
|
||||
|
@@ -20,11 +20,11 @@ RUN sed -i -e 's%^# rpm.install.excludedocs = no.*%rpm.install.excludedocs = yes
|
||||
|
||||
#!ArchExclusiveLine: x86_64
|
||||
RUN if [ "$(uname -m)" = "x86_64" ];then \
|
||||
zypper --installroot /installroot --non-interactive install --no-recommends syslinux python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi inotify-tools ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
|
||||
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
|
||||
#!ArchExclusiveLine: aarch64
|
||||
RUN if [ "$(uname -m)" = "aarch64" ];then \
|
||||
zypper --installroot /installroot --non-interactive install --no-recommends python311-devel python311 python311-pip python-dracclient python311-sushy-oem-idrac python311-proliantutils python311-sushy python3-ironicclient git curl sles-release tar gzip vim gawk dnsmasq dosfstools apache2 apache2-mod_wsgi inotify-tools ipcalc ipmitool iproute2 procps qemu-tools sqlite3 util-linux xorriso tftp ipxe-bootimgs python311-sushy-tools crudini openstack-ironic openstack-ironic-inspector-api; \
|
||||
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
|
||||
|
||||
# DATABASE
|
||||
@@ -32,7 +32,9 @@ RUN mkdir -p /installroot/var/lib/ironic && \
|
||||
/installroot/usr/bin/sqlite3 /installroot/var/lib/ironic/ironic.sqlite "pragma journal_mode=wal" && \
|
||||
zypper --installroot /installroot --non-interactive remove sqlite3
|
||||
|
||||
# build actual image
|
||||
FROM micro AS final
|
||||
|
||||
MAINTAINER SUSE LLC (https://www.suse.com/)
|
||||
# Define labels according to https://en.opensuse.org/Building_derived_containers
|
||||
LABEL org.opencontainers.image.title="SLE Openstack Ironic Container Image"
|
||||
@@ -62,14 +64,15 @@ RUN echo 'alias mkisofs="xorriso -as mkisofs"' >> ~/.bashrc
|
||||
COPY mkisofs_wrapper /usr/bin/mkisofs
|
||||
RUN set -euo pipefail; chmod +x /usr/bin/mkisofs
|
||||
|
||||
COPY auth-common.sh configure-ironic.sh ironic-common.sh rundnsmasq runhttpd runironic runlogwatch.sh tls-common.sh configure-nonroot.sh ironic-probe.j2 /bin/
|
||||
RUN set -euo pipefail; chmod +x /bin/auth-common.sh; chmod +x /bin/configure-ironic.sh; chmod +x /bin/ironic-common.sh; chmod +x /bin/rundnsmasq; chmod +x /bin/runhttpd; chmod +x /bin/runironic; chmod +x /bin/runlogwatch.sh; chmod +x /bin/tls-common.sh; chmod +x /bin/configure-nonroot.sh;
|
||||
RUN mkdir -p /tftpboot
|
||||
RUN mkdir -p $GRUB_DIR
|
||||
|
||||
# No need to support the Legacy BIOS boot
|
||||
#RUN cp /usr/share/syslinux/pxelinux.0 /tftpboot
|
||||
#RUN cp /usr/share/syslinux/chain.c32 /tftpboot/
|
||||
COPY scripts/ /bin/
|
||||
COPY configure-nonroot.sh /bin/
|
||||
RUN set -euo pipefail; chmod +x /bin/configure-ironic.sh /bin/rundnsmasq /bin/runhttpd /bin/runironic /bin/runlogwatch.sh /bin/configure-nonroot.sh
|
||||
|
||||
COPY ironic-config/inspector.ipxe.j2 ironic-config/httpd-ironic-api.conf.j2 \
|
||||
ironic-config/ipxe_config.template /tmp/
|
||||
|
||||
# IRONIC #
|
||||
RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
|
||||
@@ -77,31 +80,29 @@ RUN cp /usr/share/ipxe/undionly.kpxe /tftpboot/undionly.kpxe
|
||||
RUN if [ "$(uname -m)" = "x86_64" ];then \
|
||||
cp /usr/share/ipxe/ipxe-x86_64.efi /tftpboot/ipxe.efi ;\
|
||||
fi
|
||||
#!ArchExclusiveLine: x86_64
|
||||
#!ArchExclusiveLine: aarch64
|
||||
RUN if [ "$(uname -m)" = "aarch64" ]; then\
|
||||
cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
|
||||
cp /usr/share/ipxe/snp-arm64.efi /tftpboot/ipxe.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp-arm64.efi; cp /usr/share/ipxe/snp-arm64.efi /tftpboot/snp.efi ;\
|
||||
fi
|
||||
|
||||
COPY --from=base /tmp/esp-x86_64.img /tmp/uefi_esp-x86_64.img
|
||||
COPY --from=base /tmp/esp-aarch64.img /tmp/uefi_esp-arm64.img
|
||||
|
||||
COPY ironic.conf.j2 /etc/ironic/
|
||||
COPY inspector.ipxe.j2 httpd-ironic-api.conf.j2 ipxe_config.template /tmp/
|
||||
COPY network-data-schema-empty.json /etc/ironic/
|
||||
COPY ironic-config/ironic.conf.j2 /etc/ironic/
|
||||
COPY ironic-config/network-data-schema-empty.json /etc/ironic/
|
||||
|
||||
# DNSMASQ
|
||||
COPY dnsmasq.conf.j2 /etc/
|
||||
|
||||
# Custom httpd config, removes all but the bare minimum needed modules
|
||||
COPY httpd.conf.j2 /etc/httpd/conf/
|
||||
COPY httpd-modules.conf /etc/httpd/conf.modules.d/
|
||||
COPY apache2-vmedia.conf.j2 /etc/httpd-vmedia.conf.j2
|
||||
COPY apache2-ipxe.conf.j2 /etc/httpd-ipxe.conf.j2
|
||||
COPY ironic-config/dnsmasq.conf.j2 /etc/
|
||||
|
||||
# Workaround
|
||||
# Removing the 010-ironic.conf file that comes with the package
|
||||
RUN rm /etc/ironic/ironic.conf.d/010-ironic.conf
|
||||
|
||||
# Custom httpd config, removes all but the bare minimum needed modules
|
||||
COPY ironic-config/httpd.conf.j2 /etc/httpd/conf/
|
||||
COPY ironic-config/httpd-modules.conf /etc/httpd/conf.modules.d/
|
||||
COPY ironic-config/apache2-vmedia.conf.j2 /etc/httpd-vmedia.conf.j2
|
||||
COPY ironic-config/apache2-ipxe.conf.j2 /etc/httpd-ipxe.conf.j2
|
||||
|
||||
# configure non-root user and set relevant permissions
|
||||
RUN configure-nonroot.sh && \
|
||||
rm -f /bin/configure-nonroot.sh
|
||||
RUN configure-nonroot.sh && rm -f /bin/configure-nonroot.sh
|
||||
|
@@ -187,11 +187,6 @@ insecure = {{ env.IRONIC_INSECURE }}
|
||||
[nova]
|
||||
send_power_notifications = false
|
||||
|
||||
[oslo_messaging_notifications]
|
||||
driver = prometheus_exporter
|
||||
location = /shared/ironic_prometheus_exporter
|
||||
transport_url = fake://
|
||||
|
||||
[pxe]
|
||||
# NOTE(dtantsur): keep this value at least 3x lower than
|
||||
# [conductor]deploy_callback_timeout so that at least some retries happen.
|
@@ -1,12 +0,0 @@
|
||||
#!/usr/bin/bash
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
. /bin/configure-ironic.sh
|
||||
|
||||
FLASK_RUN_HOST=${FLASK_RUN_HOST:-0.0.0.0}
|
||||
FLASK_RUN_PORT=${FLASK_RUN_PORT:-9608}
|
||||
|
||||
export IRONIC_CONFIG="/etc/ironic/ironic.conf"
|
||||
|
||||
exec gunicorn -b "${FLASK_RUN_HOST}:${FLASK_RUN_PORT}" -w 4 \
|
||||
ironic_prometheus_exporter.app.wsgi:application
|
@@ -84,7 +84,6 @@ echo 'Options set from Environment variables'
|
||||
env | grep "^OS_" || true
|
||||
|
||||
mkdir -p /shared/html
|
||||
mkdir -p /shared/ironic_prometheus_exporter
|
||||
|
||||
configure_json_rpc_auth
|
||||
|
@@ -72,7 +72,7 @@ fi
|
||||
# Set up inotify to kill the container (restart) whenever cert files for ironic api change
|
||||
if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
|
||||
# shellcheck disable=SC2034
|
||||
inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
|
||||
python3.11 -m pyinotify --raw-format -e IN_DELETE_SELF -v "${IRONIC_CERT_FILE}" | while read -r file event; do
|
||||
kill -WINCH $(pgrep httpd)
|
||||
done &
|
||||
fi
|
||||
@@ -80,7 +80,7 @@ fi
|
||||
# Set up inotify to kill the container (restart) whenever cert of httpd for /shared/html/<redifsh;ilo> path change
|
||||
if [[ "$IRONIC_VMEDIA_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
|
||||
# shellcheck disable=SC2034
|
||||
inotifywait -m -e delete_self "${IRONIC_VMEDIA_CERT_FILE}" | while read -r file event; do
|
||||
python3.11 -m pyinotify --raw-format -e IN_DELETE_SELF -v "${IRONIC_VMEDIA_CERT_FILE}" | while read -r file event; do
|
||||
kill -WINCH $(pgrep httpd)
|
||||
done &
|
||||
fi
|
@@ -13,7 +13,7 @@ run_ironic_dbsync
|
||||
|
||||
if [[ "$IRONIC_TLS_SETUP" == "true" ]] && [[ "${RESTART_CONTAINER_CERTIFICATE_UPDATED}" == "true" ]]; then
|
||||
# shellcheck disable=SC2034
|
||||
inotifywait -m -e delete_self "${IRONIC_CERT_FILE}" | while read -r file event; do
|
||||
python3.11 -m pyinotify --raw-format -e IN_DELETE_SELF -v "${IRONIC_CERT_FILE}" | while read -r file event; do
|
||||
kill $(pgrep ironic)
|
||||
done &
|
||||
fi
|
@@ -11,7 +11,7 @@ while [ ! -d "${LOG_DIR}" ]; do
|
||||
sleep 5
|
||||
done
|
||||
|
||||
inotifywait -m "${LOG_DIR}" -e close_write |
|
||||
python3.11 -m pyinotify --raw-format -e IN_CLOSE_WRITE -v "${LOG_DIR}" |
|
||||
while read -r path _action file; do
|
||||
echo "************ Contents of ${path}/${file} ramdisk log file bundle **************"
|
||||
tar -xOzvvf "${path}/${file}" | sed -e "s/^/${file}: /"
|
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.7
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.7-%RELEASE%
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader:3.0.8-%RELEASE%
|
||||
ARG SLE_VERSION
|
||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||
|
||||
@@ -33,8 +33,6 @@ LABEL com.suse.release-stage="released"
|
||||
|
||||
COPY --from=base /installroot /
|
||||
RUN cp /getopt /usr/bin/
|
||||
RUN cp /srv/tftpboot/openstack-ironic-image/initrd*.zst /tmp
|
||||
RUN cp /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel /tmp
|
||||
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
|
||||
# configure non-root user
|
||||
COPY configure-nonroot.sh /bin/
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.7
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.7-%RELEASE%
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-aarch64:3.0.8-%RELEASE%
|
||||
ARG SLE_VERSION
|
||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||
|
||||
@@ -33,8 +33,6 @@ LABEL com.suse.release-stage="released"
|
||||
|
||||
COPY --from=base /installroot /
|
||||
RUN cp /getopt /usr/bin/
|
||||
RUN cp /srv/tftpboot/openstack-ironic-image/initrd*.zst /tmp
|
||||
RUN cp /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel /tmp
|
||||
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
|
||||
# configure non-root user
|
||||
COPY configure-nonroot.sh /bin/
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.7
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.7-%RELEASE%
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8
|
||||
#!BuildTag: %%IMG_PREFIX%%ironic-ipa-downloader-x86_64:3.0.8-%RELEASE%
|
||||
ARG SLE_VERSION
|
||||
FROM registry.suse.com/bci/bci-micro:$SLE_VERSION AS micro
|
||||
|
||||
@@ -33,8 +33,6 @@ LABEL com.suse.release-stage="released"
|
||||
|
||||
COPY --from=base /installroot /
|
||||
RUN cp /getopt /usr/bin/
|
||||
RUN cp /srv/tftpboot/openstack-ironic-image/initrd*.zst /tmp
|
||||
RUN cp /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel /tmp
|
||||
RUN sha256sum /srv/tftpboot/openstack-ironic-image/initrd*.zst /srv/tftpboot/openstack-ironic-image/openstack-ironic-image*.kernel > /tmp/images.sha256
|
||||
# configure non-root user
|
||||
COPY configure-nonroot.sh /bin/
|
||||
|
@@ -6,6 +6,8 @@ export http_proxy=${http_proxy:-$HTTP_PROXY}
|
||||
export https_proxy=${https_proxy:-$HTTPS_PROXY}
|
||||
export no_proxy=${no_proxy:-$NO_PROXY}
|
||||
|
||||
IMAGES_BASE_PATH="/srv/tftpboot/openstack-ironic-image"
|
||||
|
||||
if [ -d "/tmp/ironic-certificates" ]; then
|
||||
sha256sum /tmp/ironic-certificates/* > /tmp/certificates.sha256
|
||||
if cmp "/shared/certificates.sha256" "/tmp/certificates.sha256"; then
|
||||
@@ -27,13 +29,13 @@ if [ -z "${IPA_BASEURI}" ]; then
|
||||
# SLES BASED IPA - ironic-ipa-ramdisk-x86_64 and ironic-ipa-ramdisk-aarch64 packages
|
||||
mkdir -p /shared/html/images
|
||||
if [ -f /tmp/initrd-x86_64.zst ]; then
|
||||
cp /tmp/initrd-x86_64.zst /shared/html/images/ironic-python-agent-x86_64.initramfs
|
||||
cp /tmp/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent-x86_64.kernel
|
||||
cp ${IMAGES_BASE_PATH}/initrd-x86_64.zst /shared/html/images/ironic-python-agent-x86_64.initramfs
|
||||
cp ${IMAGES_BASE_PATH}/openstack-ironic-image.x86_64*.kernel /shared/html/images/ironic-python-agent-x86_64.kernel
|
||||
fi
|
||||
# Use arm64 as destination for iPXE compatibility
|
||||
if [ -f /tmp/initrd-aarch64.zst ]; then
|
||||
cp /tmp/initrd-aarch64.zst /shared/html/images/ironic-python-agent-arm64.initramfs
|
||||
cp /tmp/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent-arm64.kernel
|
||||
cp ${IMAGES_BASE_PATH}/initrd-aarch64.zst /shared/html/images/ironic-python-agent-arm64.initramfs
|
||||
cp ${IMAGES_BASE_PATH}/openstack-ironic-image.aarch64*.kernel /shared/html/images/ironic-python-agent-arm64.kernel
|
||||
fi
|
||||
|
||||
cp /tmp/images.sha256 /shared/images.sha256
|
||||
|
@@ -23,12 +23,6 @@ data:
|
||||
CACHEURL: "{{ $protocol }}://{{ $ironicCacheHost }}/images"
|
||||
DEPLOY_KERNEL_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.kernel"
|
||||
DEPLOY_RAMDISK_URL: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-{{ $deployArch }}.initramfs"
|
||||
DEPLOY_KERNEL_URL_X86_64: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-x86_64.kernel"
|
||||
DEPLOY_RAMDISK_URL_X86_64: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-x86_64.initramfs"
|
||||
DEPLOY_BOOTLOADER_URL_X86_64: "{{ $protocol }}://{{ $ironicBootHost }}/uefi_esp-x86_64.img"
|
||||
DEPLOY_KERNEL_URL_AARCH64: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-arm64.kernel"
|
||||
DEPLOY_RAMDISK_URL_AARCH64: "{{ $protocol }}://{{ $ironicBootHost }}/images/ironic-python-agent-arm64.initramfs"
|
||||
DEPLOY_BOOTLOADER_URL_AARCH64: "{{ $protocol }}://{{ $ironicBootHost }}/uefi_esp-arm64.img"
|
||||
DEPLOY_ARCHITECTURE: "{{ $deployArch }}"
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
|
@@ -28,7 +28,7 @@ images:
|
||||
baremetalOperator:
|
||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/baremetal-operator
|
||||
pullPolicy: IfNotPresent
|
||||
tag: "0.10.2.0"
|
||||
tag: "0.9.1.1"
|
||||
|
||||
imagePullSecrets: []
|
||||
nameOverride: "manger"
|
||||
|
@@ -60,7 +60,7 @@ images:
|
||||
ironicIPADownloader:
|
||||
repository: registry.opensuse.org/isv/suse/edge/metal3/containers/images/ironic-ipa-downloader
|
||||
pullPolicy: IfNotPresent
|
||||
tag: 3.0.7
|
||||
tag: 3.0.8
|
||||
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
Reference in New Issue
Block a user