Skip to content

Commit b80a751

Browse files
Ensure failed secret dereferencing is recoverable (#349)
Fixes aws-controllers-k8s/community#1318 Description of changes: If an ACK resource is evaluated before a secret becomes available, the controller should attempt to retry (with exponential backoff) until the secret exists. This pull request ensures that any error returned by `SecretValueFromReference` is retried by the controller. Note: I chose not to update the error values in `SecretValueFromReference` because I thought it was more appropriate that the SDK logic chose the requeue action, not the secret fetching method. By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent a8d5fa4 commit b80a751

File tree

3 files changed

+10
-8
lines changed

3 files changed

+10
-8
lines changed

pkg/generate/code/set_sdk.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -948,7 +948,7 @@ func setSDKForContainer(
948948
//
949949
// tmpSecret, err := rm.rr.SecretValueFromReference(ctx, ko.Spec.MasterUserPassword)
950950
// if err != nil {
951-
// return nil, err
951+
// return nil, ackrequeue.Needed(err)
952952
// }
953953
// if tmpSecret != "" {
954954
// res.SetMasterUserPassword(tmpSecret)
@@ -958,7 +958,7 @@ func setSDKForContainer(
958958
//
959959
// tmpSecret, err := rm.rr.SecretValueFromReference(ctx, f3iter)
960960
// if err != nil {
961-
// return nil, err
961+
// return nil, ackrequeue.Needed(err)
962962
// }
963963
// if tmpSecret != "" {
964964
// f3elem = tmpSecret
@@ -989,10 +989,10 @@ func setSDKForSecret(
989989
indent, secVar, sourceVarName,
990990
)
991991
// if err != nil {
992-
// return nil, err
992+
// return nil, ackrequeue.Needed(err)
993993
// }
994994
out += fmt.Sprintf("%s\tif err != nil {\n", indent)
995-
out += fmt.Sprintf("%s\t\treturn nil, err\n", indent)
995+
out += fmt.Sprintf("%s\t\treturn nil, ackrequeue.Needed(err)\n", indent)
996996
out += fmt.Sprintf("%s\t}\n", indent)
997997
// if tmpSecret != "" {
998998
// res.SetMasterUserPassword(tmpSecret)

pkg/generate/code/set_sdk_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -970,7 +970,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Create(t *testing.T) {
970970
if r.ko.Spec.AuthToken != nil {
971971
tmpSecret, err := rm.rr.SecretValueFromReference(ctx, r.ko.Spec.AuthToken)
972972
if err != nil {
973-
return nil, err
973+
return nil, ackrequeue.Needed(err)
974974
}
975975
if tmpSecret != "" {
976976
res.SetAuthToken(tmpSecret)
@@ -1225,7 +1225,7 @@ func TestSetSDK_Elasticache_ReplicationGroup_Update_Override_Values(t *testing.T
12251225
if r.ko.Spec.AuthToken != nil {
12261226
tmpSecret, err := rm.rr.SecretValueFromReference(ctx, r.ko.Spec.AuthToken)
12271227
if err != nil {
1228-
return nil, err
1228+
return nil, ackrequeue.Needed(err)
12291229
}
12301230
if tmpSecret != "" {
12311231
res.SetAuthToken(tmpSecret)
@@ -1347,7 +1347,7 @@ func TestSetSDK_Elasticache_User_Create_Override_Values(t *testing.T) {
13471347
if f3iter != nil {
13481348
tmpSecret, err := rm.rr.SecretValueFromReference(ctx, f3iter)
13491349
if err != nil {
1350-
return nil, err
1350+
return nil, ackrequeue.Needed(err)
13511351
}
13521352
if tmpSecret != "" {
13531353
f3elem = tmpSecret
@@ -1974,7 +1974,7 @@ func TestSetSDK_MQ_Broker_Create(t *testing.T) {
19741974
if f18iter.Password != nil {
19751975
tmpSecret, err := rm.rr.SecretValueFromReference(ctx, f18iter.Password)
19761976
if err != nil {
1977-
return nil, err
1977+
return nil, ackrequeue.Needed(err)
19781978
}
19791979
if tmpSecret != "" {
19801980
f18elem.SetPassword(tmpSecret)

templates/pkg/resource/sdk.go.tpl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
ackcondition "github.com/aws-controllers-k8s/runtime/pkg/condition"
1414
ackcompare "github.com/aws-controllers-k8s/runtime/pkg/compare"
1515
ackerr "github.com/aws-controllers-k8s/runtime/pkg/errors"
16+
ackrequeue "github.com/aws-controllers-k8s/runtime/pkg/requeue"
1617
ackrtlog "github.com/aws-controllers-k8s/runtime/pkg/runtime/log"
1718
"github.com/aws/aws-sdk-go/aws"
1819
svcsdk "github.com/aws/aws-sdk-go/service/{{ .ServicePackageName }}"
@@ -34,6 +35,7 @@ var (
3435
_ = &ackcondition.NotManagedMessage
3536
_ = &reflect.Value{}
3637
_ = fmt.Sprintf("")
38+
_ = &ackrequeue.NoRequeue{}
3739
)
3840

3941
// sdkFind returns SDK-specific information about a supplied resource

0 commit comments

Comments
 (0)