diff --git a/pkg/distro/defs/loader.go b/pkg/distro/defs/loader.go index 5587ef37dd..2182678047 100644 --- a/pkg/distro/defs/loader.go +++ b/pkg/distro/defs/loader.go @@ -104,6 +104,9 @@ type DistroYAML struct { // based on the distro, ideally it would not have this but // here we are. DistroLike manifest.Distro `yaml:"distro_like"` + + // set by the loader + ID distro.ID } func (d *DistroYAML) ImageTypes() map[string]ImageTypeYAML { @@ -118,10 +121,8 @@ func (d *DistroYAML) ImageConfig() *distro.ImageConfig { } func (d *DistroYAML) SkipImageType(imgTypeName, archName string) bool { - id := common.Must(distro.ParseID(d.Name)) - for _, cond := range d.Conditions { - if cond.When.Eval(id, archName) && slices.Contains(cond.IgnoreImageTypes, imgTypeName) { + if cond.When.Eval(d.ID, archName) && slices.Contains(cond.IgnoreImageTypes, imgTypeName) { return true } } @@ -129,12 +130,7 @@ func (d *DistroYAML) SkipImageType(imgTypeName, archName string) bool { return false } -func (d *DistroYAML) runTemplates(nameVer string) error { - id, err := distro.ParseID(nameVer) - if err != nil { - return err - } - +func (d *DistroYAML) runTemplates(id distro.ID) error { var errs []error subs := func(inp string) string { var buf bytes.Buffer @@ -193,11 +189,6 @@ func NewDistroYAML(nameVer string) (*DistroYAML, error) { return nil, err } - // ParseID will also canonicalize the name - if id, err := ParseID(nameVer); err == nil && id != nil { - nameVer = id.String() - } - var foundDistro *DistroYAML for _, distro := range distros.Distros { if distro.Name == nameVer { @@ -219,7 +210,13 @@ func NewDistroYAML(nameVer string) (*DistroYAML, error) { if foundDistro == nil { return nil, nil } - if err := foundDistro.runTemplates(nameVer); err != nil { + // having "foundDistro.id" avoid re-parsing this in the various helpers + id, err := distro.ParseID(nameVer) + if err != nil { + return nil, err + } + foundDistro.ID = *id + if err := foundDistro.runTemplates(*id); err != nil { return nil, err } @@ -247,10 +244,7 @@ func NewDistroYAML(nameVer string) (*DistroYAML, error) { foundDistro.imageTypes[name] = v } } - foundDistro.imageConfig, err = toplevel.ImageConfig.For(nameVer) - if err != nil { - return nil, err - } + foundDistro.imageConfig = toplevel.ImageConfig.For(foundDistro.ID) return foundDistro, nil } @@ -279,7 +273,7 @@ type whenCondition struct { VersionEqual string `yaml:"version_equal,omitempty"` } -func (wc *whenCondition) Eval(id *distro.ID, archStr string) bool { +func (wc *whenCondition) Eval(id distro.ID, archStr string) bool { match := true if wc.DistroName != "" { @@ -292,10 +286,10 @@ func (wc *whenCondition) Eval(id *distro.ID, archStr string) bool { match = match && (wc.Architecture == archStr) } if wc.VersionLessThan != "" { - match = match && (common.VersionLessThan(versionStringForVerCmp(*id), wc.VersionLessThan)) + match = match && (common.VersionLessThan(versionStringForVerCmp(id), wc.VersionLessThan)) } if wc.VersionGreaterOrEqual != "" { - match = match && (common.VersionGreaterThanOrEqual(versionStringForVerCmp(*id), wc.VersionGreaterOrEqual)) + match = match && (common.VersionGreaterThanOrEqual(versionStringForVerCmp(id), wc.VersionGreaterOrEqual)) } if wc.VersionEqual != "" { match = match && (id.VersionString() == wc.VersionEqual) @@ -304,14 +298,10 @@ func (wc *whenCondition) Eval(id *distro.ID, archStr string) bool { return match } -func (di *distroImageConfig) For(nameVer string) (*distro.ImageConfig, error) { +func (di *distroImageConfig) For(id distro.ID) *distro.ImageConfig { imgConfig := di.Default if di.Conditions != nil { - id, err := distro.ParseID(nameVer) - if err != nil { - return nil, err - } for _, cond := range di.Conditions { // distro image config cannot have architecure // specific conditions @@ -322,7 +312,7 @@ func (di *distroImageConfig) For(nameVer string) (*distro.ImageConfig, error) { } } - return imgConfig, nil + return imgConfig } type distroImageConfigConditions struct { @@ -409,13 +399,9 @@ func (it *ImageTypeYAML) Name() string { return it.name } -func (it *ImageTypeYAML) PlatformsFor(distroNameVer string) ([]platform.PlatformConf, error) { +func (it *ImageTypeYAML) PlatformsFor(id distro.ID) ([]platform.PlatformConf, error) { pl := it.InternalPlatforms if it.PlatformsOverride != nil { - id, err := distro.ParseID(distroNameVer) - if err != nil { - return nil, err - } var nMatches int for _, cond := range it.PlatformsOverride.Conditions { // arch does not make sense for platform overrides @@ -548,7 +534,7 @@ func versionStringForVerCmp(u distro.ID) string { // PackageSets loads the PackageSets from the yaml source file // discovered via the imagetype. -func (imgType *ImageTypeYAML) PackageSets(distroNameVer, archName string) (map[string]rpmmd.PackageSet, error) { +func (imgType *ImageTypeYAML) PackageSets(id distro.ID, archName string) map[string]rpmmd.PackageSet { res := make(map[string]rpmmd.PackageSet) for key, pkgSets := range imgType.PackageSetsYAML { var rpmmdPkgSet rpmmd.PackageSet @@ -559,11 +545,6 @@ func (imgType *ImageTypeYAML) PackageSets(distroNameVer, archName string) (map[s }) if pkgSet.Conditions != nil { - id, err := distro.ParseID(distroNameVer) - if err != nil { - return nil, err - } - for _, cond := range pkgSet.Conditions { if cond.When.Eval(id, archName) { rpmmdPkgSet = rpmmdPkgSet.Append(rpmmd.PackageSet{ @@ -580,24 +561,20 @@ func (imgType *ImageTypeYAML) PackageSets(distroNameVer, archName string) (map[s res[key] = rpmmdPkgSet } - return res, nil + return res } // PartitionTable returns the partionTable for the given distro/imgType. -func (imgType *ImageTypeYAML) PartitionTable(distroNameVer, archName string) (*disk.PartitionTable, error) { +func (imgType *ImageTypeYAML) PartitionTable(id distro.ID, archName string) (*disk.PartitionTable, error) { if imgType.PartitionTables == nil { - return nil, fmt.Errorf("%w: %q", ErrNoPartitionTableForImgType, distroNameVer) + return nil, fmt.Errorf("%w: %q", ErrNoPartitionTableForImgType, id) } pt, ok := imgType.PartitionTables[archName] if !ok { - return nil, fmt.Errorf("%w (%q): %q", ErrNoPartitionTableForArch, distroNameVer, archName) + return nil, fmt.Errorf("%w (%q): %q", ErrNoPartitionTableForArch, id, archName) } if imgType.PartitionTablesOverrides != nil { - id, err := distro.ParseID(distroNameVer) - if err != nil { - return nil, err - } for _, cond := range imgType.PartitionTablesOverrides.Conditions { if cond.When.Eval(id, archName) { pt = cond.Override[archName] @@ -609,43 +586,28 @@ func (imgType *ImageTypeYAML) PartitionTable(distroNameVer, archName string) (*d } // ImageConfig returns the image type specific ImageConfig -func (imgType *ImageTypeYAML) ImageConfig(distroNameVer, archName string) (*distro.ImageConfig, error) { +func (imgType *ImageTypeYAML) ImageConfig(id distro.ID, archName string) *distro.ImageConfig { imgConfig := imgType.ImageConfigYAML.ImageConfig - condMap := imgType.ImageConfigYAML.Conditions - if condMap != nil { - id, err := distro.ParseID(distroNameVer) - if err != nil { - return nil, err - } + for _, cond := range imgType.ImageConfigYAML.Conditions { + if cond.When.Eval(id, archName) { + imgConfig = cond.ShallowMerge.InheritFrom(imgConfig) - for _, cond := range condMap { - if cond.When.Eval(id, archName) { - imgConfig = cond.ShallowMerge.InheritFrom(imgConfig) - } } } - return imgConfig, nil + return imgConfig } // InstallerConfig returns the InstallerConfig for the given imgType // Note that on conditions the InstallerConfig is fully replaced, do // any merging in YAML -func (imgType *ImageTypeYAML) InstallerConfig(distroNameVer, archName string) (*distro.InstallerConfig, error) { +func (imgType *ImageTypeYAML) InstallerConfig(id distro.ID, archName string) *distro.InstallerConfig { installerConfig := imgType.InstallerConfigYAML.InstallerConfig - condMap := imgType.InstallerConfigYAML.Conditions - if condMap != nil { - id, err := distro.ParseID(distroNameVer) - if err != nil { - return nil, err - } - - for _, cond := range condMap { - if cond.When.Eval(id, archName) { - installerConfig = cond.ShallowMerge.InheritFrom(installerConfig) - } + for _, cond := range imgType.InstallerConfigYAML.Conditions { + if cond.When.Eval(id, archName) { + installerConfig = cond.ShallowMerge.InheritFrom(installerConfig) } } - return installerConfig, nil + return installerConfig } diff --git a/pkg/distro/defs/loader_test.go b/pkg/distro/defs/loader_test.go index d893e281d8..e3ac7f5504 100644 --- a/pkg/distro/defs/loader_test.go +++ b/pkg/distro/defs/loader_test.go @@ -119,8 +119,7 @@ image_types: ` it := makeTestImageType(t, fakePkgsSetYaml) - pkgSet, err := it.PackageSets("test-distro-1", "x86_64") - assert.NoError(t, err) + pkgSet := it.PackageSets(distro.ID{Name: "test-distro", MajorVersion: 1}, "x86_64") assert.Equal(t, map[string]rpmmd.PackageSet{ "os": { Include: []string{"from-condition-inc2", "inc1"}, @@ -209,8 +208,7 @@ image_types: ` it := makeTestImageType(t, fakePkgsSetYaml) - pkgSet, err := it.PackageSets("test-distro-1", "x86_64") - assert.NoError(t, err) + pkgSet := it.PackageSets(distro.ID{Name: "test-distro", MajorVersion: 1}, "x86_64") assert.Equal(t, map[string]rpmmd.PackageSet{ "os": { Include: []string{"from-base-condition-inc", "from-base-inc", "from-condition-inc", "from-other-type-inc", "from-type-inc"}, @@ -264,7 +262,7 @@ image_types: ` it := makeTestImageType(t, fakeDistroYaml) - partTable, err := it.PartitionTable("test-distro-1", "test_arch") + partTable, err := it.PartitionTable(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") require.NoError(t, err) assert.Equal(t, &disk.PartitionTable{ Size: 1_000_000_000, @@ -381,7 +379,7 @@ image_types: func TestDefsPartitionTableOverrideGreatEqual(t *testing.T) { it := makeTestImageType(t, fakeImageTypesYaml) - partTable, err := it.PartitionTable("test-distro-1", "test_arch") + partTable, err := it.PartitionTable(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") require.NoError(t, err) assert.Equal(t, &disk.PartitionTable{ Size: 1_000_000_000, @@ -441,7 +439,7 @@ image_types: ` it := makeTestImageType(t, fakeDistroYaml) - partTable, err := it.PartitionTable("test-distro-1", "test_arch") + partTable, err := it.PartitionTable(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") require.NoError(t, err) assert.Equal(t, &disk.PartitionTable{ Size: 1_000_000_000, @@ -488,7 +486,7 @@ image_types: ` it := makeTestImageType(t, fakeDistroYaml) - partTable, err := it.PartitionTable("test-distro-1", "test_arch") + partTable, err := it.PartitionTable(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") require.NoError(t, err) assert.Equal(t, &disk.PartitionTable{ Partitions: []disk.Partition{ @@ -552,7 +550,7 @@ image_types: } { it := makeTestImageType(t, tc.badYaml) - _, err := it.PartitionTable("test-distro-1", "test_arch") + _, err := it.PartitionTable(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") assert.ErrorIs(t, err, tc.expectedErr) } } @@ -595,8 +593,7 @@ image_types: ` it := makeTestImageType(t, fakeDistroYaml) - imgConfig, err := it.ImageConfig("test-distro-1", "test_arch") - require.NoError(t, err) + imgConfig := it.ImageConfig(distro.ID{Name: "test-distro", MajorVersion: 1, MinorVersion: -1}, "test_arch") assert.Equal(t, &distro.ImageConfig{ Hostname: common.ToPtr("test-arch-hn"), Locale: common.ToPtr("en_US.UTF-8"), @@ -702,8 +699,7 @@ image_types: func TestImageTypeInstallerConfig(t *testing.T) { it := makeTestImageType(t, fakeDistroYamlInstallerConf) - installerConfig, err := it.InstallerConfig("test-distro-1", "test_arch") - require.NoError(t, err) + installerConfig := it.InstallerConfig(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") assert.Equal(t, &distro.InstallerConfig{ AdditionalDracutModules: []string{"base-dracut-mod1"}, AdditionalDrivers: []string{"base-drv1"}, @@ -723,8 +719,7 @@ func TestImageTypeInstallerConfigMergeVerLT(t *testing.T) { ` it := makeTestImageType(t, fakeDistroYaml) - installerConfig, err := it.InstallerConfig("test-distro-1", "test_arch") - require.NoError(t, err) + installerConfig := it.InstallerConfig(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") assert.Equal(t, &distro.InstallerConfig{ // AdditionalDrivers,SquashfsRootfs merged from parent AdditionalDrivers: []string{"base-drv1"}, @@ -747,8 +742,7 @@ func TestImageTypeInstallerConfigMergeDistroName(t *testing.T) { ` it := makeTestImageType(t, fakeDistroYaml) - installerConfig, err := it.InstallerConfig("test-distro-1", "test_arch") - require.NoError(t, err) + installerConfig := it.InstallerConfig(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") assert.Equal(t, &distro.InstallerConfig{ AdditionalDracutModules: []string{"override-dracut-mod1"}, AdditionalDrivers: []string{"override-drv1"}, @@ -769,8 +763,7 @@ func TestImageTypeInstallerConfigMergeArch(t *testing.T) { ` it := makeTestImageType(t, fakeDistroYaml) - installerConfig, err := it.InstallerConfig("test-distro-1", "test_arch") - require.NoError(t, err) + installerConfig := it.InstallerConfig(distro.ID{Name: "test-distro", MajorVersion: 1}, "test_arch") assert.Equal(t, &distro.InstallerConfig{ AdditionalDrivers: []string{"override-drv1"}, // AdditionalDracutModules,SquashfsRootfs merged from parent @@ -841,9 +834,9 @@ func TestDistrosLoadingExact(t *testing.T) { restore := defs.MockDataFS(baseDir) defer restore() - distro, err := defs.NewDistroYAML("fedora-43") + dist, err := defs.NewDistroYAML("fedora-43") require.NoError(t, err) - assert.Equal(t, &defs.DistroYAML{ + assert.Equal(t, dist, &defs.DistroYAML{ Name: "fedora-43", Preview: true, OsVersion: "43", @@ -863,11 +856,12 @@ func TestDistrosLoadingExact(t *testing.T) { OscapProfilesAllowList: []oscap.Profile{ oscap.Ospp, }, - }, distro) + ID: distro.ID{Name: "fedora", MajorVersion: 43, MinorVersion: -1}, + }) - distro, err = defs.NewDistroYAML("centos-10") + dist, err = defs.NewDistroYAML("centos-10") require.NoError(t, err) - assert.Equal(t, &defs.DistroYAML{ + assert.Equal(t, dist, &defs.DistroYAML{ Name: "centos-10", Vendor: "centos", OsVersion: "10-stream", @@ -877,7 +871,8 @@ func TestDistrosLoadingExact(t *testing.T) { OSTreeRefTmpl: "centos/10/%s/edge", DefsPath: "rhel-10", DefaultFSType: disk.FS_XFS, - }, distro) + ID: distro.ID{Name: "centos", MajorVersion: 10, MinorVersion: -1}, + }) } func TestDistrosLoadingFactoryCompat(t *testing.T) { @@ -885,9 +880,9 @@ func TestDistrosLoadingFactoryCompat(t *testing.T) { restore := defs.MockDataFS(baseDir) defer restore() - distro, err := defs.NewDistroYAML("rhel-10.1") + dist, err := defs.NewDistroYAML("rhel-10.1") require.NoError(t, err) - assert.Equal(t, &defs.DistroYAML{ + assert.Equal(t, dist, &defs.DistroYAML{ Name: "rhel-10.1", Match: "rhel-10.*", Vendor: "redhat", @@ -898,11 +893,12 @@ func TestDistrosLoadingFactoryCompat(t *testing.T) { OSTreeRefTmpl: "rhel/10/%s/edge", DefsPath: "rhel-10", DefaultFSType: disk.FS_XFS, - }, distro) + ID: distro.ID{Name: "rhel", MajorVersion: 10, MinorVersion: 1}, + }) - distro, err = defs.NewDistroYAML("fedora-40") + dist, err = defs.NewDistroYAML("fedora-40") require.NoError(t, err) - assert.Equal(t, &defs.DistroYAML{ + assert.Equal(t, dist, &defs.DistroYAML{ Name: "fedora-40", Match: "fedora-[0-9]*", OsVersion: "40", @@ -922,7 +918,8 @@ func TestDistrosLoadingFactoryCompat(t *testing.T) { OscapProfilesAllowList: []oscap.Profile{ oscap.Ospp, }, - }, distro) + ID: distro.ID{Name: "fedora", MajorVersion: 40, MinorVersion: -1}, + }) } func TestDistroYAMLCondition(t *testing.T) { @@ -998,18 +995,18 @@ func TestDistrosLoadingNotFound(t *testing.T) { func TestWhenConditionEvalEmpty(t *testing.T) { wc := &defs.WhenCondition{} - assert.Equal(t, wc.Eval(&distro.ID{Name: "foo"}, "arch"), true) + assert.Equal(t, wc.Eval(distro.ID{Name: "foo"}, "arch"), true) } func TestWhenConditionEvalSimple(t *testing.T) { wc := &defs.WhenCondition{DistroName: "distro"} - assert.Equal(t, wc.Eval(&distro.ID{Name: "distro"}, "other-arch"), true) + assert.Equal(t, wc.Eval(distro.ID{Name: "distro"}, "other-arch"), true) } func TestWhenConditionEvalAnd(t *testing.T) { wc := &defs.WhenCondition{DistroName: "distro", Architecture: "arch"} - assert.Equal(t, wc.Eval(&distro.ID{Name: "distro"}, "other-arch"), false) - assert.Equal(t, wc.Eval(&distro.ID{Name: "distro"}, "arch"), true) + assert.Equal(t, wc.Eval(distro.ID{Name: "distro"}, "other-arch"), false) + assert.Equal(t, wc.Eval(distro.ID{Name: "distro"}, "arch"), true) } func TestImageTypesPlatformOverrides(t *testing.T) { @@ -1058,7 +1055,7 @@ distros: imgTypes := distro.ImageTypes() assert.Len(t, imgTypes, 1) imgType := imgTypes["server-qcow2"] - platforms, err := imgType.PlatformsFor(tc.distroNameVer) + platforms, err := imgType.PlatformsFor(distro.ID) assert.NoError(t, err) assert.Equal(t, []platform.PlatformConf{ { @@ -1100,8 +1097,7 @@ image_types: imgTypes := distro.ImageTypes() assert.Len(t, imgTypes, 1) imgType := imgTypes["test_type"] - require.NotNil(t, imgType) - _, err = imgType.PlatformsFor("test-distro-1") + _, err = imgType.PlatformsFor(distro.ID) assert.EqualError(t, err, `platform conditionals for image type "test_type" should match only once but matched 2 times`) } @@ -1130,14 +1126,15 @@ distros: {"rhel-8.10", "rhel-8.10", "8.10"}, {"rhel-810", "rhel-8.10", "8.10"}, } { - distro, err := defs.NewDistroYAML(tc.nameVer) + dist, err := defs.NewDistroYAML(tc.nameVer) require.NoError(t, err) - assert.Equal(t, &defs.DistroYAML{ + assert.Equal(t, dist, &defs.DistroYAML{ Name: tc.expectedDistroNameVer, Match: `(?Prhel)-(?P8)\.?(?P[0-9]+)`, OsVersion: tc.expectedOsVersion, ReleaseVersion: "8", ModulePlatformID: "platform:el8", - }, distro) + ID: *common.Must(distro.ParseID(tc.expectedDistroNameVer)), + }) } } diff --git a/pkg/distro/generic/distro.go b/pkg/distro/generic/distro.go index d5cba182de..4f8e0bc7dc 100644 --- a/pkg/distro/generic/distro.go +++ b/pkg/distro/generic/distro.go @@ -88,7 +88,7 @@ func newDistro(nameVer string) (distro.Distro, error) { if imgTypeYAML.Filename == "" { continue } - platforms, err := imgTypeYAML.PlatformsFor(nameVer) + platforms, err := imgTypeYAML.PlatformsFor(distroYAML.ID) if err != nil { return nil, err } diff --git a/pkg/distro/generic/images.go b/pkg/distro/generic/images.go index 4ff575a458..2d424e5110 100644 --- a/pkg/distro/generic/images.go +++ b/pkg/distro/generic/images.go @@ -26,10 +26,9 @@ import ( ) func osCustomizations(t *imageType, osPackageSet rpmmd.PackageSet, options distro.ImageOptions, containers []container.SourceSpec, c *blueprint.Customizations) (manifest.OSCustomizations, error) { - imageConfig := t.getDefaultImageConfig() - osc := manifest.OSCustomizations{} + imageConfig := t.getDefaultImageConfig() if t.ImageTypeYAML.Bootable || t.ImageTypeYAML.RPMOSTree { // TODO: for now the only image types that define a default kernel are // ones that use UKIs and don't allow overriding, so this works. @@ -326,10 +325,9 @@ func ostreeDeploymentCustomizations( if !t.ImageTypeYAML.RPMOSTree || !t.ImageTypeYAML.Bootable { return manifest.OSTreeDeploymentCustomizations{}, fmt.Errorf("ostree deployment customizations are only supported for bootable rpm-ostree images") } - - imageConfig := t.getDefaultImageConfig() deploymentConf := manifest.OSTreeDeploymentCustomizations{} + imageConfig := t.getDefaultImageConfig() kernelOptions := imageConfig.KernelOptions if bpKernel := c.GetKernel(); bpKernel != nil && bpKernel.Append != "" { kernelOptions = append(kernelOptions, bpKernel.Append) @@ -523,13 +521,14 @@ func liveInstallerImage(workload workload.Workload, img.Filename = t.Filename() - if locale := t.getDefaultImageConfig().Locale; locale != nil { + imgConfig := t.getDefaultImageConfig() + if locale := imgConfig.Locale; locale != nil { img.Locale = *locale } - if isoroot := t.getDefaultImageConfig().ISORootfsType; isoroot != nil { + if isoroot := imgConfig.ISORootfsType; isoroot != nil { img.RootfsType = *isoroot } - if isoboot := t.getDefaultImageConfig().ISOBootType; isoboot != nil { + if isoboot := imgConfig.ISOBootType; isoboot != nil { img.ISOBoot = *isoboot } @@ -633,10 +632,11 @@ func imageInstallerImage(workload workload.Workload, img.Filename = t.Filename() img.RootfsCompression = "xz" // This also triggers using the bcj filter - if isoroot := t.getDefaultImageConfig().ISORootfsType; isoroot != nil { + imgConfig := t.getDefaultImageConfig() + if isoroot := imgConfig.ISORootfsType; isoroot != nil { img.RootfsType = *isoroot } - if isoboot := t.getDefaultImageConfig().ISOBootType; isoboot != nil { + if isoboot := imgConfig.ISOBootType; isoboot != nil { img.ISOBoot = *isoboot } @@ -665,11 +665,9 @@ func iotCommitImage(workload workload.Workload, } imgConfig := t.getDefaultImageConfig() - if imgConfig != nil { - img.OSCustomizations.Presets = imgConfig.Presets - if imgConfig.InstallWeakDeps != nil { - img.InstallWeakDeps = *imgConfig.InstallWeakDeps - } + img.OSCustomizations.Presets = imgConfig.Presets + if imgConfig.InstallWeakDeps != nil { + img.InstallWeakDeps = *imgConfig.InstallWeakDeps } img.Environment = &t.ImageTypeYAML.Environment @@ -741,11 +739,9 @@ func iotContainerImage(workload workload.Workload, } imgConfig := t.getDefaultImageConfig() - if imgConfig != nil { - img.OSCustomizations.Presets = imgConfig.Presets - if imgConfig.InstallWeakDeps != nil { - img.OSCustomizations.InstallWeakDeps = *imgConfig.InstallWeakDeps - } + img.OSCustomizations.Presets = imgConfig.Presets + if imgConfig.InstallWeakDeps != nil { + img.OSCustomizations.InstallWeakDeps = *imgConfig.InstallWeakDeps } img.ContainerLanguage = img.OSCustomizations.Language @@ -837,13 +833,14 @@ func iotInstallerImage(workload workload.Workload, img.Filename = t.Filename() img.RootfsCompression = "xz" // This also triggers using the bcj filter - if locale := t.getDefaultImageConfig().Locale; locale != nil { + imgConfig := t.getDefaultImageConfig() + if locale := imgConfig.Locale; locale != nil { img.Locale = *locale } - if isoroot := t.getDefaultImageConfig().ISORootfsType; isoroot != nil { + if isoroot := imgConfig.ISORootfsType; isoroot != nil { img.RootfsType = *isoroot } - if isoboot := t.getDefaultImageConfig().ISOBootType; isoboot != nil { + if isoboot := imgConfig.ISOBootType; isoboot != nil { img.ISOBoot = *isoboot } diff --git a/pkg/distro/generic/imagetype.go b/pkg/distro/generic/imagetype.go index 5197c42988..2b87dc043c 100644 --- a/pkg/distro/generic/imagetype.go +++ b/pkg/distro/generic/imagetype.go @@ -153,7 +153,7 @@ func (t *imageType) BootMode() platform.BootMode { } func (t *imageType) BasePartitionTable() (*disk.PartitionTable, error) { - return t.ImageTypeYAML.PartitionTable(t.arch.distro.Name(), t.arch.name) + return t.ImageTypeYAML.PartitionTable(t.arch.distro.ID, t.arch.name) } func (t *imageType) getPartitionTable(customizations *blueprint.Customizations, options distro.ImageOptions, rng *rand.Rand) (*disk.PartitionTable, error) { @@ -191,7 +191,7 @@ func (t *imageType) getPartitionTable(customizations *blueprint.Customizations, } func (t *imageType) getDefaultImageConfig() *distro.ImageConfig { - imageConfig := common.Must(t.ImageConfig(t.arch.distro.Name(), t.arch.name)) + imageConfig := t.ImageConfig(t.arch.distro.ID, t.arch.name) return imageConfig.InheritFrom(t.arch.distro.ImageConfig()) } @@ -200,7 +200,7 @@ func (t *imageType) getDefaultInstallerConfig() (*distro.InstallerConfig, error) if !t.ImageTypeYAML.BootISO { return nil, fmt.Errorf("image type %q is not an ISO", t.Name()) } - return t.InstallerConfig(t.arch.distro.Name(), t.arch.name) + return t.InstallerConfig(t.arch.distro.ID, t.arch.name), nil } func (t *imageType) PartitionType() disk.PartitionTableType { @@ -232,10 +232,7 @@ func (t *imageType) Manifest(bp *blueprint.Blueprint, // don't add any static packages if Minimal was selected if !bp.Minimal { - pkgSets, err := t.ImageTypeYAML.PackageSets(t.arch.distro.Name(), t.arch.name) - if err != nil { - return nil, nil, err - } + pkgSets := t.ImageTypeYAML.PackageSets(t.arch.distro.ID, t.arch.name) for name, pkgSet := range pkgSets { staticPackageSets[name] = pkgSet }