@@ -17,7 +17,6 @@ import (
1717 gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1"
1818 extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1"
1919
20- api "github.com/gardener/gardener-extension-provider-aws/pkg/apis/aws"
2120 "github.com/gardener/gardener-extension-provider-aws/pkg/apis/aws/helper"
2221 awsclient "github.com/gardener/gardener-extension-provider-aws/pkg/aws/client"
2322)
@@ -99,15 +98,13 @@ func NewOpts(ctx context.Context, bastion *extensionsv1alpha1.Bastion, cluster *
9998 return Options {}, fmt .Errorf ("failed to extract cloud provider config from cluster: %w" , err )
10099 }
101100
102- machineImageVersion , err := getProviderSpecificImage (cloudProfileConfig .MachineImages , vmDetails )
101+ var ami string
102+ imageFlavor , err := helper .FindImageInCloudProfile (cloudProfileConfig , vmDetails .ImageBaseName , vmDetails .ImageVersion , region , & vmDetails .Architecture , vmDetails .MachineTypeCapabilities , cluster .CloudProfile .Spec .MachineCapabilities )
103103 if err != nil {
104- return Options {}, fmt .Errorf ("failed to extract image from provider config: %w" , err )
105- }
106-
107- ami , err := findImageAMIByRegion (machineImageVersion , vmDetails , region )
108- if err != nil {
109- return Options {}, fmt .Errorf ("failed to find image AMI by region: %w" , err )
104+ return Options {}, fmt .Errorf ("failed to find machine image in CloudProfileConfig: %w" , err )
110105 }
106+ // We can safely assume that the AMI exists, because FindImageInCloudProfile would have errored otherwise.
107+ ami = imageFlavor .Regions [0 ].AMI
111108
112109 ipV6 := cluster .Shoot .Spec .Networking != nil && slices .Contains (cluster .Shoot .Spec .Networking .IPFamilies , gardencorev1beta1 .IPFamilyIPv6 )
113110
@@ -145,41 +142,3 @@ func resolveSubnetName(ctx context.Context, awsClient *awsclient.Client, subnetN
145142
146143 return
147144}
148-
149- // getProviderSpecificImage returns the provider specific MachineImageVersion that matches with the given VmDetails
150- func getProviderSpecificImage (images []api.MachineImages , vm extensionsbastion.MachineSpec ) (api.MachineImageVersion , error ) {
151- imageIndex := slices .IndexFunc (images , func (image api.MachineImages ) bool {
152- return image .Name == vm .ImageBaseName
153- })
154-
155- if imageIndex == - 1 {
156- return api.MachineImageVersion {},
157- fmt .Errorf ("machine image with name %s not found in cloudProfileConfig" , vm .ImageBaseName )
158- }
159-
160- versions := images [imageIndex ].Versions
161- versionIndex := slices .IndexFunc (versions , func (version api.MachineImageVersion ) bool {
162- return version .Version == vm .ImageVersion
163- })
164-
165- if versionIndex == - 1 {
166- return api.MachineImageVersion {},
167- fmt .Errorf ("version %s for arch %s of image %s not found in cloudProfileConfig" ,
168- vm .ImageVersion , vm .Architecture , vm .ImageBaseName )
169- }
170-
171- return versions [versionIndex ], nil
172- }
173-
174- func findImageAMIByRegion (image api.MachineImageVersion , vmDetails extensionsbastion.MachineSpec , region string ) (string , error ) {
175- regionIndex := slices .IndexFunc (image .Regions , func (RegionAMIMapping api.RegionAMIMapping ) bool {
176- return RegionAMIMapping .Name == region && RegionAMIMapping .Architecture != nil && * RegionAMIMapping .Architecture == vmDetails .Architecture
177- })
178-
179- if regionIndex == - 1 {
180- return "" , fmt .Errorf ("image '%s' with version '%s' and architecture '%s' not found in region '%s'" ,
181- vmDetails .ImageBaseName , image .Version , vmDetails .Architecture , region )
182- }
183-
184- return image .Regions [regionIndex ].AMI , nil
185- }
0 commit comments