Skip to content

Commit cc1af99

Browse files
committed
Add CAPA additional tags to karpenter resources
1 parent 0482904 commit cc1af99

12 files changed

+24
-115
lines changed

controllers/controllersfakes/fake_awscluster_client.go

Lines changed: 0 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controllers/controllersfakes/fake_cluster_client.go

Lines changed: 0 additions & 24 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

controllers/karpentermachinepool_controller.go

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,7 @@ func (r *KarpenterMachinePoolReconciler) createOrUpdateKarpenterResources(ctx co
356356
}
357357

358358
// Create or update EC2NodeClass
359-
if err := r.createOrUpdateEC2NodeClass(ctx, logger, workloadClusterClient, cluster, awsCluster, karpenterMachinePool, bootstrapSecretValue); err != nil {
359+
if err := r.createOrUpdateEC2NodeClass(ctx, logger, workloadClusterClient, awsCluster, karpenterMachinePool, bootstrapSecretValue); err != nil {
360360
conditions.MarkEC2NodeClassNotReady(karpenterMachinePool, EC2NodeClassCreationFailedReason, err.Error())
361361
return fmt.Errorf("failed to create or update EC2NodeClass: %w", err)
362362
}
@@ -375,7 +375,7 @@ func (r *KarpenterMachinePoolReconciler) createOrUpdateKarpenterResources(ctx co
375375
}
376376

377377
// createOrUpdateEC2NodeClass creates or updates the EC2NodeClass resource in the workload cluster
378-
func (r *KarpenterMachinePoolReconciler) createOrUpdateEC2NodeClass(ctx context.Context, logger logr.Logger, workloadClusterClient client.Client, cluster *capi.Cluster, awsCluster *capa.AWSCluster, karpenterMachinePool *v1alpha1.KarpenterMachinePool, bootstrapSecretValue []byte) error {
378+
func (r *KarpenterMachinePoolReconciler) createOrUpdateEC2NodeClass(ctx context.Context, logger logr.Logger, workloadClusterClient client.Client, awsCluster *capa.AWSCluster, karpenterMachinePool *v1alpha1.KarpenterMachinePool, bootstrapSecretValue []byte) error {
379379
ec2NodeClassGVR := schema.GroupVersionResource{
380380
Group: EC2NodeClassAPIGroup,
381381
Version: "v1",
@@ -407,6 +407,7 @@ func (r *KarpenterMachinePoolReconciler) createOrUpdateEC2NodeClass(ctx context.
407407
"securityGroupSelectorTerms": karpenterMachinePool.Spec.EC2NodeClass.SecurityGroupSelectorTerms,
408408
"subnetSelectorTerms": karpenterMachinePool.Spec.EC2NodeClass.SubnetSelectorTerms,
409409
"userData": userData,
410+
"tags": mergeMaps(awsCluster.Spec.AdditionalTags, karpenterMachinePool.Spec.EC2NodeClass.Tags),
410411
}
411412

412413
ec2NodeClass.Object["spec"] = spec
@@ -427,6 +428,16 @@ func (r *KarpenterMachinePoolReconciler) createOrUpdateEC2NodeClass(ctx context.
427428
return nil
428429
}
429430

431+
func mergeMaps[A comparable, B any](maps ...map[A]B) map[A]B {
432+
result := make(map[A]B)
433+
for _, m := range maps {
434+
for k, v := range m {
435+
result[k] = v
436+
}
437+
}
438+
return result
439+
}
440+
430441
// createOrUpdateNodePool creates or updates the NodePool resource in the workload cluster
431442
func (r *KarpenterMachinePoolReconciler) createOrUpdateNodePool(ctx context.Context, logger logr.Logger, workloadClusterClient client.Client, cluster *capi.Cluster, karpenterMachinePool *v1alpha1.KarpenterMachinePool) error {
432443
nodePoolGVR := schema.GroupVersionResource{

controllers/karpentermachinepool_controller_test.go

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,6 @@ var _ = Describe("KarpenterMachinePool reconciler", func() {
7575
err = karpenterinfra.AddToScheme(scheme.Scheme)
7676
Expect(err).NotTo(HaveOccurred())
7777

78-
// fakeCtrlClient := fake.NewClientBuilder().
79-
// WithScheme(scheme.Scheme).
80-
// // WithStatusSubresource(&karpenterinfra.KarpenterMachinePool{}).
81-
// Build()
82-
8378
workloadClusterClientGetter := func(ctx context.Context, _ string, _ client.Client, _ client.ObjectKey) (client.Client, error) {
8479
// Return the same client that we're using for the test
8580
return k8sClient, nil
@@ -592,6 +587,9 @@ var _ = Describe("KarpenterMachinePool reconciler", func() {
592587
Tags: map[string]string{"my-target-subnet": "is-that"},
593588
},
594589
},
590+
Tags: map[string]string{
591+
"one-tag": "only-for-karpenter",
592+
},
595593
},
596594
NodePool: &karpenterinfra.NodePoolSpec{
597595
Template: karpenterinfra.NodeClaimTemplate{
@@ -807,6 +805,9 @@ var _ = Describe("KarpenterMachinePool reconciler", func() {
807805
Name: ClusterName,
808806
},
809807
Spec: capa.AWSClusterSpec{
808+
AdditionalTags: map[string]string{
809+
"additional-tag-for-all-resources": "custom-tag",
810+
},
810811
IdentityRef: &capa.AWSIdentityReference{
811812
Name: "default",
812813
Kind: capa.ClusterRoleIdentityKind,
@@ -885,6 +886,10 @@ var _ = Describe("KarpenterMachinePool reconciler", func() {
885886

886887
ExpectUnstructured(ec2nodeclassList.Items[0], "spec", "userData").To(Equal(fmt.Sprintf("{\"ignition\":{\"config\":{\"merge\":[{\"source\":\"s3://%s/karpenter-machine-pool/%s\",\"verification\":{}}],\"replace\":{\"verification\":{}}},\"proxy\":{},\"security\":{\"tls\":{}},\"timeouts\":{},\"version\":\"3.4.0\"},\"kernelArguments\":{},\"passwd\":{},\"storage\":{},\"systemd\":{}}", AWSClusterBucketName, KarpenterMachinePoolName)))
887888
ExpectUnstructured(ec2nodeclassList.Items[0], "spec", "instanceProfile").To(Equal(KarpenterNodesInstanceProfile))
889+
ExpectUnstructured(ec2nodeclassList.Items[0], "spec", "tags").
890+
To(HaveKeyWithValue("additional-tag-for-all-resources", "custom-tag"))
891+
ExpectUnstructured(ec2nodeclassList.Items[0], "spec", "tags").
892+
To(HaveKeyWithValue("one-tag", "only-for-karpenter"))
888893

889894
ExpectUnstructured(ec2nodeclassList.Items[0], "spec", "blockDeviceMappings").To(HaveLen(1))
890895
ExpectUnstructured(ec2nodeclassList.Items[0], "spec", "blockDeviceMappings").To(
@@ -1283,8 +1288,7 @@ var _ = Describe("KarpenterMachinePool reconciler", func() {
12831288
})
12841289
})
12851290

1286-
// ExpectUnstructured digs into u.Object at the given path,
1287-
// asserts that it was found and error‐free, and returns
1291+
// ExpectUnstructured digs into u.Object at the given path, asserts that it was found and error‐free, and returns
12881292
// a GomegaAssertion on the raw interface{} value.
12891293
func ExpectUnstructured(u unstructured.Unstructured, fields ...string) Assertion {
12901294
v, found, err := unstructured.NestedFieldNoCopy(u.Object, fields...)

pkg/resolver/resolverfakes/fake_ec2client.go

Lines changed: 0 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resolver/resolverfakes/fake_prefix_list_client.go

Lines changed: 0 additions & 8 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resolver/resolverfakes/fake_ramclient.go

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resolver/resolverfakes/fake_resolver_client.go

Lines changed: 0 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resolver/resolverfakes/fake_route53client.go

Lines changed: 0 additions & 16 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resolver/resolverfakes/fake_route_table_client.go

Lines changed: 0 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)