Skip to content

Commit 45344ab

Browse files
chore: Backport conversion webhooks changes for v0.36.x (#1552)
Co-authored-by: Jonathan Innis <[email protected]>
1 parent f3cd14f commit 45344ab

5 files changed

+114
-65
lines changed

pkg/apis/v1/labels.go

+1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ const (
4747
NodePoolHashAnnotationKey = Group + "/nodepool-hash"
4848
NodePoolHashVersionAnnotationKey = Group + "/nodepool-hash-version"
4949
KubeletCompatibilityAnnotationKey = CompatibilityGroup + "/v1beta1-kubelet-conversion"
50+
NodeClassReferenceAnnotationKey = CompatibilityGroup + "/v1beta1-nodeclass-reference"
5051
NodeClaimTerminationTimestampAnnotationKey = Group + "/nodeclaim-termination-timestamp"
5152
)
5253

pkg/apis/v1/nodeclaim_conversion.go

+27-17
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"github.com/samber/lo"
2727
v1 "k8s.io/api/core/v1"
2828
"k8s.io/apimachinery/pkg/api/errors"
29-
"k8s.io/apimachinery/pkg/runtime/schema"
3029
"k8s.io/apimachinery/pkg/types"
3130
"knative.dev/pkg/apis"
3231

@@ -41,11 +40,17 @@ func (in *NodeClaim) ConvertTo(ctx context.Context, to apis.Convertible) error {
4140
v1beta1NC := to.(*v1beta1.NodeClaim)
4241
v1beta1NC.ObjectMeta = in.ObjectMeta
4342

44-
in.Status.convertTo((&v1beta1NC.Status))
45-
return in.Spec.convertTo(ctx, &v1beta1NC.Spec, in.Annotations[KubeletCompatibilityAnnotationKey])
43+
in.Status.convertTo(&v1beta1NC.Status)
44+
if err := in.Spec.convertTo(&v1beta1NC.Spec, in.Annotations[KubeletCompatibilityAnnotationKey], in.Annotations[NodeClassReferenceAnnotationKey]); err != nil {
45+
return err
46+
}
47+
// Remove the annotations from the v1beta1 NodeClaim on the convert back
48+
delete(v1beta1NC.Annotations, KubeletCompatibilityAnnotationKey)
49+
delete(v1beta1NC.Annotations, NodeClassReferenceAnnotationKey)
50+
return nil
4651
}
4752

48-
func (in *NodeClaimSpec) convertTo(ctx context.Context, v1beta1nc *v1beta1.NodeClaimSpec, kubeletAnnotation string) error {
53+
func (in *NodeClaimSpec) convertTo(v1beta1nc *v1beta1.NodeClaimSpec, kubeletAnnotation, nodeClassReferenceAnnotation string) error {
4954
v1beta1nc.Taints = in.Taints
5055
v1beta1nc.StartupTaints = in.StartupTaints
5156
v1beta1nc.Resources = v1beta1.ResourceRequirements(in.Resources)
@@ -59,18 +64,16 @@ func (in *NodeClaimSpec) convertTo(ctx context.Context, v1beta1nc *v1beta1.NodeC
5964
MinValues: v1Requirements.MinValues,
6065
}
6166
})
62-
63-
if in.NodeClassRef != nil {
64-
nodeclass, found := lo.Find(injection.GetNodeClasses(ctx), func(nc schema.GroupVersionKind) bool {
65-
return nc.Kind == in.NodeClassRef.Kind && nc.Group == in.NodeClassRef.Group
66-
})
67-
v1beta1nc.NodeClassRef = &v1beta1.NodeClassReference{
68-
Kind: in.NodeClassRef.Kind,
69-
Name: in.NodeClassRef.Name,
70-
APIVersion: lo.Ternary(found, nodeclass.GroupVersion().String(), ""),
67+
// Convert the NodeClassReference depending on whether the annotation exists
68+
v1beta1nc.NodeClassRef = &v1beta1.NodeClassReference{}
69+
if nodeClassReferenceAnnotation != "" {
70+
if err := json.Unmarshal([]byte(nodeClassReferenceAnnotation), v1beta1nc.NodeClassRef); err != nil {
71+
return fmt.Errorf("unmarshaling nodeClassRef annotation, %w", err)
7172
}
73+
} else {
74+
v1beta1nc.NodeClassRef.Name = in.NodeClassRef.Name
75+
v1beta1nc.NodeClassRef.Kind = in.NodeClassRef.Kind
7276
}
73-
7477
if kubeletAnnotation != "" {
7578
v1beta1kubelet := &v1beta1.KubeletConfiguration{}
7679
err := json.Unmarshal([]byte(kubeletAnnotation), v1beta1kubelet)
@@ -114,6 +117,13 @@ func (in *NodeClaim) ConvertFrom(ctx context.Context, from apis.Convertible) err
114117
} else {
115118
in.Annotations = lo.Assign(in.Annotations, map[string]string{KubeletCompatibilityAnnotationKey: kubeletAnnotation})
116119
}
120+
nodeClassRefAnnotation, err := json.Marshal(v1beta1NC.Spec.NodeClassRef)
121+
if err != nil {
122+
return fmt.Errorf("marshaling nodeClassRef annotation, %w", err)
123+
}
124+
in.Annotations = lo.Assign(in.Annotations, map[string]string{
125+
NodeClassReferenceAnnotationKey: string(nodeClassRefAnnotation),
126+
})
117127
return in.setExpireAfter(ctx, v1beta1NC)
118128
}
119129

@@ -152,11 +162,11 @@ func (in *NodeClaimSpec) convertFrom(ctx context.Context, v1beta1nc *v1beta1.Nod
152162
}
153163
})
154164

