Skip to content

Commit 6528a39

Browse files
authored
cherry-pick(0.36.x): fix: ensure alias version isn't dropped round-trip (aws#6777) (aws#7000)
1 parent 487a6e0 commit 6528a39

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
@@ -121,6 +121,12 @@ var _ = Describe("Convert v1 to v1beta1 EC2NodeClass API", func() {
121121
Expect(v1ec2nodeclass.ConvertTo(ctx, v1beta1ec2nodeclass)).To(Succeed())
122122
Expect(lo.FromPtr(v1beta1ec2nodeclass.Spec.AMIFamily)).To(Equal(v1beta1.AMIFamilyAL2023))
123123
})
124+
It("should convert v1 ec2nodeclass alias (pinned)", func() {
125+
v1ec2nodeclass.Spec.AMISelectorTerms = []AMISelectorTerm{{Alias: "al2023@v20240807"}}
126+
Expect(v1ec2nodeclass.ConvertTo(ctx, v1beta1ec2nodeclass)).To(Succeed())
127+
Expect(lo.FromPtr(v1beta1ec2nodeclass.Spec.AMIFamily)).To(Equal(v1beta1.AMIFamilyAL2023))
128+
Expect(v1beta1ec2nodeclass.Annotations).To(HaveKeyWithValue(AnnotationAliasVersionCompatibilityKey, "v20240807"))
129+
})
124130
It("should convert v1 ec2nodeclass ami selector terms with the Ubuntu compatibility annotation", func() {
125131
v1ec2nodeclass.Annotations = lo.Assign(v1ec2nodeclass.Annotations, map[string]string{
126132
AnnotationUbuntuCompatibilityKey: fmt.Sprintf("%s,%s", AnnotationUbuntuCompatibilityAMIFamily, AnnotationUbuntuCompatibilityBlockDeviceMappings),
@@ -400,6 +406,14 @@ var _ = Describe("Convert v1beta1 to v1 EC2NodeClass API", func() {
400406
Expect(v1ec2nodeclass.ConvertFrom(ctx, v1beta1ec2nodeclass)).To(Succeed())
401407
Expect(v1ec2nodeclass.Spec.AMISelectorTerms).To(ContainElement(AMISelectorTerm{Alias: "al2023@latest"}))
402408
})
409+
It("should convert v1beta1 ec2nodeclass ami family (alias version annotation)", func() {
410+
v1beta1ec2nodeclass.Spec.AMIFamily = &v1beta1.AMIFamilyAL2023
411+
v1beta1ec2nodeclass.Annotations = lo.Assign(v1beta1ec2nodeclass.Annotations, map[string]string{
412+
AnnotationAliasVersionCompatibilityKey: "v20240807",
413+
})
414+
Expect(v1ec2nodeclass.ConvertFrom(ctx, v1beta1ec2nodeclass)).To(Succeed())
415+
Expect(v1ec2nodeclass.Spec.AMISelectorTerms).To(ContainElement(AMISelectorTerm{Alias: "al2023@v20240807"}))
416+
})
403417
It("should convert v1beta1 ec2nodeclass ami family with non-custom ami family and ami selector terms", func() {
404418
v1beta1ec2nodeclass.Spec.AMIFamily = &v1beta1.AMIFamilyAL2023
405419
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 = v1.Group + "/nodeclaim"
131-
TagManagedLaunchTemplate = Group + "/cluster"
132-
TagName = "Name"
130+
TagNodeClaim = v1.Group + "/nodeclaim"
131+
TagManagedLaunchTemplate = Group + "/cluster"
132+
AnnotationAliasVersionCompatibilityKey = CompatibilityGroup + "/v1-alias-version"
133+
134+
TagName = "Name"
133135
)

0 commit comments

Comments
 (0)