in pkg/providers/amifamily/al2.go [43:85]
func (a AL2) DescribeImageQuery(ctx context.Context, ssmProvider ssm.Provider, k8sVersion string, amiVersion string) (DescribeImageQuery, error) {
ids := map[string][]Variant{}
for path, variants := range map[string][]Variant{
fmt.Sprintf("/aws/service/eks/optimized-ami/%s/amazon-linux-2/%s/image_id", k8sVersion, lo.Ternary(
amiVersion == v1.AliasVersionLatest,
"recommended",
fmt.Sprintf("amazon-eks-node-%s-%s", k8sVersion, amiVersion),
)): {VariantStandard},
fmt.Sprintf("/aws/service/eks/optimized-ami/%s/amazon-linux-2-arm64/%s/image_id", k8sVersion, lo.Ternary(
amiVersion == v1.AliasVersionLatest,
"recommended",
fmt.Sprintf("amazon-eks-arm64-node-%s-%s", k8sVersion, amiVersion),
)): {VariantStandard},
fmt.Sprintf("/aws/service/eks/optimized-ami/%s/amazon-linux-2-gpu/%s/image_id", k8sVersion, lo.Ternary(
amiVersion == v1.AliasVersionLatest,
"recommended",
fmt.Sprintf("amazon-eks-gpu-node-%s-%s", k8sVersion, amiVersion),
)): {VariantNeuron, VariantNvidia},
} {
imageID, err := ssmProvider.Get(ctx, ssm.Parameter{
Name: path,
IsMutable: amiVersion == v1.AliasVersionLatest,
})
if err != nil {
continue
}
ids[imageID] = variants
}
// Failed to discover any AMIs, we should short circuit AMI discovery
if len(ids) == 0 {
return DescribeImageQuery{}, serrors.Wrap(fmt.Errorf("failed to discover any AMIs for alias"), "alias", fmt.Sprintf("al2@%s", amiVersion))
}
return DescribeImageQuery{
Filters: []ec2types.Filter{{
Name: lo.ToPtr("image-id"),
Values: lo.Keys(ids),
}},
KnownRequirements: lo.MapValues(ids, func(variants []Variant, _ string) []scheduling.Requirements {
return lo.Map(variants, func(v Variant, _ int) scheduling.Requirements { return v.Requirements() })
}),
}, nil
}