From 08b18769517519baf1ee7b43a07d4c41658c248c Mon Sep 17 00:00:00 2001 From: Achilleas Koutsou Date: Tue, 3 Jan 2023 19:10:39 +0100 Subject: [PATCH] distro/rhel8: move architecture implementation to separate file --- internal/distro/rhel8/arch.go | 70 +++++++++++++++++++++++++++++++++ internal/distro/rhel8/distro.go | 61 ---------------------------- 2 files changed, 70 insertions(+), 61 deletions(-) create mode 100644 internal/distro/rhel8/arch.go diff --git a/internal/distro/rhel8/arch.go b/internal/distro/rhel8/arch.go new file mode 100644 index 000000000..36e143467 --- /dev/null +++ b/internal/distro/rhel8/arch.go @@ -0,0 +1,70 @@ +package rhel8 + +import ( + "errors" + "fmt" + "sort" + + "github.com/osbuild/osbuild-composer/internal/distro" +) + +type architecture struct { + distro *distribution + name string + imageTypes map[string]distro.ImageType + imageTypeAliases map[string]string + legacy string + bootType distro.BootType +} + +func (a *architecture) Name() string { + return a.name +} + +func (a *architecture) ListImageTypes() []string { + itNames := make([]string, 0, len(a.imageTypes)) + for name := range a.imageTypes { + itNames = append(itNames, name) + } + sort.Strings(itNames) + return itNames +} + +func (a *architecture) GetImageType(name string) (distro.ImageType, error) { + t, exists := a.imageTypes[name] + if !exists { + aliasForName, exists := a.imageTypeAliases[name] + if !exists { + return nil, errors.New("invalid image type: " + name) + } + t, exists = a.imageTypes[aliasForName] + if !exists { + panic(fmt.Sprintf("image type '%s' is an alias to a non-existing image type '%s'", name, aliasForName)) + } + } + return t, nil +} + +func (a *architecture) addImageTypes(imageTypes ...imageType) { + if a.imageTypes == nil { + a.imageTypes = map[string]distro.ImageType{} + } + for idx := range imageTypes { + it := imageTypes[idx] + it.arch = a + a.imageTypes[it.name] = &it + for _, alias := range it.nameAliases { + if a.imageTypeAliases == nil { + a.imageTypeAliases = map[string]string{} + } + if existingAliasFor, exists := a.imageTypeAliases[alias]; exists { + panic(fmt.Sprintf("image type alias '%s' for '%s' is already defined for another image type '%s'", alias, it.name, existingAliasFor)) + } + a.imageTypeAliases[alias] = it.name + } + } +} + +func (a *architecture) Distro() distro.Distro { + return a.distro +} diff --git a/internal/distro/rhel8/distro.go b/internal/distro/rhel8/distro.go index eb71b1681..d372f292a 100644 --- a/internal/distro/rhel8/distro.go +++ b/internal/distro/rhel8/distro.go @@ -147,67 +147,6 @@ func (d *distribution) getDefaultImageConfig() *distro.ImageConfig { return d.defaultImageConfig } -type architecture struct { - distro *distribution - name string - imageTypes map[string]distro.ImageType - imageTypeAliases map[string]string - legacy string - bootType distro.BootType -} - -func (a *architecture) Name() string { - return a.name -} - -func (a *architecture) ListImageTypes() []string { - itNames := make([]string, 0, len(a.imageTypes)) - for name := range a.imageTypes { - itNames = append(itNames, name) - } - sort.Strings(itNames) - return itNames -} - -func (a *architecture) GetImageType(name string) (distro.ImageType, error) { - t, exists := a.imageTypes[name] - if !exists { - aliasForName, exists := a.imageTypeAliases[name] - if !exists { - return nil, errors.New("invalid image type: " + name) - } - t, exists = a.imageTypes[aliasForName] - if !exists { - panic(fmt.Sprintf("image type '%s' is an alias to a non-existing image type '%s'", name, aliasForName)) - } - } - return t, nil -} - -func (a *architecture) addImageTypes(imageTypes ...imageType) { - if a.imageTypes == nil { - a.imageTypes = map[string]distro.ImageType{} - } - for idx := range imageTypes { - it := imageTypes[idx] - it.arch = a - a.imageTypes[it.name] = &it - for _, alias := range it.nameAliases { - if a.imageTypeAliases == nil { - a.imageTypeAliases = map[string]string{} - } - if existingAliasFor, exists := a.imageTypeAliases[alias]; exists { - panic(fmt.Sprintf("image type alias '%s' for '%s' is already defined for another image type '%s'", alias, it.name, existingAliasFor)) - } - a.imageTypeAliases[alias] = it.name - } - } -} - -func (a *architecture) Distro() distro.Distro { - return a.distro -} - type pipelinesFunc func(t *imageType, customizations *blueprint.Customizations, options distro.ImageOptions, repos []rpmmd.RepoConfig, packageSetSpecs map[string][]rpmmd.PackageSpec, containers []container.Spec, rng *rand.Rand) ([]osbuild.Pipeline, error) type packageSetFunc func(t *imageType) rpmmd.PackageSet