diff --git a/pkg/distro/fedora/distro_test.go b/pkg/distro/fedora/distro_test.go index e7a4e65d21..fdbf859bcd 100644 --- a/pkg/distro/fedora/distro_test.go +++ b/pkg/distro/fedora/distro_test.go @@ -1032,3 +1032,40 @@ func TestDistroFactory(t *testing.T) { }) } } + +func TestDistro_DiskCustomizationRunsValidateLayoutConstraints(t *testing.T) { + bp := blueprint.Blueprint{ + Customizations: &blueprint.Customizations{ + Disk: &blueprint.DiskCustomization{ + Partitions: []blueprint.PartitionCustomization{ + { + Type: "lvm", + VGCustomization: blueprint.VGCustomization{}, + }, + { + Type: "lvm", + VGCustomization: blueprint.VGCustomization{}, + }, + }, + }, + }, + } + + for _, dist := range fedoraFamilyDistros { + fedoraDistro := dist.distro + for _, archName := range fedoraDistro.ListArches() { + arch, err := fedoraDistro.GetArch(archName) + assert.NoError(t, err) + imgType, err := arch.GetImageType("qcow2") + assert.NoError(t, err, archName) + t.Run(fmt.Sprintf("%s/%s", archName, imgType.Name()), func(t *testing.T) { + imgType, _ := arch.GetImageType(imgType.Name()) + imgOpts := distro.ImageOptions{ + Size: imgType.Size(0), + } + _, _, err := imgType.Manifest(&bp, imgOpts, nil, 0) + assert.EqualError(t, err, "cannot use disk customization: multiple LVM volume groups are not yet supported") + }) + } + } +} diff --git a/pkg/distro/fedora/imagetype.go b/pkg/distro/fedora/imagetype.go index 720e863b81..8738158d1a 100644 --- a/pkg/distro/fedora/imagetype.go +++ b/pkg/distro/fedora/imagetype.go @@ -468,5 +468,13 @@ func (t *imageType) checkOptions(bp *blueprint.Blueprint, options distro.ImageOp } } + diskc, err := customizations.GetPartitioning() + if err != nil { + return nil, err + } + if err := diskc.ValidateLayoutConstraints(); err != nil { + return nil, fmt.Errorf("cannot use disk customization: %w", err) + } + return nil, nil }