Skip to content

Commit efd4151

Browse files
authored
cherry-pick(0.33.x): fix: ensure alias version isn't dropped round-trip (aws#6777) (aws#7002)
1 parent 75e8e61 commit efd4151

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
@@ -51,6 +51,17 @@ func (in *EC2NodeClass) ConvertTo(ctx context.Context, to apis.Convertible) erro
5151
v1beta1enc.Spec.AMIFamily = lo.ToPtr(in.AMIFamily())
5252
}
5353

54+
if term, ok := lo.Find(in.Spec.AMISelectorTerms, func(term AMISelectorTerm) bool {
55+
return term.Alias != ""
56+
}); ok {
57+
version := AMIVersionFromAlias(term.Alias)
58+
if version != "latest" {
59+
v1beta1enc.Annotations = lo.Assign(v1beta1enc.Annotations, map[string]string{
60+
AnnotationAliasVersionCompatibilityKey: version,
61+
})
62+
}
63+
}
64+
5465
in.Spec.convertTo(&v1beta1enc.Spec)
5566
in.Status.convertTo((&v1beta1enc.Status))
5667
return nil
@@ -123,6 +134,7 @@ func (in *EC2NodeClassStatus) convertTo(v1beta1enc *v1beta1.EC2NodeClassStatus)
123134
func (in *EC2NodeClass) ConvertFrom(ctx context.Context, from apis.Convertible) error {
124135
v1beta1enc := from.(*v1beta1.EC2NodeClass)
125136
in.ObjectMeta = v1beta1enc.ObjectMeta
137+
in.Annotations = lo.OmitByKeys(in.Annotations, []string{AnnotationAliasVersionCompatibilityKey})
126138

127139
switch lo.FromPtr(v1beta1enc.Spec.AMIFamily) {
128140
case AMIFamilyAL2, AMIFamilyAL2023, AMIFamilyBottlerocket, AMIFamilyWindows2019, AMIFamilyWindows2022:
@@ -131,7 +143,11 @@ func (in *EC2NodeClass) ConvertFrom(ctx context.Context, from apis.Convertible)
131143
if len(v1beta1enc.Spec.AMISelectorTerms) == 0 {
132144
in.Spec.AMIFamily = nil
133145
in.Spec.AMISelectorTerms = []AMISelectorTerm{{
134-
Alias: fmt.Sprintf("%s@latest", strings.ToLower(lo.FromPtr(v1beta1enc.Spec.AMIFamily))),
146+
Alias: fmt.Sprintf(
147+
"%s@%s",
148+
strings.ToLower(lo.FromPtr(v1beta1enc.Spec.AMIFamily)),
149+
lo.ValueOr(v1beta1enc.Annotations, AnnotationAliasVersionCompatibilityKey, "latest"),
150+
),
135151
}}
136152
} else {
137153
in.Spec.AMIFamily = v1beta1enc.Spec.AMIFamily

pkg/apis/v1/ec2nodeclass_conversion_test.go

+14
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ var _ = Describe("Convert v1 to v1beta1 EC2NodeClass API", func() {
115115
Expect(v1ec2nodeclass.ConvertTo(ctx, v1beta1ec2nodeclass)).To(Succeed())
116116
Expect(lo.FromPtr(v1beta1ec2nodeclass.Spec.AMIFamily)).To(Equal(v1beta1.AMIFamilyAL2))
117117
})
118+
It("should convert v1 ec2nodeclass alias (pinned)", func() {
119+
v1ec2nodeclass.Spec.AMISelectorTerms = []AMISelectorTerm{{Alias: "al2@v20240807"}}
120+
Expect(v1ec2nodeclass.ConvertTo(ctx, v1beta1ec2nodeclass)).To(Succeed())
121+
Expect(lo.FromPtr(v1beta1ec2nodeclass.Spec.AMIFamily)).To(Equal(v1beta1.AMIFamilyAL2))
122+
Expect(v1beta1ec2nodeclass.Annotations).To(HaveKeyWithValue(AnnotationAliasVersionCompatibilityKey, "v20240807"))
123+
})
118124
It("should convert v1 ec2nodeclass ami selector terms with the Ubuntu compatibility annotation", func() {
119125
v1ec2nodeclass.Annotations = lo.Assign(v1ec2nodeclass.Annotations, map[string]string{
120126
AnnotationUbuntuCompatibilityKey: fmt.Sprintf("%s,%s", AnnotationUbuntuCompatibilityAMIFamily, AnnotationUbuntuCompatibilityBlockDeviceMappings),
@@ -375,6 +381,14 @@ var _ = Describe("Convert v1beta1 to v1 EC2NodeClass API", func() {
375381
Expect(v1ec2nodeclass.ConvertFrom(ctx, v1beta1ec2nodeclass)).To(Succeed())
376382
Expect(v1ec2nodeclass.Spec.AMISelectorTerms).To(ContainElement(AMISelectorTerm{Alias: "al2@latest"}))
377383
})
384+
It("should convert v1beta1 ec2nodeclass ami family (alias version annotation)", func() {
385+
v1beta1ec2nodeclass.Spec.AMIFamily = &v1beta1.AMIFamilyAL2
386+
v1beta1ec2nodeclass.Annotations = lo.Assign(v1beta1ec2nodeclass.Annotations, map[string]string{
387+
AnnotationAliasVersionCompatibilityKey: "v20240807",
388+
})
389+
Expect(v1ec2nodeclass.ConvertFrom(ctx, v1beta1ec2nodeclass)).To(Succeed())
390+
Expect(v1ec2nodeclass.Spec.AMISelectorTerms).To(ContainElement(AMISelectorTerm{Alias: "al2@v20240807"}))
391+
})
378392
It("should convert v1beta1 ec2nodeclass ami family with non-custom ami family and ami selector terms", func() {
379393
v1beta1ec2nodeclass.Spec.AMIFamily = &v1beta1.AMIFamilyAL2
380394
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)