From 38d86f9ee2096bb4fdddbcc8f117eea523250bed Mon Sep 17 00:00:00 2001 From: David Cassany Date: Wed, 8 Jul 2026 22:41:32 +0200 Subject: [PATCH 1/3] Add --base-config flag on customize If the new flag is passed the ignition configuration is added as base configuration as part of an initrd extension. This allows adding user configuration that gets merged at runtime. Configuration which could be provided by the platform (e.g. public cloud). Signed-off-by: David Cassany --- internal/cli/action/customize.go | 5 ++- internal/cli/cmd/customize.go | 6 +++ internal/config/config.go | 4 ++ internal/config/ignition.go | 75 +++++++++++++++++++++++++++----- internal/config/manager.go | 10 +++++ internal/customize/customize.go | 3 ++ internal/image/paths.go | 4 ++ 7 files changed, 93 insertions(+), 14 deletions(-) diff --git a/internal/cli/action/customize.go b/internal/cli/action/customize.go index c61fca93..04760bf7 100644 --- a/internal/cli/action/customize.go +++ b/internal/cli/action/customize.go @@ -127,12 +127,12 @@ func setupCustomizeRunner( return &customize.Runner{ System: s, - ConfigManager: setupConfigManager(s, args.ConfigDir, output, args.Local), + ConfigManager: setupConfigManager(s, args.ConfigDir, output, args.BaseConfig, args.Local), FileExtractor: extr, }, nil } -func setupConfigManager(s *sys.System, configDir string, output config.Output, local bool) *config.Manager { +func setupConfigManager(s *sys.System, configDir string, output config.Output, baseConfig, local bool) *config.Manager { valuesResolver := &helm.ValuesResolver{ FS: s.FS(), ValuesDir: v0.Dir(configDir).HelmValuesDir(), @@ -143,6 +143,7 @@ func setupConfigManager(s *sys.System, configDir string, output config.Output, l config.NewHelm(s.FS(), valuesResolver, s.Logger(), output.OverlaysDir()), config.WithDownloadFunc(http.DownloadFile), config.WithLocal(local), + config.WithBaseConfig(baseConfig), ) } diff --git a/internal/cli/cmd/customize.go b/internal/cli/cmd/customize.go index 3c49f912..51a81802 100644 --- a/internal/cli/cmd/customize.go +++ b/internal/cli/cmd/customize.go @@ -34,6 +34,7 @@ type CustomizeFlags struct { Platform string MediaType string Local bool + BaseConfig bool } var CustomizeArgs CustomizeFlags @@ -90,6 +91,11 @@ func NewCustomizeCommand(appName string, action func(context.Context, *cli.Comma Usage: localDesc, Destination: &CustomizeArgs.Local, }, + &cli.BoolFlag{ + Name: "base-config", + Usage: "Sets the Ignition configuration to be included as the base configuration", + Destination: &CustomizeArgs.BaseConfig, + }, }, } } diff --git a/internal/config/config.go b/internal/config/config.go index c23d07d1..9a3f3de1 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -98,6 +98,10 @@ func (o Output) ISOStoreDir() string { return filepath.Join(o.ExtractedFilesStoreDir(), "ISOs") } +func (o Output) InitrdExtensionFile() string { + return filepath.Join(o.RootPath, "initrdExt.cpio") +} + func (o Output) Cleanup(fs vfs.FS) error { return fs.RemoveAll(o.RootPath) } diff --git a/internal/config/ignition.go b/internal/config/ignition.go index b79b88f6..5b329ef6 100644 --- a/internal/config/ignition.go +++ b/internal/config/ignition.go @@ -18,6 +18,7 @@ limitations under the License. package config import ( + "context" _ "embed" "fmt" "path/filepath" @@ -27,12 +28,14 @@ import ( "go.yaml.in/yaml/v3" "github.com/suse/elemental/v3/internal/butane" + "github.com/suse/elemental/v3/internal/cpio" "github.com/suse/elemental/v3/internal/image" "github.com/suse/elemental/v3/internal/image/kubernetes" "github.com/suse/elemental/v3/internal/template" "github.com/suse/elemental/v3/pkg/extensions" "github.com/suse/elemental/v3/pkg/manifest/api" "github.com/suse/elemental/v3/pkg/sys" + "github.com/suse/elemental/v3/pkg/sys/vfs" ) const ( @@ -41,6 +44,8 @@ const ( updateLinkerCacheUnitName = "update-linker-cache.service" k8sResourcesUnitName = "k8s-resource-installer.service" k8sConfigUnitName = "k8s-config-installer.service" + ignitionFileName = "10-elemental.ign" + ignitionFromButaneFileName = "90-butane.ign" ) var ( @@ -68,6 +73,9 @@ var ( // * Kubernetes configuration and deployment files // * Systemd extensions // * Kubernetes distribution installation +// +// if baseConfig is set to true it builds a CPIO file containing the Ignition configuration at /usr/lib/ignition/base.d +// the CPIO file can be used as an initrd extension allowing the user to provide user configuration that is merged on top. func (m *Manager) configureIgnition(conf *image.Configuration, output Output, k8sScript, k8sConfScript string, ext []api.SystemdExtension) error { if len(conf.ButaneConfig) == 0 && k8sScript == "" && @@ -86,18 +94,6 @@ func (m *Manager) configureIgnition(conf *image.Configuration, output Output, k8 config.Variant = variant config.Version = version - if len(conf.ButaneConfig) > 0 { - m.system.Logger().Info("Translating butane configuration to Ignition syntax") - - ignitionBytes, err := butane.TranslateBytes(m.system, conf.ButaneConfig) - if err != nil { - return fmt.Errorf("failed translating butane configuration: %w", err) - } - config.MergeInlineIgnition(string(ignitionBytes)) - } else { - m.system.Logger().Info("No butane configuration to translate into Ignition syntax") - } - if k8sScript != "" { initHostname := "*" if len(conf.Kubernetes.Nodes) > 0 { @@ -142,10 +138,65 @@ func (m *Manager) configureIgnition(conf *image.Configuration, output Output, k8 config.AddSystemdUnit(updateLinkerCacheUnitName, updateLinkerCacheUnit, true) } + if m.baseConfig { + return m.writeBaseIgnitionConfig(output, config, conf.ButaneConfig) + } + + return m.writeUserIgnitionConfig(output, config, conf.ButaneConfig) +} + +// writeUserIgnitionConfig renders the Ignition configuration including the provided butane configuration as a single +// /ignition/config.ign file. From Ignition's PoV this represents the user configuration which gets merged +// with the stock configuration, if any. +func (m *Manager) writeUserIgnitionConfig(output Output, config butane.Config, butaneConfing map[string]any) error { + if len(butaneConfing) > 0 { + m.system.Logger().Info("Translating butane configuration to Ignition syntax") + + ignitionBytes, err := butane.TranslateBytes(m.system, butaneConfing) + if err != nil { + return fmt.Errorf("failed translating butane configuration: %w", err) + } + config.MergeInlineIgnition(string(ignitionBytes)) + } + ignitionFile := filepath.Join(output.FirstbootConfigDir(), image.IgnitionFilePath()) return butane.WriteIgnitionFile(m.system, config, ignitionFile) } +// writeBaseIgnitionConfig renders the generated Ignition configuration including the user provided butane configuration +// as part of a CPIO file, which can be used to extend the OS initrd and include ignition base configuration the expected +// /usr/lib/ignition/base.d path +func (m *Manager) writeBaseIgnitionConfig(output Output, config butane.Config, butaneConfing map[string]any) (err error) { + tmpDir, err := vfs.TempDir(m.system.FS(), output.RootPath, "initrd") + if err != nil { + return fmt.Errorf("creating temporary directory for ignition initrd extension: %w", err) + } + defer func() { + e := m.system.FS().RemoveAll(tmpDir) + if err == nil && e != nil { + err = e + } + }() + + ignitionFile := filepath.Join(tmpDir, image.IgnitionBaseConfigPath(), ignitionFileName) + err = butane.WriteIgnitionFile(m.system, config, ignitionFile) + if err != nil { + return fmt.Errorf("writing ignition file %q: %w", ignitionFile, err) + } + + if len(butaneConfing) > 0 { + m.system.Logger().Info("Translating butane configuration to Ignition syntax") + + butaneFile := filepath.Join(tmpDir, image.IgnitionBaseConfigPath(), ignitionFromButaneFileName) + err = butane.WriteIgnitionFile(m.system, butaneConfing, butaneFile) + if err != nil { + return fmt.Errorf("writing ignition file %q: %w", butaneFile, err) + } + } + + return cpio.CreateCPIO(context.Background(), m.system, tmpDir, output.InitrdExtensionFile()) +} + func generateK8sResourcesUnit(deployScript, initHostname string) (string, error) { values := struct { KubernetesDir string diff --git a/internal/config/manager.go b/internal/config/manager.go index a90a6215..fe2cd341 100644 --- a/internal/config/manager.go +++ b/internal/config/manager.go @@ -47,6 +47,10 @@ type Manager struct { system *sys.System local bool + // baseConfig sets Ignition configuration to be included as base configuration + // allowing a user configuration to be merged on top + baseConfig bool + rmResolver releaseManifestResolver downloadFile downloadFunc unpackImage unpackFunc @@ -79,6 +83,12 @@ func WithLocal(local bool) Opts { } } +func WithBaseConfig(baseConfig bool) Opts { + return func(m *Manager) { + m.baseConfig = baseConfig + } +} + func NewManager(sys *sys.System, helm helmConfigurator, opts ...Opts) *Manager { m := &Manager{ system: sys, diff --git a/internal/customize/customize.go b/internal/customize/customize.go index 2502c663..4139cae6 100644 --- a/internal/customize/customize.go +++ b/internal/customize/customize.go @@ -211,6 +211,9 @@ func parseDeployment( Bootloader: install.Bootloader, KernelCmdline: install.KernelCmdLine, } + if initrdExt, _ := vfs.Exists(fs, output.InitrdExtensionFile()); initrdExt { + d.BootConfig.InitrdExtensions = []string{output.InitrdExtensionFile()} + } d.Security = &deployment.SecurityConfig{ CryptoPolicy: install.CryptoPolicy, diff --git a/internal/image/paths.go b/internal/image/paths.go index dda17fd3..62f8acae 100644 --- a/internal/image/paths.go +++ b/internal/image/paths.go @@ -30,6 +30,10 @@ func IgnitionFilePath() string { return filepath.Join("ignition", "config.ign") } +func IgnitionBaseConfigPath() string { + return filepath.Join("usr", "lib", "ignition", "base.d") +} + func ElementalPath() string { return filepath.Join("var", "lib", "elemental") } From b1e4f1fb441fa8e2c3602606ab3b2b8ac449e336 Mon Sep 17 00:00:00 2001 From: David Cassany Date: Mon, 13 Jul 2026 11:50:38 +0200 Subject: [PATCH 2/3] Add unit tests base ignition configuration Signed-off-by: David Cassany --- internal/config/config_test.go | 9 ++++ internal/config/ignition_test.go | 55 ++++++++++++++++++++++++ internal/customize/customize_test.go | 62 ++++++++++++++++++++++++++++ 3 files changed, 126 insertions(+) diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 19e9a3a9..6994ff6c 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -18,6 +18,8 @@ limitations under the License. package config_test import ( + "path/filepath" + . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -26,6 +28,13 @@ import ( sysmock "github.com/suse/elemental/v3/pkg/sys/mock" ) +var _ = Describe("Output", func() { + It("InitrdExtensionFile returns the CPIO path relative to RootPath", func() { + output := config.Output{RootPath: "/my/root"} + Expect(output.InitrdExtensionFile()).To(Equal(filepath.Join("/my/root", "initrdExt.cpio"))) + }) +}) + var _ = Describe("Schema", func() { It("Successfully loads a schema version", func() { diff --git a/internal/config/ignition_test.go b/internal/config/ignition_test.go index f09e23e6..0f1bde64 100644 --- a/internal/config/ignition_test.go +++ b/internal/config/ignition_test.go @@ -218,4 +218,59 @@ passwd: Expect(ignition).To(ContainSubstring("merge")) Expect(buffer.String()).To(ContainSubstring("translating Butane to Ignition reported non-fatal entries")) }) + + Describe("Ignition configuration as base config", func() { + BeforeEach(func() { + m = NewManager(system, nil, WithBaseConfig(true)) + }) + + It("Creates a CPIO initrd extension instead of a firstboot ignition file", func() { + conf := &image.Configuration{ + Kubernetes: kubernetes.Kubernetes{ + Config: kubernetes.Config{ + RegistriesFilePath: "/etc/kubernetes/config/registries.yaml", + }, + }, + } + + Expect(m.configureIgnition(conf, output, "", "k8sConfScript", nil)).To(Succeed()) + + ok, _ := vfs.Exists(system.FS(), filepath.Join(output.FirstbootConfigDir(), image.IgnitionFilePath())) + Expect(ok).To(BeFalse()) + + ok, _ = vfs.Exists(system.FS(), output.InitrdExtensionFile()) + Expect(ok).To(BeTrue()) + + cpioContent, err := system.FS().ReadFile(output.InitrdExtensionFile()) + Expect(err).NotTo(HaveOccurred()) + Expect(string(cpioContent)).To(ContainSubstring(ignitionFileName)) + Expect(string(cpioContent)).NotTo(ContainSubstring(ignitionFromButaneFileName)) + }) + + It("Creates a CPIO with both elemental and butane ignition files when ButaneConfig is provided", func() { + var butaneConf map[string]any + + butaneConfigString := ` +version: 1.6.0 +variant: fcos +passwd: + users: + - name: pipo + password_hash: $y$j9T$aUmgEDoFIDPhGxEe2FUjc/$C5A... +` + Expect(v0.ParseAny([]byte(butaneConfigString), &butaneConf)).To(Succeed()) + conf := &image.Configuration{ButaneConfig: butaneConf} + + Expect(m.configureIgnition(conf, output, "", "", nil)).To(Succeed()) + + ok, err := vfs.Exists(system.FS(), filepath.Join(output.FirstbootConfigDir(), image.IgnitionFilePath())) + Expect(err).NotTo(HaveOccurred()) + Expect(ok).To(BeFalse()) + + cpioContent, err := system.FS().ReadFile(output.InitrdExtensionFile()) + Expect(err).NotTo(HaveOccurred()) + Expect(string(cpioContent)).To(ContainSubstring(ignitionFileName)) + Expect(string(cpioContent)).To(ContainSubstring(ignitionFromButaneFileName)) + }) + }) }) diff --git a/internal/customize/customize_test.go b/internal/customize/customize_test.go index f48397a1..656bddb3 100644 --- a/internal/customize/customize_test.go +++ b/internal/customize/customize_test.go @@ -271,6 +271,68 @@ disks: Expect(len(customizeDeployment.Disks[0].Partitions)).To(Equal(0)) }) + It("includes initrd extension in deployment when CPIO file exists", func() { + Expect(fs.WriteFile(output.InitrdExtensionFile(), []byte("fake cpio content"), vfs.FilePerm)).To(Succeed()) + + customizeDeployment := &deployment.Deployment{} + customizeRunner.Media = &mediaMock{ + customizeFunc: func(d *deployment.Deployment) error { + customizeDeployment = d + return nil + }, + } + + def := &image.Definition{ + Image: image.Image{ + ImageType: "iso", + }, + Configuration: &image.Configuration{ + Installation: install.Installation{ + Bootloader: "grub", + ISO: install.ISO{ + Device: "/dev/sda", + }, + }, + }, + } + + Expect(vfs.MkdirAll(fs, output.FirstbootConfigDir(), vfs.DirPerm)).To(Succeed()) + + err := customizeRunner.Run(context.Background(), def, output) + Expect(err).ToNot(HaveOccurred()) + Expect(customizeDeployment.BootConfig.InitrdExtensions).To(Equal([]string{output.InitrdExtensionFile()})) + }) + + It("does not include initrd extensions in deployment when no CPIO file exists", func() { + customizeDeployment := &deployment.Deployment{} + customizeRunner.Media = &mediaMock{ + customizeFunc: func(d *deployment.Deployment) error { + customizeDeployment = d + return nil + }, + } + + def := &image.Definition{ + Image: image.Image{ + ImageType: "iso", + }, + Configuration: &image.Configuration{ + Installation: install.Installation{ + Bootloader: "grub", + ISO: install.ISO{ + Device: "/dev/sda", + }, + }, + }, + } + + Expect(vfs.MkdirAll(fs, output.FirstbootConfigDir(), vfs.DirPerm)).To(Succeed()) + + err := customizeRunner.Run(context.Background(), def, output) + Expect(err).ToNot(HaveOccurred()) + Expect(customizeDeployment.BootConfig.InitrdExtensions).To(BeEmpty()) + }) + It("fails to configure components", func() { customizeRunner.ConfigManager = &configManagerMock{ configFunc: func(ctx context.Context, conf *image.Configuration, output config.Output) (*resolver.ResolvedManifest, error) { From dc5da9c808a039fb528572bb30c3e442f8f6f2dd Mon Sep 17 00:00:00 2001 From: David Cassany Date: Mon, 13 Jul 2026 17:33:12 +0200 Subject: [PATCH 3/3] Make config partition label dynamic Use 'ignition' label only if there is the user ignition configuration included. Otherwise it uses the 'CATALYST' label. This allows to attacth an additional 'ignition' device at boot time to provide user Ignition configuration. Signed-off-by: David Cassany --- internal/build/build.go | 8 +++++++- internal/customize/customize.go | 6 +++++- internal/customize/customize_test.go | 17 ++++++++++++++--- pkg/deployment/deployment.go | 9 +++++---- pkg/deployment/deployment_test.go | 4 ++-- pkg/deployment/merge_test.go | 2 +- pkg/repart/disk_repart_test.go | 2 +- 7 files changed, 35 insertions(+), 13 deletions(-) diff --git a/internal/build/build.go b/internal/build/build.go index 300d33e5..35c7856f 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -21,6 +21,7 @@ package build import ( "context" "fmt" + "path/filepath" "strings" "github.com/suse/elemental/v3/internal/config" @@ -141,7 +142,12 @@ func newDeployment( return nil, fmt.Errorf("computing configuration partition size: %w", err) } - deploymentOpts = append(deploymentOpts, deployment.WithConfigPartition(deployment.MiB(configSize))) + configLabel := deployment.CatalystLabel + if ignDir, _ := vfs.Exists(system.FS(), filepath.Join(output.FirstbootConfigDir(), image.IgnitionFilePath())); ignDir { + configLabel = deployment.IgnitionLabel + } + + deploymentOpts = append(deploymentOpts, deployment.WithConfigPartition(deployment.MiB(configSize), configLabel)) } d := deployment.New(deploymentOpts...) diff --git a/internal/customize/customize.go b/internal/customize/customize.go index 4139cae6..40e4ff02 100644 --- a/internal/customize/customize.go +++ b/internal/customize/customize.go @@ -182,9 +182,13 @@ func parseDeployment( if err != nil { return nil, fmt.Errorf("computing configuration partition size: %w", err) } + configLabel := deployment.CatalystLabel + if ignFile, _ := vfs.Exists(fs, filepath.Join(output.FirstbootConfigDir(), image.IgnitionFilePath())); ignFile { + configLabel = deployment.IgnitionLabel + } configPart := &deployment.Partition{ - Label: deployment.ConfigLabel, + Label: configLabel, MountPoint: deployment.ConfigMnt, Role: deployment.Config, FileSystem: deployment.Ext4, diff --git a/internal/customize/customize_test.go b/internal/customize/customize_test.go index 656bddb3..a1b177c9 100644 --- a/internal/customize/customize_test.go +++ b/internal/customize/customize_test.go @@ -187,7 +187,7 @@ disks: }, } - // Simulate first boot configuration + // Simulate first boot configuration without Ignition Expect(vfs.MkdirAll(fs, output.FirstbootConfigDir(), vfs.DirPerm)).To(Succeed()) err := customizeRunner.Run(context.Background(), def, output) @@ -201,7 +201,7 @@ disks: Expect(customizeDeployment.Disks[0].Partitions[1]).To(Equal(&deployment.Partition{})) Expect(customizeDeployment.Disks[0].Partitions[2]).To(BeNil()) Expect(customizeDeployment.Disks[0].Partitions[3]).To(Equal(&deployment.Partition{ - Label: deployment.ConfigLabel, + Label: deployment.CatalystLabel, MountPoint: deployment.ConfigMnt, Role: deployment.Config, FileSystem: deployment.Ext4, @@ -296,11 +296,22 @@ disks: }, } - Expect(vfs.MkdirAll(fs, output.FirstbootConfigDir(), vfs.DirPerm)).To(Succeed()) + // Simulate first boot configuration with Ignition file + ignFile := filepath.Join(output.FirstbootConfigDir(), image.IgnitionFilePath()) + Expect(vfs.MkdirAll(fs, filepath.Dir(ignFile), vfs.DirPerm)).To(Succeed()) + Expect(fs.WriteFile(ignFile, []byte("ignition data"), vfs.FilePerm)).To(Succeed()) err := customizeRunner.Run(context.Background(), def, output) Expect(err).ToNot(HaveOccurred()) Expect(customizeDeployment.BootConfig.InitrdExtensions).To(Equal([]string{output.InitrdExtensionFile()})) + Expect(customizeDeployment.Disks[0].Partitions[3]).To(Equal(&deployment.Partition{ + Label: deployment.IgnitionLabel, + MountPoint: deployment.ConfigMnt, + Role: deployment.Config, + FileSystem: deployment.Ext4, + Size: 256, + Hidden: true, + })) }) It("does not include initrd extensions in deployment when no CPIO file exists", func() { diff --git a/pkg/deployment/deployment.go b/pkg/deployment/deployment.go index 746d7b15..9c178103 100644 --- a/pkg/deployment/deployment.go +++ b/pkg/deployment/deployment.go @@ -63,8 +63,9 @@ const ( SystemMnt = "/" AllAvailableSize MiB = 0 - ConfigLabel = "ignition" - ConfigMnt = "/run/elemental/firstboot" + IgnitionLabel = "ignition" + CatalystLabel = "CATALYST" + ConfigMnt = "/run/elemental/firstboot" deploymentFile = "/etc/elemental/deployment.yaml" @@ -1039,10 +1040,10 @@ func WithPartitions(num int, parts ...*Partition) Opt { // to the systemd disk. The given size is the amount of data expected to store in // the partition, then the partition is sized to be aligned with 128MiB and to ensure // at least 128MiB of free space is available. -func WithConfigPartition(size MiB) Opt { +func WithConfigPartition(size MiB, label string) Opt { size = (size/128)*128 + 256 part := &Partition{ - Label: ConfigLabel, + Label: label, MountPoint: ConfigMnt, Role: Config, FileSystem: Ext4, diff --git a/pkg/deployment/deployment_test.go b/pkg/deployment/deployment_test.go index 24cb781d..484509a0 100644 --- a/pkg/deployment/deployment_test.go +++ b/pkg/deployment/deployment_test.go @@ -81,10 +81,10 @@ var _ = Describe("Deployment", Label("deployment"), func() { Expect(d.Sanitize(s)).NotTo(Succeed()) }) It("creates a default deployment with a configuration partition and without a device assigned", func() { - d := deployment.New(deployment.WithConfigPartition(127)) + d := deployment.New(deployment.WithConfigPartition(127, deployment.CatalystLabel)) d.SourceOS = deployment.NewDirSrc("/some/dir") Expect(d.Sanitize(s, deployment.CheckDiskDevice)).To(Succeed()) - Expect(d.Disks[0].Partitions[1].Label).To(Equal(deployment.ConfigLabel)) + Expect(d.Disks[0].Partitions[1].Label).To(Equal(deployment.CatalystLabel)) Expect(d.Disks[0].Partitions[1].Size).To(Equal(deployment.MiB(256))) Expect(d.Disks[0].Device).To(Equal("")) }) diff --git a/pkg/deployment/merge_test.go b/pkg/deployment/merge_test.go index f3a378ce..0c54c1ca 100644 --- a/pkg/deployment/merge_test.go +++ b/pkg/deployment/merge_test.go @@ -34,7 +34,7 @@ var _ = Describe("Deployment merge", Label("deployment"), func() { It("merges a new partition to dst deployment", func() { newPartition := &deployment.Partition{ - Label: deployment.ConfigLabel, + Label: deployment.IgnitionLabel, MountPoint: deployment.ConfigMnt, Role: deployment.Config, FileSystem: deployment.Btrfs, diff --git a/pkg/repart/disk_repart_test.go b/pkg/repart/disk_repart_test.go index 9122d2fc..da3293fc 100644 --- a/pkg/repart/disk_repart_test.go +++ b/pkg/repart/disk_repart_test.go @@ -177,7 +177,7 @@ var _ = Describe("Systemd-repart tests", Label("systemd-repart"), func() { It("fails if systemd-repart reports partitions not matching the deployment", func() { d := deployment.DefaultDeployment() - deployment.WithConfigPartition(0)(d) + deployment.WithConfigPartition(0, "configLabel")(d) Expect(len(d.Disks)).To(Equal(1)) d.Disks[0].Device = "/dev/device" Expect(repart.PartitionAndFormatDevice(s, d.Disks[0])).To(