Skip to content

Commit 2430f7a

Browse files
authored
cherry-pick(0.35.x): fix: ensure alias version isn't dropped round-trip (aws#6777) (aws#6999)
1 parent 0a88584 commit 2430f7a

File tree

3 files changed

+36
-4
lines changed

3 files changed

+36
-4
lines changed

pkg/apis/v1/ec2nodeclass_conversion.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,17 @@ func (in *EC2NodeClass) ConvertTo(ctx context.Context, to apis.Convertible) erro
5454
v1beta1enc.Spec.AMIFamily = lo.ToPtr(in.AMIFamily())
5555
}
5656

57+
if term, ok := lo.Find(in.Spec.AMISelectorTerms, func(term AMISelectorTerm) bool {
58+
return term.Alias != ""
59+
}); ok {
60+
version := AMIVersionFromAlias(term.Alias)
61+
if version != "latest" {
62+
v1beta1enc.Annotations = lo.Assign(v1beta1enc.Annotations, map[string]string{
63+
AnnotationAliasVersionCompatibilityKey: version,
64+
})
65+
}
66+
}
67+
5768
in.Spec.convertTo(&v1beta1enc.Spec)
5869
in.Status.convertTo((&v1beta1enc.Status))
5970
return nil
@@ -132,6 +143,7 @@ func (in *EC2NodeClassStatus) convertTo(v1beta1enc *v1beta1.EC2NodeClassStatus)
132143
func (in *EC2NodeClass) ConvertFrom(ctx context.Context, from apis.Convertible) error {
133144
v1beta1enc := from.(*v1beta1.EC2NodeClass)
134145
in.ObjectMeta = v1beta1enc.ObjectMeta
146+
in.Annotations = lo.OmitByKeys(in.Annotations, []string{AnnotationAliasVersionCompatibilityKey})
135147

136148
switch lo.FromPtr(v1beta1enc.Spec.AMIFamily) {
137149
case AMIFamilyAL2, AMIFamilyAL2023, AMIFamilyBottlerocket, AMIFamilyWindows2019, AMIFamilyWindows2022:
@@ -140,7 +152,11 @@ func (in *EC2NodeClass) ConvertFrom(ctx context.Context, from apis.Convertible)
140152
if len(v1beta1enc.Spec.AMISelectorTerms) == 0 {
141153
in.Spec.AMIFamily = nil
142154
in.Spec.AMISelectorTerms = []AMISelectorTerm{{
143-
Alias: fmt.Sprintf("%s@latest", strings.ToLower(lo.FromPtr(v1beta1enc.Spec.AMIFamily))),
155+
Alias: fmt.Sprintf(
156+
"%s@%s",
157+
strings.ToLower(lo.FromPtr(v1beta1enc.Spec.AMIFamily)),
158+
lo.ValueOr(v1beta1enc.Annotations, AnnotationAliasVersionCompatibilityKey, "latest"),
159+
),
144160
}}
145161
} else {
146162
in.Spec.AMIFamily = v1beta1enc.Spec.AMIFamily

pkg/apis/v1/ec2nodeclass_conversion_test.go

+14
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ var _ = Describe("Convert v1 to v1beta1 EC2NodeClass API", func() {
120120
Expect(v1ec2nodeclass.ConvertTo(ctx, v1beta1ec2nodeclass)).To(Succeed())
121121
Expect(lo.FromPtr(v1beta1ec2nodeclass.Spec.AMIFamily)).To(Equal(v1beta1.AMIFamilyAL2023))
122122
})
123+
It("should convert v1 ec2nodeclass alias (pinned)", func() {
124+
v1ec2nodeclass.Spec.AMISelectorTerms = []AMISelectorTerm{{Alias: "al2023@v20240807"}}
125+
Expect(v1ec2nodeclass.ConvertTo(ctx, v1beta1ec2nodeclass)).To(Succeed())
126+
Expect(lo.FromPtr(v1beta1ec2nodeclass.Spec.AMIFamily)).To(Equal(v1beta1.AMIFamilyAL2023))
127+
Expect(v1beta1ec2nodeclass.Annotations).To(HaveKeyWithValue(AnnotationAliasVersionCompatibilityKey, "v20240807"))
128+
})
123129
It("should convert v1 ec2nodeclass ami selector terms with the Ubuntu compatibility annotation", func() {
124130
v1ec2nodeclass.Annotations = lo.Assign(v1ec2nodeclass.Annotations, map[string]string{
125131
AnnotationUbuntuCompatibilityKey: fmt.Sprintf("%s,%s", AnnotationUbuntuCompatibilityAMIFamily, AnnotationUbuntuCompatibilityBlockDeviceMappings),
@@ -390,6 +396,14 @@ var _ = Describe("Convert v1beta1 to v1 EC2NodeClass API", func() {
390396
Expect(v1ec2nodeclass.ConvertFrom(ctx, v1beta1ec2nodeclass)).To(Succeed())
391397
Expect(v1ec2nodeclass.Spec.AMISelectorTerms).To(ContainElement(AMISelectorTerm{Alias: "al2023@latest"}))
392398
})
399+
It("should convert v1beta1 ec2nodeclass ami family (alias version annotation)", func() {
400+
v1beta1ec2nodeclass.Spec.AMIFamily = &v1beta1.AMIFamilyAL2023
401+
v1beta1ec2nodeclass.Annotations = lo.Assign(v1beta1ec2nodeclass.Annotations, map[string]string{
402+
AnnotationAliasVersionCompatibilityKey: "v20240807",
403+
})
404+
Expect(v1ec2nodeclass.ConvertFrom(ctx, v1beta1ec2nodeclass)).To(Succeed())
405+
Expect(v1ec2nodeclass.Spec.AMISelectorTerms).To(ContainElement(AMISelectorTerm{Alias: "al2023@v20240807"}))
406+
})
393407
It("should convert v1beta1 ec2nodeclass ami family with non-custom ami family and ami selector terms", func() {
394408
v1beta1ec2nodeclass.Spec.AMIFamily = &v1beta1.AMIFamilyAL2023
395409
v1beta1ec2nodeclass.Spec.AMISelectorTerms = []v1beta1.AMISelectorTerm{{

pkg/apis/v1/labels.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@ var (
127127
AnnotationUbuntuCompatibilityAMIFamily = "amiFamily"
128128
AnnotationUbuntuCompatibilityBlockDeviceMappings = "blockDeviceMappings"
129129

130-
TagNodeClaim = karpv1.Group + "/nodeclaim"
131-
TagManagedLaunchTemplate = Group + "/cluster"
132-
TagName = "Name"
130+
TagNodeClaim = karpv1.Group + "/nodeclaim"
131+
TagManagedLaunchTemplate = Group + "/cluster"
132+
AnnotationAliasVersionCompatibilityKey = CompatibilityGroup + "/v1-alias-version"
133+
134+
TagName = "Name"
133135
)

0 commit comments

Comments
 (0)