func()

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
}