155-
nodeclasses := injection.GetNodeClasses(ctx)
165+
defaultNodeClassGVK := injection.GetNodeClasses(ctx)[0]
156166
in.NodeClassRef = &NodeClassReference{
157167
Name: v1beta1nc.NodeClassRef.Name,
158-
Kind: lo.Ternary(v1beta1nc.NodeClassRef.Kind == "", nodeclasses[0].Kind, v1beta1nc.NodeClassRef.Kind),
159-
Group: lo.Ternary(v1beta1nc.NodeClassRef.APIVersion == "", nodeclasses[0].Group, strings.Split(v1beta1nc.NodeClassRef.APIVersion, "/")[0]),
168+
Kind: lo.Ternary(v1beta1nc.NodeClassRef.Kind == "", defaultNodeClassGVK.Kind, v1beta1nc.NodeClassRef.Kind),
169+
Group: lo.Ternary(v1beta1nc.NodeClassRef.APIVersion == "", defaultNodeClassGVK.Group, strings.Split(v1beta1nc.NodeClassRef.APIVersion, "/")[0]),
160170
}
161171

162172
if v1beta1nc.Kubelet != nil {

pkg/apis/v1/nodeclaim_conversion_test.go

+32-9
Original file line numberDiff line numberDiff line change
@@ -185,20 +185,30 @@ var _ = Describe("Convert v1 to v1beta1 NodeClaim API", func() {
185185
Group: object.GVK(&v1alpha1.TestNodeClass{}).Group,
186186
}
187187
Expect(v1nodeclaim.ConvertTo(ctx, v1beta1nodeclaim)).To(Succeed())
188-
Expect(v1beta1nodeclaim.Spec.NodeClassRef.Kind).To(Equal(v1nodeclaim.Spec.NodeClassRef.Kind))
189188
Expect(v1beta1nodeclaim.Spec.NodeClassRef.Name).To(Equal(v1nodeclaim.Spec.NodeClassRef.Name))
190-
Expect(v1beta1nodeclaim.Spec.NodeClassRef.APIVersion).To(Equal(cloudProvider.NodeClassGroupVersionKind[0].GroupVersion().String()))
189+
Expect(v1beta1nodeclaim.Spec.NodeClassRef.Kind).To(Equal(v1nodeclaim.Spec.NodeClassRef.Kind))
190+
Expect(v1beta1nodeclaim.Spec.NodeClassRef.APIVersion).To(BeEmpty())
191191
})
192-
It("should not include APIVersion for v1beta1 if Group and Kind is not in the supported nodeclass", func() {
192+
It("should retain NodeClassReference details when the karpenter.sh/v1beta1-nodeclass-reference annotation exists", func() {
193+
nodeClassReference := &v1beta1.NodeClassReference{
194+
APIVersion: object.GVK(&v1alpha1.TestNodeClass{}).GroupVersion().String(),
195+
Name: "nodeclass-test",
196+
Kind: object.GVK(&v1alpha1.TestNodeClass{}).Kind,
197+
}
198+
nodeClassAnnotation, err := json.Marshal(nodeClassReference)
199+
Expect(err).ToNot(HaveOccurred())
200+
v1nodeclaim.Annotations = lo.Assign(map[string]string{
201+
NodeClassReferenceAnnotationKey: string(nodeClassAnnotation),
202+
})
193203
v1nodeclaim.Spec.NodeClassRef = &NodeClassReference{
194-
Kind: "test-kind",
204+
Kind: object.GVK(&v1alpha1.TestNodeClass{}).Kind,
195205
Name: "nodeclass-test",
196-
Group: "testgroup.sh",
206+
Group: object.GVK(&v1alpha1.TestNodeClass{}).Group,
197207
}
198208
Expect(v1nodeclaim.ConvertTo(ctx, v1beta1nodeclaim)).To(Succeed())
199-
Expect(v1beta1nodeclaim.Spec.NodeClassRef.Kind).To(Equal(v1nodeclaim.Spec.NodeClassRef.Kind))
200-
Expect(v1beta1nodeclaim.Spec.NodeClassRef.Name).To(Equal(v1nodeclaim.Spec.NodeClassRef.Name))
201-
Expect(v1beta1nodeclaim.Spec.NodeClassRef.APIVersion).To(Equal(""))
209+
Expect(v1beta1nodeclaim.Spec.NodeClassRef.Name).To(Equal(nodeClassReference.Name))
210+
Expect(v1beta1nodeclaim.Spec.NodeClassRef.Kind).To(Equal(nodeClassReference.Kind))
211+
Expect(v1beta1nodeclaim.Spec.NodeClassRef.APIVersion).To(Equal(nodeClassReference.APIVersion))
202212
})
203213
})
204214
})
@@ -331,7 +341,12 @@ var _ = Describe("Convert V1beta1 to V1 NodeClaim API", func() {
331341
It("should convert v1beta1 nodeclaim metadata", func() {
332342
v1beta1nodeclaim.ObjectMeta = test.ObjectMeta()
333343
Expect(v1nodeclaim.ConvertFrom(ctx, v1beta1nodeclaim)).To(Succeed())
334-
v1beta1nodeclaim.Annotations = map[string]string{}
344+
345+
nodeClassReferenceAnnotation, err := json.Marshal(v1beta1nodeclaim.Spec.NodeClassRef)
346+
Expect(err).ToNot(HaveOccurred())
347+
v1beta1nodeclaim.Annotations = map[string]string{
348+
NodeClassReferenceAnnotationKey: string(nodeClassReferenceAnnotation),
349+
}
335350
Expect(v1nodeclaim.ObjectMeta).To(BeEquivalentTo(v1beta1nodeclaim.ObjectMeta))
336351
})
337352
Context("NodeClaim Spec", func() {
@@ -456,19 +471,27 @@ var _ = Describe("Convert V1beta1 to V1 NodeClaim API", func() {
456471
Name: "nodeclass-test",
457472
APIVersion: "testgroup.sh/testversion",
458473
}
474+
nodeClassReferenceAnnotation, err := json.Marshal(v1beta1nodeclaim.Spec.NodeClassRef)
475+
Expect(err).ToNot(HaveOccurred())
476+
459477
Expect(v1nodeclaim.ConvertFrom(ctx, v1beta1nodeclaim)).To(Succeed())
460478
Expect(v1nodeclaim.Spec.NodeClassRef.Kind).To(Equal(v1beta1nodeclaim.Spec.NodeClassRef.Kind))
461479
Expect(v1nodeclaim.Spec.NodeClassRef.Name).To(Equal(v1beta1nodeclaim.Spec.NodeClassRef.Name))
462480
Expect(v1nodeclaim.Spec.NodeClassRef.Group).To(Equal("testgroup.sh"))
481+
Expect(v1nodeclaim.Annotations).To(HaveKeyWithValue(NodeClassReferenceAnnotationKey, string(nodeClassReferenceAnnotation)))
463482
})
464483
It("should set default nodeclass group and kind on v1beta1 nodeclassRef", func() {
465484
v1beta1nodeclaim.Spec.NodeClassRef = &v1beta1.NodeClassReference{
466485
Name: "nodeclass-test",
467486
}
487+
nodeClassReferenceAnnotation, err := json.Marshal(v1beta1nodeclaim.Spec.NodeClassRef)
488+
Expect(err).ToNot(HaveOccurred())
489+
468490
Expect(v1nodeclaim.ConvertFrom(ctx, v1beta1nodeclaim)).To(Succeed())
469491
Expect(v1nodeclaim.Spec.NodeClassRef.Kind).To(Equal(cloudProvider.NodeClassGroupVersionKind[0].Kind))
470492
Expect(v1nodeclaim.Spec.NodeClassRef.Name).To(Equal(v1beta1nodeclaim.Spec.NodeClassRef.Name))
471493
Expect(v1nodeclaim.Spec.NodeClassRef.Group).To(Equal(cloudProvider.NodeClassGroupVersionKind[0].Group))
494+
Expect(v1nodeclaim.Annotations).To(HaveKeyWithValue(NodeClassReferenceAnnotationKey, string(nodeClassReferenceAnnotation)))
472495
})
473496
})
474497
})

