Skip to content

Commit 5ce92f5

Browse files
committed
Handle BatchAssociateScramSecret errors
1 parent c40ba8f commit 5ce92f5

File tree

2 files changed

+57
-15
lines changed

2 files changed

+57
-15
lines changed

pkg/resource/cluster/hooks.go

+31-7
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
svcapitypes "github.com/aws-controllers-k8s/kafka-controller/apis/v1alpha1"
2424
ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare"
2525
ackcondition "github.com/aws-controllers-k8s/runtime/pkg/condition"
26+
ackerr "github.com/aws-controllers-k8s/runtime/pkg/errors"
2627
ackrequeue "github.com/aws-controllers-k8s/runtime/pkg/requeue"
2728
ackrtlog "github.com/aws-controllers-k8s/runtime/pkg/runtime/log"
2829
ackutil "github.com/aws-controllers-k8s/runtime/pkg/util"
@@ -354,6 +355,16 @@ func (rm *resourceManager) getAssociatedScramSecrets(
354355
return res, err
355356
}
356357

358+
type unprocessedSecret struct {
359+
errorCode string
360+
errorMessage string
361+
secretArn string
362+
}
363+
364+
func (us unprocessedSecret) String() string {
365+
return fmt.Sprintf("ErrorCode: %s, ErrorMessage %s, SecretArn: %s", us.errorCode, us.errorMessage, us.secretArn)
366+
}
367+
357368
// batchAssociateScramSecret associates the supplied scram secrets to the supplied Cluster
358369
// resource
359370
func (rm *resourceManager) batchAssociateScramSecret(
@@ -367,14 +378,27 @@ func (rm *resourceManager) batchAssociateScramSecret(
367378

368379
input := &svcsdk.BatchAssociateScramSecretInput{}
369380
input.ClusterArn = (*string)(r.ko.Status.ACKResourceMetadata.ARN)
370-
// Convert []*string to []string
371-
unrefSecrets := make([]string, len(secretARNs))
372-
for i, s := range secretARNs {
373-
unrefSecrets[i] = *s
374-
}
375-
input.SecretArnList = unrefSecrets
376-
_, err = rm.sdkapi.BatchAssociateScramSecret(ctx, input)
381+
input.SecretArnList = aws.ToStringSlice(secretARNs)
382+
resp, err := rm.sdkapi.BatchAssociateScramSecret(ctx, input)
377383
rm.metrics.RecordAPICall("UPDATE", "BatchAssociateScramSecret", err)
384+
if err != nil {
385+
return err
386+
}
387+
388+
if len(resp.UnprocessedScramSecrets) > 0 {
389+
unprocessedSecrets := []unprocessedSecret{}
390+
for _, uss := range resp.UnprocessedScramSecrets {
391+
us := unprocessedSecret{
392+
errorCode: aws.ToString(uss.ErrorCode),
393+
errorMessage: aws.ToString(uss.ErrorMessage),
394+
secretArn: aws.ToString(uss.SecretArn),
395+
}
396+
unprocessedSecrets = append(unprocessedSecrets, us)
397+
}
398+
399+
return ackerr.NewTerminalError(fmt.Errorf("Cant attach secret arns: %v", unprocessedSecrets))
400+
}
401+
378402
return err
379403
}
380404

test/e2e/tests/test_cluster.py

+26-8
Original file line numberDiff line numberDiff line change
@@ -133,17 +133,39 @@ def test_crud(self, simple_cluster):
133133
updates = {
134134
"spec": {
135135
"associatedSCRAMSecrets": [secret_1, secret_2],
136+
},
137+
}
138+
k8s.patch_custom_resource(ref, updates)
139+
time.sleep(CHECK_STATUS_WAIT_SECONDS)
140+
assert k8s.wait_on_condition(
141+
ref,
142+
"ACK.ResourceSynced",
143+
"True",
144+
wait_periods=MODIFY_WAIT_AFTER_SECONDS,
145+
)
146+
147+
cluster.wait_until(
148+
cluster_arn,
149+
cluster.state_matches("ACTIVE"),
150+
)
151+
152+
latest_secrets = cluster.get_associated_scram_secrets(cluster_arn)
153+
assert len(latest_secrets) == 2
154+
assert secret_1 in latest_secrets and secret_2 in latest_secrets
155+
156+
updates = {
157+
"spec": {
136158
'brokerNodeGroupInfo': {
137159
"storageInfo": {
138160
"ebsStorageInfo": {
139161
"volumeSize": updated_volume_size
140162
}
141163
}
142164
}
143-
},
165+
}
144166
}
145167
k8s.patch_custom_resource(ref, updates)
146-
168+
time.sleep(MODIFY_WAIT_AFTER_SECONDS)
147169
assert k8s.wait_on_condition(
148170
ref,
149171
"ACK.ResourceSynced",
@@ -155,19 +177,15 @@ def test_crud(self, simple_cluster):
155177
cluster_arn,
156178
cluster.state_matches("ACTIVE"),
157179
)
158-
159-
latest_secrets = cluster.get_associated_scram_secrets(cluster_arn)
160-
assert len(latest_secrets) == 2
161-
assert secret_1 in latest_secrets and secret_2 in latest_secrets
162-
180+
time.sleep(MODIFY_WAIT_AFTER_SECONDS)
163181

164182
latest_cluster = cluster.get_by_arn(cluster_arn)
165183
assert latest_cluster is not None
166184

167185
latest_volume = latest_cluster['BrokerNodeGroupInfo']["StorageInfo"]["EbsStorageInfo"]["VolumeSize"]
168186
desired_volume = cr['spec']['brokerNodeGroupInfo']['storageInfo']['ebsStorageInfo']['volumeSize']
169187

170-
assert latest_volume == desired_volume == updated_volume_size
188+
assert latest_volume == desired_volume
171189

172190
# remove all associated secrets
173191
updates = {

0 commit comments

Comments
 (0)