Skip to content

Commit f3fbb06

Browse files
authored
feat: support cluster tag updates (#72)
Issue [#2553](aws-controllers-k8s/community#2553) Description of changes: Support cluster tag updates and add e2e tests By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 65912ad commit f3fbb06

File tree

8 files changed

+189
-20
lines changed

8 files changed

+189
-20
lines changed
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
ack_generate_info:
2-
build_date: "2025-07-15T03:10:59Z"
2+
build_date: "2025-07-15T20:52:52Z"
33
build_hash: c6808295bbb03aac999713ecf1f3aa5cd698a17e
44
go_version: go1.24.4
55
version: v0.49.0
66
api_directory_checksum: 83a6f2d33e6781954a317da21e666cd5195403b7
77
api_version: v1alpha1
88
aws_sdk_go_version: v1.32.6
99
generator_config_info:
10-
file_checksum: 6355b93f40e251c132cf1ac3a6a29c89ac40de7c
10+
file_checksum: 16526e586defd6129b39dec48357c841c9007aca
1111
original_file_name: generator.yaml
1212
last_modification:
1313
reason: API generation

apis/v1alpha1/generator.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,6 @@ resources:
6666
resource: Secret
6767
service_name: secretsmanager
6868
path: Status.ACKResourceMetadata.ARN
69-
Tags:
70-
compare:
71-
is_ignored: true
7269
BrokerNodeGroupInfo.ConnectivityInfo.PublicAccess.Type:
7370
go_tag: json:"type,omitempty"
7471
ZookeeperConnectString:
@@ -112,9 +109,6 @@ resources:
112109
operation: DescribeCluster
113110
path: ClusterInfo.CurrentVersion
114111
is_read_only: true
115-
tags:
116-
# TODO(jaypipes): Ignore tags for now... we will add support later
117-
ignore: true
118112
ServerlessCluster:
119113
is_arn_primary_key: true
120114
renames:

generator.yaml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,6 @@ resources:
6666
resource: Secret
6767
service_name: secretsmanager
6868
path: Status.ACKResourceMetadata.ARN
69-
Tags:
70-
compare:
71-
is_ignored: true
7269
BrokerNodeGroupInfo.ConnectivityInfo.PublicAccess.Type:
7370
go_tag: json:"type,omitempty"
7471
ZookeeperConnectString:
@@ -112,9 +109,6 @@ resources:
112109
operation: DescribeCluster
113110
path: ClusterInfo.CurrentVersion
114111
is_read_only: true
115-
tags:
116-
# TODO(jaypipes): Ignore tags for now... we will add support later
117-
ignore: true
118112
ServerlessCluster:
119113
is_arn_primary_key: true
120114
renames:

pkg/resource/cluster/delta.go

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

pkg/resource/cluster/hooks.go

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"time"
2222

2323
svcapitypes "github.com/aws-controllers-k8s/kafka-controller/apis/v1alpha1"
24+
"github.com/aws-controllers-k8s/kafka-controller/pkg/sync"
2425
ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare"
2526
ackcondition "github.com/aws-controllers-k8s/runtime/pkg/condition"
2627
ackerr "github.com/aws-controllers-k8s/runtime/pkg/errors"
@@ -159,6 +160,17 @@ func (rm *resourceManager) customUpdate(
159160
}
160161

161162
switch {
163+
case delta.DifferentAt("Spec.Tags"):
164+
if err = sync.Tags(
165+
ctx,
166+
desired.ko.Spec.Tags, latest.ko.Spec.Tags,
167+
(*string)(latest.ko.Status.ACKResourceMetadata.ARN),
168+
convertToOrderedACKTags, rm.sdkapi, rm.metrics,
169+
); err != nil {
170+
return updatedRes, nil
171+
}
172+
return updatedRes, requeueAfterAsyncUpdate()
173+
162174
case delta.DifferentAt("Spec.ClientAuthentication"):
163175
return rm.updateClientAuthentication(ctx, updatedRes, latest)
164176
case delta.DifferentAt("Spec.AssociatedSCRAMSecrets"):
@@ -201,7 +213,7 @@ func (rm *resourceManager) updateNumberOfBrokerNodes(
201213
if err != nil {
202214
return latest, err
203215
}
204-
message := fmt.Sprintf("kafka is updating broker number of broker nodes")
216+
message := "kafka is updating broker number of broker nodes"
205217
ackcondition.SetSynced(updatedRes, corev1.ConditionFalse, &message, nil)
206218

207219
return desired, requeueAfterAsyncUpdate()
@@ -226,7 +238,7 @@ func (rm *resourceManager) updateBrokerType(
226238
if err != nil {
227239
return nil, err
228240
}
229-
message := fmt.Sprintf("kafka is updating broker instanceType")
241+
message := "kafka is updating broker instanceType"
230242
ackcondition.SetSynced(updatedRes, corev1.ConditionFalse, &message, nil)
231243

232244
return desired, requeueAfterAsyncUpdate()
@@ -418,7 +430,6 @@ func (rm *resourceManager) getAssociatedScramSecrets(
418430
// BatchAssociateScramSecret or Disassociate. It represents the
419431
// secretArns that could not be associated and the reason
420432
type unprocessedSecrets struct {
421-
error
422433
errorCodes []string
423434
errorMessages []string
424435
secretArns []string

pkg/resource/cluster/manager.go

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

pkg/resource/cluster/tags.go

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

test/e2e/tests/test_cluster.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,3 +197,32 @@ def test_crud(self, simple_cluster):
197197

198198
latest_secrets = cluster.get_associated_scram_secrets(cluster_arn)
199199
assert len(latest_secrets) == 0
200+
201+
# Test adding tags to the cluster
202+
updates = {
203+
"spec": {
204+
"tags": {
205+
"tag1": "val1",
206+
"tag2": "val2"
207+
}
208+
}
209+
}
210+
k8s.patch_custom_resource(ref, updates)
211+
time.sleep(CHECK_STATUS_WAIT_SECONDS)
212+
assert k8s.wait_on_condition(
213+
ref,
214+
"ACK.ResourceSynced",
215+
"True",
216+
wait_periods=MODIFY_WAIT_AFTER_SECONDS,
217+
)
218+
219+
cr = k8s.get_resource(ref)
220+
latest_tags = cluster.get_tags(cluster_arn)
221+
desired_tags = cr['spec']['tags']
222+
tags.assert_ack_system_tags(
223+
tags=latest_tags,
224+
)
225+
tags.assert_equal_without_ack_tags(
226+
expected=desired_tags,
227+
actual=latest_tags,
228+
)

0 commit comments

Comments
 (0)