pkg/apis/v1/nodepool_conversion.go

+28-31
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,11 @@ import (
2020
"context"
2121
"encoding/json"
2222
"fmt"
23-
"sort"
2423
"strings"
2524
"time"
2625

2726
"github.com/samber/lo"
2827
v1 "k8s.io/api/core/v1"
29-
"k8s.io/apimachinery/pkg/runtime/schema"
3028
"knative.dev/pkg/apis"
3129

3230
"sigs.k8s.io/karpenter/pkg/apis/v1beta1"
@@ -40,17 +38,23 @@ func (in *NodePool) ConvertTo(ctx context.Context, to apis.Convertible) error {
4038

4139
// Convert v1 status
4240
v1beta1NP.Status.Resources = in.Status.Resources
43-
return in.Spec.convertTo(ctx, &v1beta1NP.Spec, in.Annotations[KubeletCompatibilityAnnotationKey])
41+
if err := in.Spec.convertTo(&v1beta1NP.Spec, in.Annotations[KubeletCompatibilityAnnotationKey], in.Annotations[NodeClassReferenceAnnotationKey]); err != nil {
42+
return err
43+
}
44+
// Remove the annotations from the v1beta1 NodeClaim on the convert back
45+
delete(v1beta1NP.Annotations, KubeletCompatibilityAnnotationKey)
46+
delete(v1beta1NP.Annotations, NodeClassReferenceAnnotationKey)
47+
return nil
4448
}
4549

46-
func (in *NodePoolSpec) convertTo(ctx context.Context, v1beta1np *v1beta1.NodePoolSpec, kubeletAnnotation string) error {
50+
func (in *NodePoolSpec) convertTo(v1beta1np *v1beta1.NodePoolSpec, kubeletAnnotation, nodeClassReferenceAnnotation string) error {
4751
v1beta1np.Weight = in.Weight
4852
v1beta1np.Limits = v1beta1.Limits(in.Limits)
4953
in.Disruption.convertTo(&v1beta1np.Disruption)
5054
// Set the expireAfter to the nodeclaim template's expireAfter.
5155
// Don't convert terminationGracePeriod, as this is only included in v1.
5256
v1beta1np.Disruption.ExpireAfter = v1beta1.NillableDuration(in.Template.Spec.ExpireAfter)
53-
return in.Template.convertTo(ctx, &v1beta1np.Template, kubeletAnnotation)
57+
return in.Template.convertTo(&v1beta1np.Template, kubeletAnnotation, nodeClassReferenceAnnotation)
5458
}
5559

5660
func (in *Disruption) convertTo(v1beta1np *v1beta1.Disruption) {
@@ -68,7 +72,7 @@ func (in *Disruption) convertTo(v1beta1np *v1beta1.Disruption) {
6872
})
6973
}
7074

71-
func (in *NodeClaimTemplate) convertTo(ctx context.Context, v1beta1np *v1beta1.NodeClaimTemplate, kubeletAnnotation string) error {
75+
func (in *NodeClaimTemplate) convertTo(v1beta1np *v1beta1.NodeClaimTemplate, kubeletAnnotation, nodeClassReferenceAnnotation string) error {
7276
v1beta1np.ObjectMeta = v1beta1.ObjectMeta(in.ObjectMeta)
7377
v1beta1np.Spec.Taints = in.Spec.Taints
7478
v1beta1np.Spec.StartupTaints = in.Spec.StartupTaints
@@ -82,28 +86,16 @@ func (in *NodeClaimTemplate) convertTo(ctx context.Context, v1beta1np *v1beta1.N
8286
MinValues: v1Requirements.MinValues,
8387
}
8488
})
85-
86-
nodeClasses := injection.GetNodeClasses(ctx)
87-
// We are sorting the supported nodeclass, so that we are able to consistently find the same GVK,
88-
// if multiple version of a nodeclass are supported
89-
sort.Slice(nodeClasses, func(i int, j int) bool {
90-
if nodeClasses[i].Group != nodeClasses[j].Group {
91-
return nodeClasses[i].Group < nodeClasses[j].Group
89+
// Convert the NodeClassReference depending on whether the annotation exists
90+
v1beta1np.Spec.NodeClassRef = &v1beta1.NodeClassReference{}
91+
if nodeClassReferenceAnnotation != "" {
92+
if err := json.Unmarshal([]byte(nodeClassReferenceAnnotation), v1beta1np.Spec.NodeClassRef); err != nil {
93+
return fmt.Errorf("unmarshaling nodeClassRef annotation, %w", err)
9294
}
93-
if nodeClasses[i].Version != nodeClasses[j].Version {
94-
return nodeClasses[i].Version < nodeClasses[j].Version
95-
}
96-
return nodeClasses[i].Kind < nodeClasses[j].Kind
97-
})
98-
matchingNodeClass, found := lo.Find(nodeClasses, func(nc schema.GroupVersionKind) bool {
99-
return nc.Kind == in.Spec.NodeClassRef.Kind && nc.Group == in.Spec.NodeClassRef.Group
100-
})
101-
v1beta1np.Spec.NodeClassRef = &v1beta1.NodeClassReference{
102-
Kind: in.Spec.NodeClassRef.Kind,
103-
Name: in.Spec.NodeClassRef.Name,
104-
APIVersion: lo.Ternary(found, matchingNodeClass.GroupVersion().String(), ""),
95+
} else {
96+
v1beta1np.Spec.NodeClassRef.Name = in.Spec.NodeClassRef.Name
97+
v1beta1np.Spec.NodeClassRef.Kind = in.Spec.NodeClassRef.Kind
10598
}
106-
10799
if kubeletAnnotation != "" {
108100
v1beta1kubelet := &v1beta1.KubeletConfiguration{}
109101
err := json.Unmarshal([]byte(kubeletAnnotation), v1beta1kubelet)
@@ -133,6 +125,13 @@ func (in *NodePool) ConvertFrom(ctx context.Context, v1beta1np apis.Convertible)
133125
} else {
134126
in.Annotations = lo.Assign(in.Annotations, map[string]string{KubeletCompatibilityAnnotationKey: kubeletAnnotation})
135127
}
128+
nodeClassRefAnnotation, err := json.Marshal(v1beta1NP.Spec.Template.Spec.NodeClassRef)
129+
if err != nil {
130+
return fmt.Errorf("marshaling nodeClassRef annotation, %w", err)
131+
}
132+
in.Annotations = lo.Assign(in.Annotations, map[string]string{
133+
NodeClassReferenceAnnotationKey: string(nodeClassRefAnnotation),
134+
})
136135
return nil
137136
}
138137

@@ -174,20 +173,18 @@ func (in *NodeClaimTemplate) convertFrom(ctx context.Context, v1beta1np *v1beta1
174173
}
175174
})
176175

