From 2729f6ac543549bc176854eef72829491a159de4 Mon Sep 17 00:00:00 2001 From: "Brian C. Lane" Date: Thu, 5 Oct 2023 15:05:58 -0700 Subject: [PATCH] blueprint: Add partitioning_mode customization --- internal/blueprint/customizations.go | 23 ++++++++++++++++ internal/blueprint/customizations_test.go | 32 +++++++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/internal/blueprint/customizations.go b/internal/blueprint/customizations.go index 5ecae8451..eafaab413 100644 --- a/internal/blueprint/customizations.go +++ b/internal/blueprint/customizations.go @@ -4,6 +4,8 @@ import ( "fmt" "reflect" "strings" + + "github.com/osbuild/images/pkg/disk" ) type Customizations struct { @@ -18,6 +20,7 @@ type Customizations struct { Services *ServicesCustomization `json:"services,omitempty" toml:"services,omitempty"` Filesystem []FilesystemCustomization `json:"filesystem,omitempty" toml:"filesystem,omitempty"` InstallationDevice string `json:"installation_device,omitempty" toml:"installation_device,omitempty"` + PartitioningMode string `json:"partitioning_mode,omitempty" toml:"partitioning_mode,omitempty"` FDO *FDOCustomization `json:"fdo,omitempty" toml:"fdo,omitempty"` OpenSCAP *OpenSCAPCustomization `json:"openscap,omitempty" toml:"openscap,omitempty"` Ignition *IgnitionCustomization `json:"ignition,omitempty" toml:"ignition,omitempty"` @@ -300,6 +303,26 @@ func (c *Customizations) GetFilesystemsMinSize() uint64 { return agg } +// GetPartitioningMode converts the string to a disk.PartitioningMode type +func (c *Customizations) GetPartitioningMode() (disk.PartitioningMode, error) { + if c == nil { + return disk.DefaultPartitioningMode, nil + } + + switch c.PartitioningMode { + case "raw": + return disk.RawPartitioningMode, nil + case "lvm": + return disk.LVMPartitioningMode, nil + case "auto-lvm": + return disk.AutoLVMPartitioningMode, nil + case "": + return disk.DefaultPartitioningMode, nil + default: + return disk.DefaultPartitioningMode, fmt.Errorf("invalid partitioning mode '%s'", c.PartitioningMode) + } +} + func (c *Customizations) GetInstallationDevice() string { if c == nil || c.InstallationDevice == "" { return "" diff --git a/internal/blueprint/customizations_test.go b/internal/blueprint/customizations_test.go index a4b26821b..fbbb1135a 100644 --- a/internal/blueprint/customizations_test.go +++ b/internal/blueprint/customizations_test.go @@ -3,6 +3,7 @@ package blueprint import ( "testing" + "github.com/osbuild/images/pkg/disk" "github.com/stretchr/testify/assert" ) @@ -387,3 +388,34 @@ func TestGetOpenSCAPConfig(t *testing.T) { assert.EqualValues(t, expectedOscap, *retOpenSCAPCustomiztions) } + +func TestGetPartitioningMode(t *testing.T) { + // No customizations returns Default which is actually AutoLVM, + // but that is handled by the images code + var c *Customizations + pm, err := c.GetPartitioningMode() + assert.NoError(t, err) + assert.Equal(t, disk.DefaultPartitioningMode, pm) + + // Empty defaults to Default which is actually AutoLVM, + // but that is handled by the images code + c = &Customizations{} + _, err = c.GetPartitioningMode() + assert.NoError(t, err) + assert.Equal(t, disk.DefaultPartitioningMode, pm) + + // Unknown mode returns an error + c = &Customizations{ + PartitioningMode: "all-of-them", + } + _, err = c.GetPartitioningMode() + assert.Error(t, err) + + // And a known mode returns the correct type + c = &Customizations{ + PartitioningMode: "lvm", + } + pm, err = c.GetPartitioningMode() + assert.NoError(t, err) + assert.Equal(t, disk.LVMPartitioningMode, pm) +}