55package mutator
66
77import (
8+ "cmp"
89 "context"
910 "fmt"
1011 "slices"
1112
1213 extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook"
1314 gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
15+ v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants"
1416 "k8s.io/apimachinery/pkg/runtime"
1517 "k8s.io/apimachinery/pkg/runtime/serializer"
18+ "k8s.io/utils/ptr"
1619 "sigs.k8s.io/controller-runtime/pkg/client"
1720 "sigs.k8s.io/controller-runtime/pkg/manager"
1821
@@ -97,15 +100,14 @@ func convertCapabilityFlavors(providerFlavors []v1alpha1.MachineImageFlavor) []g
97100 return capabilityFlavors
98101}
99102
100- // convertRegionsToCapabilityFlavors converts old format (regions with architecture) to capability flavors
103+ // convertRegionsToCapabilityFlavors converts old format (regions with architecture) to capability flavors.
104+ // Note: A similar function exists in helper.go for internal API types that also preserves region mappings.
105+ // This version only extracts unique architectures for CloudProfile spec mutation.
101106func convertRegionsToCapabilityFlavors (regions []v1alpha1.RegionAMIMapping ) []gardencorev1beta1.MachineImageFlavor {
102- // Group regions by architecture to create capability flavors
107+ // Collect unique architectures from regions
103108 architectureSet := make (map [string ]struct {})
104109 for _ , region := range regions {
105- arch := "amd64" // default architecture
106- if region .Architecture != nil {
107- arch = * region .Architecture
108- }
110+ arch := ptr .Deref (region .Architecture , v1beta1constants .ArchitectureAMD64 )
109111 architectureSet [arch ] = struct {}{}
110112 }
111113
@@ -114,28 +116,20 @@ func convertRegionsToCapabilityFlavors(regions []v1alpha1.RegionAMIMapping) []ga
114116 for arch := range architectureSet {
115117 capabilityFlavors = append (capabilityFlavors , gardencorev1beta1.MachineImageFlavor {
116118 Capabilities : gardencorev1beta1.Capabilities {
117- "architecture" : []string {arch },
119+ v1beta1constants . ArchitectureName : []string {arch },
118120 },
119121 })
120122 }
121123
122124 // Sort for deterministic output
123125 slices .SortFunc (capabilityFlavors , func (a , b gardencorev1beta1.MachineImageFlavor ) int {
124- aArch := ""
125- bArch := ""
126- if archList , ok := a .Capabilities ["architecture" ]; ok && len (archList ) > 0 {
127- aArch = archList [0 ]
128- }
129- if archList , ok := b .Capabilities ["architecture" ]; ok && len (archList ) > 0 {
130- bArch = archList [0 ]
131- }
132- if aArch < bArch {
133- return - 1
134- }
135- if aArch > bArch {
136- return 1
126+ getArch := func (f gardencorev1beta1.MachineImageFlavor ) string {
127+ if archList := f .Capabilities [v1beta1constants .ArchitectureName ]; len (archList ) > 0 {
128+ return archList [0 ]
129+ }
130+ return ""
137131 }
138- return 0
132+ return cmp . Compare ( getArch ( a ), getArch ( b ))
139133 })
140134
141135 return capabilityFlavors
0 commit comments