177-
nodeclasses := injection.GetNodeClasses(ctx)
176+
defaultNodeClassGVK := injection.GetNodeClasses(ctx)[0]
178177
in.Spec.NodeClassRef = &NodeClassReference{
179178
Name: v1beta1np.Spec.NodeClassRef.Name,
180-
Kind: lo.Ternary(v1beta1np.Spec.NodeClassRef.Kind == "", nodeclasses[0].Kind, v1beta1np.Spec.NodeClassRef.Kind),
181-
Group: lo.Ternary(v1beta1np.Spec.NodeClassRef.APIVersion == "", nodeclasses[0].Group, strings.Split(v1beta1np.Spec.NodeClassRef.APIVersion, "/")[0]),
179+
Kind: lo.Ternary(v1beta1np.Spec.NodeClassRef.Kind == "", defaultNodeClassGVK.Kind, v1beta1np.Spec.NodeClassRef.Kind),
180+
Group: lo.Ternary(v1beta1np.Spec.NodeClassRef.APIVersion == "", defaultNodeClassGVK.Group, strings.Split(v1beta1np.Spec.NodeClassRef.APIVersion, "/")[0]),
182181
}
183-
184182
if v1beta1np.Spec.Kubelet != nil {
185183
kubelet, err := json.Marshal(v1beta1np.Spec.Kubelet)
186184
if err != nil {
187185
return "", fmt.Errorf("marshaling kubelet config annotation, %w", err)
188186
}
189187
return string(kubelet), nil
190188
}
191-
192189
return "", nil
193190
}

