diff --git a/internal/distro/distro.go b/internal/distro/distro.go index 1e02e9d59..d29c1f034 100644 --- a/internal/distro/distro.go +++ b/internal/distro/distro.go @@ -24,6 +24,10 @@ type Distro interface { // for modularity support. ModulePlatformID() string + // Returns a sorted list of the names of the architectures this distro + // supports. + ListArchs() []string + // Returns an object representing the given architecture as support // by this distro. GetArch(arch string) (Arch, error) diff --git a/internal/distro/fedora30/distro.go b/internal/distro/fedora30/distro.go index c011638cc..dd82aaaa9 100644 --- a/internal/distro/fedora30/distro.go +++ b/internal/distro/fedora30/distro.go @@ -56,6 +56,15 @@ type fedora30ImageType struct { imageType *imageType } +func (d *Fedora30) ListArchs() []string { + archs := make([]string, 0, len(d.arches)) + for name := range d.arches { + archs = append(archs, name) + } + sort.Strings(archs) + return archs +} + func (d *Fedora30) GetArch(arch string) (distro.Arch, error) { a, exists := d.arches[arch] if !exists { diff --git a/internal/distro/fedora31/distro.go b/internal/distro/fedora31/distro.go index 7a65459a1..eaacccd55 100644 --- a/internal/distro/fedora31/distro.go +++ b/internal/distro/fedora31/distro.go @@ -56,6 +56,15 @@ type fedora31ImageType struct { imageType *imageType } +func (d *Fedora31) ListArchs() []string { + archs := make([]string, 0, len(d.arches)) + for name := range d.arches { + archs = append(archs, name) + } + sort.Strings(archs) + return archs +} + func (d *Fedora31) GetArch(arch string) (distro.Arch, error) { a, exists := d.arches[arch] if !exists { diff --git a/internal/distro/fedora32/distro.go b/internal/distro/fedora32/distro.go index 6de8d3f7f..5ccbefe93 100644 --- a/internal/distro/fedora32/distro.go +++ b/internal/distro/fedora32/distro.go @@ -56,6 +56,15 @@ type fedora32ImageType struct { imageType *imageType } +func (d *Fedora32) ListArchs() []string { + archs := make([]string, 0, len(d.arches)) + for name := range d.arches { + archs = append(archs, name) + } + sort.Strings(archs) + return archs +} + func (d *Fedora32) GetArch(arch string) (distro.Arch, error) { a, exists := d.arches[arch] if !exists { diff --git a/internal/distro/fedoratest/distro.go b/internal/distro/fedoratest/distro.go index ac983add0..61232e54c 100644 --- a/internal/distro/fedoratest/distro.go +++ b/internal/distro/fedoratest/distro.go @@ -24,6 +24,10 @@ type fedoraTestDistroImageType struct { arch *fedoraTestDistroArch } +func (d *FedoraTestDistro) ListArchs() []string { + return []string{"x86_64"} +} + func (d *FedoraTestDistro) GetArch(arch string) (distro.Arch, error) { if arch != "x86_64" { return nil, errors.New("invalid architecture: " + arch) diff --git a/internal/distro/rhel81/distro.go b/internal/distro/rhel81/distro.go index 0a9d88380..c447a5b22 100644 --- a/internal/distro/rhel81/distro.go +++ b/internal/distro/rhel81/distro.go @@ -57,6 +57,15 @@ type rhel81ImageType struct { imageType *imageType } +func (d *RHEL81) ListArchs() []string { + archs := make([]string, 0, len(d.arches)) + for name := range d.arches { + archs = append(archs, name) + } + sort.Strings(archs) + return archs +} + func (d *RHEL81) GetArch(arch string) (distro.Arch, error) { a, exists := d.arches[arch] if !exists { diff --git a/internal/distro/rhel82/distro.go b/internal/distro/rhel82/distro.go index a6bd66846..87c9d2bf2 100644 --- a/internal/distro/rhel82/distro.go +++ b/internal/distro/rhel82/distro.go @@ -57,6 +57,15 @@ type rhel82ImageType struct { imageType *imageType } +func (d *RHEL82) ListArchs() []string { + archs := make([]string, 0, len(d.arches)) + for name := range d.arches { + archs = append(archs, name) + } + sort.Strings(archs) + return archs +} + func (d *RHEL82) GetArch(arch string) (distro.Arch, error) { a, exists := d.arches[arch] if !exists { diff --git a/internal/distro/test/distro.go b/internal/distro/test/distro.go index 8cfc1eb7e..80f860af4 100644 --- a/internal/distro/test/distro.go +++ b/internal/distro/test/distro.go @@ -16,6 +16,10 @@ type testImageType struct{} const name = "test-distro" const modulePlatformID = "platform:test" +func (d *TestDistro) ListArchs() []string { + return []string{"test_arch"} +} + func (d *TestDistro) GetArch(arch string) (distro.Arch, error) { if arch != "test_arch" { return nil, errors.New("invalid arch: " + arch)