Skip to content

Commit 77c3f2d

Browse files
committed
feat: add capability based image selection to bastion options
1 parent 1adf529 commit 77c3f2d

2 files changed

Lines changed: 5 additions & 138 deletions

File tree

pkg/controller/bastion/options.go

Lines changed: 5 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -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-
}

pkg/controller/bastion/options_test.go

Lines changed: 0 additions & 92 deletions
This file was deleted.

0 commit comments

Comments
 (0)