pkg/apis/v1/nodepool_conversion_test.go

+26-8
Original file line numberDiff line numberDiff line change
@@ -183,20 +183,30 @@ var _ = Describe("Convert V1 to V1beta1 NodePool API", func() {
183183
Group: object.GVK(&v1alpha1.TestNodeClass{}).Group,
184184
}
185185
Expect(v1nodepool.ConvertTo(ctx, v1beta1nodepool)).To(Succeed())
186-
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Kind).To(Equal(v1nodepool.Spec.Template.Spec.NodeClassRef.Kind))
187186
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Name).To(Equal(v1nodepool.Spec.Template.Spec.NodeClassRef.Name))
188-
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.APIVersion).To(Equal(cloudProvider.NodeClassGroupVersionKind[0].GroupVersion().String()))
187+
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Kind).To(Equal(v1nodepool.Spec.Template.Spec.NodeClassRef.Kind))
188+
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.APIVersion).To(BeEmpty())
189189
})
190-
It("should not include APIVersion for v1beta1 if Group and Kind is not in the supported nodeclass", func() {
190+
It("should retain NodeClassReference details when the karpenter.sh/v1beta1-nodeclass-reference annotation exists", func() {
191+
nodeClassReference := &v1beta1.NodeClassReference{
192+
APIVersion: object.GVK(&v1alpha1.TestNodeClass{}).GroupVersion().String(),
193+
Name: "nodeclass-test",
194+
Kind: object.GVK(&v1alpha1.TestNodeClass{}).Kind,
195+
}
196+
nodeClassAnnotation, err := json.Marshal(nodeClassReference)
197+
Expect(err).ToNot(HaveOccurred())
198+
v1nodepool.Annotations = lo.Assign(map[string]string{
199+
NodeClassReferenceAnnotationKey: string(nodeClassAnnotation),
200+
})
191201
v1nodepool.Spec.Template.Spec.NodeClassRef = &NodeClassReference{
192-
Kind: "test-kind",
202+
Kind: object.GVK(&v1alpha1.TestNodeClass{}).Kind,
193203
Name: "nodeclass-test",
194-
Group: "testgroup.sh",
204+
Group: object.GVK(&v1alpha1.TestNodeClass{}).Group,
195205
}
196206
Expect(v1nodepool.ConvertTo(ctx, v1beta1nodepool)).To(Succeed())
197-
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Kind).To(Equal(v1nodepool.Spec.Template.Spec.NodeClassRef.Kind))
198-
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Name).To(Equal(v1nodepool.Spec.Template.Spec.NodeClassRef.Name))
199-
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.APIVersion).To(Equal(""))
207+
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Name).To(Equal(nodeClassReference.Name))
208+
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Kind).To(Equal(nodeClassReference.Kind))
209+
Expect(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.APIVersion).To(Equal(nodeClassReference.APIVersion))
200210
})
201211
})
202212
})
@@ -449,19 +459,27 @@ var _ = Describe("Convert V1beta1 to V1 NodePool API", func() {
449459
Name: "nodeclass-test",
450460
APIVersion: "testgroup.sh/testversion",
451461
}
462+
nodeClassReferenceAnnotation, err := json.Marshal(v1beta1nodepool.Spec.Template.Spec.NodeClassRef)
463+
Expect(err).ToNot(HaveOccurred())
464+
452465
Expect(v1nodepool.ConvertFrom(ctx, v1beta1nodepool)).To(Succeed())
453466
Expect(v1nodepool.Spec.Template.Spec.NodeClassRef.Kind).To(Equal(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Kind))
454467
Expect(v1nodepool.Spec.Template.Spec.NodeClassRef.Name).To(Equal(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Name))
455468
Expect(v1nodepool.Spec.Template.Spec.NodeClassRef.Group).To(Equal("testgroup.sh"))
469+
Expect(v1nodepool.Annotations).To(HaveKeyWithValue(NodeClassReferenceAnnotationKey, string(nodeClassReferenceAnnotation)))
456470
})
457471
It("should set default nodeclass group and kind on v1beta1 nodeclassRef", func() {
458472
v1beta1nodepool.Spec.Template.Spec.NodeClassRef = &v1beta1.NodeClassReference{
459473
Name: "nodeclass-test",
460474
}
475+
nodeClassReferenceAnnotation, err := json.Marshal(v1beta1nodepool.Spec.Template.Spec.NodeClassRef)
476+
Expect(err).ToNot(HaveOccurred())
477+
461478
Expect(v1nodepool.ConvertFrom(ctx, v1beta1nodepool)).To(Succeed())
462479
Expect(v1nodepool.Spec.Template.Spec.NodeClassRef.Kind).To(Equal(cloudProvider.NodeClassGroupVersionKind[0].Kind))
463480
Expect(v1nodepool.Spec.Template.Spec.NodeClassRef.Name).To(Equal(v1beta1nodepool.Spec.Template.Spec.NodeClassRef.Name))
464481
Expect(v1nodepool.Spec.Template.Spec.NodeClassRef.Group).To(Equal(cloudProvider.NodeClassGroupVersionKind[0].Group))
482+
Expect(v1nodepool.Annotations).To(HaveKeyWithValue(NodeClassReferenceAnnotationKey, string(nodeClassReferenceAnnotation)))
465483
})
466484
})
467485
})

0 commit comments

Comments
 (0)