diff --git a/apis/v1alpha1/ack-generate-metadata.yaml b/apis/v1alpha1/ack-generate-metadata.yaml index d80788ee..026912cf 100755 --- a/apis/v1alpha1/ack-generate-metadata.yaml +++ b/apis/v1alpha1/ack-generate-metadata.yaml @@ -1,14 +1,14 @@ ack_generate_info: - build_date: "2021-07-01T01:00:26Z" - build_hash: 9fec5f08628d5dcc3af38d517ea014930b1ae39d + build_date: "2021-07-16T03:54:07Z" + build_hash: 7832e9aa4a48565302cd440f4cdf2267f04adfed go_version: go1.15.2 darwin/amd64 - version: v0.3.1 -api_directory_checksum: a0e397840365dfef9f86900d211b96e5040cf6a9 + version: v0.5.0 +api_directory_checksum: 04701e412e7e4597466c1d56571be2c5de2b1e27 api_version: v1alpha1 aws_sdk_go_version: "" generator_config_info: - file_checksum: fa5597fbe4affa148d62ff2079b8d12ac1e07098 + file_checksum: cc29e8be7c6f65ef2f8db75fc3752adbf18590df original_file_name: generator.yaml last_modification: reason: API generation - timestamp: 2021-07-01 01:00:35.012299 +0000 UTC \ No newline at end of file + timestamp: 2021-07-16 03:54:15.20368 +0000 UTC diff --git a/apis/v1alpha1/generator.yaml b/apis/v1alpha1/generator.yaml index ae39c9d8..5aedf654 100644 --- a/apis/v1alpha1/generator.yaml +++ b/apis/v1alpha1/generator.yaml @@ -55,6 +55,11 @@ resources: path: Events AuthToken: is_secret: true + LogDeliveryConfigurations: + is_read_only: true + from: + operation: CreateReplicationGroup + path: ReplicationGroup.LogDeliveryConfigurations hooks: sdk_read_many_post_set_output: code: "rm.updateSpecFields(ctx, resp.ReplicationGroups[0], &resource{ko})" @@ -62,6 +67,8 @@ resources: template_path: hooks/sdk_delete_pre_build_request.go.tpl sdk_delete_post_request: template_path: hooks/sdk_delete_post_request.go.tpl + sdk_update_post_build_request: + template_path: hooks/sdk_update_post_build_request.go.tpl Snapshot: update_conditions_custom_method_name: CustomUpdateConditions exceptions: @@ -203,3 +210,9 @@ ignore: - ModifyReplicationGroupInput.SecurityGroupIds - ModifyReplicationGroupInput.EngineVersion - CreateReplicationGroupInput.GlobalReplicationGroupId + - CreateSnapshotInput.Tags + - CreateCacheParameterGroupInput.Tags + - CreateCacheSubnetGroupInput.Tags + - CreateReplicationGroupInput.Tags + - CreateUserInput.Tags + - CreateUserGroupInput.Tags diff --git a/cmd/controller/main.go b/cmd/controller/main.go index 7c4b2e4a..9475c1d7 100644 --- a/cmd/controller/main.go +++ b/cmd/controller/main.go @@ -20,6 +20,8 @@ import ( ackcfg "github.com/aws-controllers-k8s/runtime/pkg/config" ackrt "github.com/aws-controllers-k8s/runtime/pkg/runtime" + ackrtutil "github.com/aws-controllers-k8s/runtime/pkg/util" + ackrtwebhook "github.com/aws-controllers-k8s/runtime/pkg/webhook" flag "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" @@ -47,6 +49,7 @@ var ( func init() { _ = clientgoscheme.AddToScheme(scheme) + _ = svctypes.AddToScheme(scheme) _ = ackv1alpha1.AddToScheme(scheme) } @@ -65,9 +68,19 @@ func main() { os.Exit(1) } + host, port, err := ackrtutil.GetHostPort(ackCfg.WebhookServerAddr) + if err != nil { + setupLog.Error( + err, "Unable to parse webhook server address.", + "aws.service", awsServiceAlias, + ) + os.Exit(1) + } + mgr, err := ctrlrt.NewManager(ctrlrt.GetConfigOrDie(), ctrlrt.Options{ Scheme: scheme, - Port: ackCfg.BindPort, + Port: port, + Host: host, MetricsBindAddress: ackCfg.MetricsAddr, LeaderElection: ackCfg.EnableLeaderElection, LeaderElectionID: awsServiceAPIGroup, @@ -97,6 +110,20 @@ func main() { ).WithPrometheusRegistry( ctrlrtmetrics.Registry, ) + + if ackCfg.EnableWebhookServer { + webhooks := ackrtwebhook.GetWebhooks() + for _, webhook := range webhooks { + if err := webhook.Setup(mgr); err != nil { + setupLog.Error( + err, "unable to register webhook "+webhook.UID(), + "aws.service", awsServiceAlias, + ) + + } + } + } + if err = sc.BindControllerManager(mgr, ackCfg); err != nil { setupLog.Error( err, "unable bind to controller manager to service controller", diff --git a/go.mod b/go.mod index 42f36159..50c37a76 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/aws-controllers-k8s/elasticache-controller go 1.14 require ( - github.com/aws-controllers-k8s/runtime v0.2.3 + github.com/aws-controllers-k8s/runtime v0.6.0 github.com/aws/aws-sdk-go v1.38.52 github.com/ghodss/yaml v1.0.0 github.com/go-logr/logr v0.1.0 diff --git a/go.sum b/go.sum index 0ae7933f..ad11ac3f 100644 --- a/go.sum +++ b/go.sum @@ -23,8 +23,8 @@ github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/aws-controllers-k8s/runtime v0.2.3 h1:pDDSXOJj5QLlC9OcgnGujeocQEg5U1oqQw3kUSDefLU= -github.com/aws-controllers-k8s/runtime v0.2.3/go.mod h1:xA2F18PJerBHaqrS4de1lpP7skeSMeStkmh+3x5sWvw= +github.com/aws-controllers-k8s/runtime v0.6.0 h1:Up9pn9FfItYiItiSdT+FOfHQNKO8oSb5GU8pKH9JF8E= +github.com/aws-controllers-k8s/runtime v0.6.0/go.mod h1:xA2F18PJerBHaqrS4de1lpP7skeSMeStkmh+3x5sWvw= github.com/aws/aws-sdk-go v1.37.4/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.38.52 h1:7NKcUyTG/CyDX835kq04DDNe8vXaJhbGW8ThemHb18A= github.com/aws/aws-sdk-go v1.38.52/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= diff --git a/pkg/resource/cache_parameter_group/manager.go b/pkg/resource/cache_parameter_group/manager.go index a2c47609..d24f7341 100644 --- a/pkg/resource/cache_parameter_group/manager.go +++ b/pkg/resource/cache_parameter_group/manager.go @@ -142,11 +142,12 @@ func (rm *resourceManager) Update( } // Delete attempts to destroy the supplied AWSResource in the backend AWS -// service API. +// service API, returning an AWSResource representing the +// resource being deleted (if delete is asynchronous and takes time) func (rm *resourceManager) Delete( ctx context.Context, res acktypes.AWSResource, -) error { +) (acktypes.AWSResource, error) { r := rm.concreteResource(res) if r.ko == nil { // Should never happen... if it does, it's buggy code. diff --git a/pkg/resource/cache_parameter_group/resource.go b/pkg/resource/cache_parameter_group/resource.go index f86d6aea..9f3665e6 100644 --- a/pkg/resource/cache_parameter_group/resource.go +++ b/pkg/resource/cache_parameter_group/resource.go @@ -87,9 +87,10 @@ func (r *resource) SetObjectMeta(meta metav1.ObjectMeta) { // SetIdentifiers sets the Spec or Status field that is referenced as the unique // resource identifier func (r *resource) SetIdentifiers(identifier *ackv1alpha1.AWSIdentifiers) error { - if identifier.NameOrID == nil { + if identifier.NameOrID == "" { return ackerrors.MissingNameIdentifier } - r.ko.Spec.CacheParameterGroupName = identifier.NameOrID + r.ko.Spec.CacheParameterGroupName = &identifier.NameOrID + return nil } diff --git a/pkg/resource/cache_parameter_group/sdk.go b/pkg/resource/cache_parameter_group/sdk.go index 0c233829..d56a71fe 100644 --- a/pkg/resource/cache_parameter_group/sdk.go +++ b/pkg/resource/cache_parameter_group/sdk.go @@ -211,17 +211,19 @@ func (rm *resourceManager) sdkUpdate( func (rm *resourceManager) sdkDelete( ctx context.Context, r *resource, -) (err error) { +) (latest *resource, err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.sdkDelete") defer exit(err) input, err := rm.newDeleteRequestPayload(r) if err != nil { - return err + return nil, err } - _, err = rm.sdkapi.DeleteCacheParameterGroupWithContext(ctx, input) + var resp *svcsdk.DeleteCacheParameterGroupOutput + _ = resp + resp, err = rm.sdkapi.DeleteCacheParameterGroupWithContext(ctx, input) rm.metrics.RecordAPICall("DELETE", "DeleteCacheParameterGroup", err) - return err + return nil, err } // newDeleteRequestPayload returns an SDK-specific struct for the HTTP request diff --git a/pkg/resource/cache_subnet_group/manager.go b/pkg/resource/cache_subnet_group/manager.go index 762788cd..58a9174a 100644 --- a/pkg/resource/cache_subnet_group/manager.go +++ b/pkg/resource/cache_subnet_group/manager.go @@ -142,11 +142,12 @@ func (rm *resourceManager) Update( } // Delete attempts to destroy the supplied AWSResource in the backend AWS -// service API. +// service API, returning an AWSResource representing the +// resource being deleted (if delete is asynchronous and takes time) func (rm *resourceManager) Delete( ctx context.Context, res acktypes.AWSResource, -) error { +) (acktypes.AWSResource, error) { r := rm.concreteResource(res) if r.ko == nil { // Should never happen... if it does, it's buggy code. diff --git a/pkg/resource/cache_subnet_group/resource.go b/pkg/resource/cache_subnet_group/resource.go index 2a3d6b18..2f0b225c 100644 --- a/pkg/resource/cache_subnet_group/resource.go +++ b/pkg/resource/cache_subnet_group/resource.go @@ -87,9 +87,10 @@ func (r *resource) SetObjectMeta(meta metav1.ObjectMeta) { // SetIdentifiers sets the Spec or Status field that is referenced as the unique // resource identifier func (r *resource) SetIdentifiers(identifier *ackv1alpha1.AWSIdentifiers) error { - if identifier.NameOrID == nil { + if identifier.NameOrID == "" { return ackerrors.MissingNameIdentifier } - r.ko.Spec.CacheSubnetGroupName = identifier.NameOrID + r.ko.Spec.CacheSubnetGroupName = &identifier.NameOrID + return nil } diff --git a/pkg/resource/cache_subnet_group/sdk.go b/pkg/resource/cache_subnet_group/sdk.go index cd231d07..0b388f90 100644 --- a/pkg/resource/cache_subnet_group/sdk.go +++ b/pkg/resource/cache_subnet_group/sdk.go @@ -348,17 +348,19 @@ func (rm *resourceManager) newUpdateRequestPayload( func (rm *resourceManager) sdkDelete( ctx context.Context, r *resource, -) (err error) { +) (latest *resource, err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.sdkDelete") defer exit(err) input, err := rm.newDeleteRequestPayload(r) if err != nil { - return err + return nil, err } - _, err = rm.sdkapi.DeleteCacheSubnetGroupWithContext(ctx, input) + var resp *svcsdk.DeleteCacheSubnetGroupOutput + _ = resp + resp, err = rm.sdkapi.DeleteCacheSubnetGroupWithContext(ctx, input) rm.metrics.RecordAPICall("DELETE", "DeleteCacheSubnetGroup", err) - return err + return nil, err } // newDeleteRequestPayload returns an SDK-specific struct for the HTTP request diff --git a/pkg/resource/replication_group/manager.go b/pkg/resource/replication_group/manager.go index 02ea0581..0fd8c3b3 100644 --- a/pkg/resource/replication_group/manager.go +++ b/pkg/resource/replication_group/manager.go @@ -142,11 +142,12 @@ func (rm *resourceManager) Update( } // Delete attempts to destroy the supplied AWSResource in the backend AWS -// service API. +// service API, returning an AWSResource representing the +// resource being deleted (if delete is asynchronous and takes time) func (rm *resourceManager) Delete( ctx context.Context, res acktypes.AWSResource, -) error { +) (acktypes.AWSResource, error) { r := rm.concreteResource(res) if r.ko == nil { // Should never happen... if it does, it's buggy code. diff --git a/pkg/resource/replication_group/resource.go b/pkg/resource/replication_group/resource.go index de230ff7..43de85ec 100644 --- a/pkg/resource/replication_group/resource.go +++ b/pkg/resource/replication_group/resource.go @@ -87,9 +87,10 @@ func (r *resource) SetObjectMeta(meta metav1.ObjectMeta) { // SetIdentifiers sets the Spec or Status field that is referenced as the unique // resource identifier func (r *resource) SetIdentifiers(identifier *ackv1alpha1.AWSIdentifiers) error { - if identifier.NameOrID == nil { + if identifier.NameOrID == "" { return ackerrors.MissingNameIdentifier } - r.ko.Spec.ReplicationGroupID = identifier.NameOrID + r.ko.Spec.ReplicationGroupID = &identifier.NameOrID + return nil } diff --git a/pkg/resource/replication_group/sdk.go b/pkg/resource/replication_group/sdk.go index f9e0627b..8e643bff 100644 --- a/pkg/resource/replication_group/sdk.go +++ b/pkg/resource/replication_group/sdk.go @@ -1381,29 +1381,29 @@ func (rm *resourceManager) newUpdateRequestPayload( func (rm *resourceManager) sdkDelete( ctx context.Context, r *resource, -) (err error) { +) (latest *resource, err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.sdkDelete") defer exit(err) + // if resource is already deleting, return requeue error; otherwise, initiate deletion if isDeleting(r) { - return requeueWaitWhileDeleting + return r, requeueWaitWhileDeleting } input, err := rm.newDeleteRequestPayload(r) if err != nil { - return err + return nil, err } - _, err = rm.sdkapi.DeleteReplicationGroupWithContext(ctx, input) + var resp *svcsdk.DeleteReplicationGroupOutput + _ = resp + resp, err = rm.sdkapi.DeleteReplicationGroupWithContext(ctx, input) rm.metrics.RecordAPICall("DELETE", "DeleteReplicationGroup", err) + // delete call successful if err == nil { - if foundResource, err := rm.sdkFind(ctx, r); err != ackerr.NotFound { - if isDeleting(foundResource) { - return requeueWaitWhileDeleting - } - return err - } + rp, _ := rm.provideUpdatedResource(r, resp.ReplicationGroup) + return rp, requeueWaitWhileDeleting } - return err + return nil, err } // newDeleteRequestPayload returns an SDK-specific struct for the HTTP request diff --git a/pkg/resource/replication_group/testdata/test_suite.yaml b/pkg/resource/replication_group/testdata/test_suite.yaml index 83ebb31e..a544b9a7 100644 --- a/pkg/resource/replication_group/testdata/test_suite.yaml +++ b/pkg/resource/replication_group/testdata/test_suite.yaml @@ -122,9 +122,8 @@ tests: code: ReplicationGroupNotFoundFault message: "ReplicationGroup rg-cmd not found" invoke: Delete - expect: # for the delete case we don't expect a new latest state or a non-nil error - latest_state: nil - error: nil + expect: + error: "Delete is in progress." - name: "DeleteInitiated" description: "Delete cluster mode-disabled RG. RG moves from available to deleting state." given: @@ -134,13 +133,8 @@ tests: output_fixture: "replication_group/delete/rg_cmd_delete_initiated.json" - operation: DescribeReplicationGroupsWithContext output_fixture: "replication_group/read_one/rg_cmd_delete_initiated.json" - - operation: ListAllowedNodeTypeModifications - output_fixture: "allowed_node_types/read_many/rg_cmd_allowed_node_types.json" - - operation: DescribeEventsWithContext - output_fixture: "events/read_many/rg_cmd_events.json" invoke: Delete - expect: # for the delete case we don't expect a new latest state or a non-nil error - latest_state: nil + expect: error: "Delete is in progress." - name: "Deleting" description: "Delete cluster mode-disabled RG. Retry scenario, RG is in deleting state." @@ -148,8 +142,7 @@ tests: desired_state: "replication_group/cr/rg_cmd_delete_initiated.yaml" svc_api: invoke: Delete - expect: # for the delete case we don't expect a new latest state or a non-nil error - latest_state: nil + expect: error: "Delete is in progress." - name: Cluster mode enabled replication group description: Cluster mode enabled replication group CRUD tests diff --git a/pkg/resource/snapshot/manager.go b/pkg/resource/snapshot/manager.go index afbec6f7..00793ad5 100644 --- a/pkg/resource/snapshot/manager.go +++ b/pkg/resource/snapshot/manager.go @@ -142,11 +142,12 @@ func (rm *resourceManager) Update( } // Delete attempts to destroy the supplied AWSResource in the backend AWS -// service API. +// service API, returning an AWSResource representing the +// resource being deleted (if delete is asynchronous and takes time) func (rm *resourceManager) Delete( ctx context.Context, res acktypes.AWSResource, -) error { +) (acktypes.AWSResource, error) { r := rm.concreteResource(res) if r.ko == nil { // Should never happen... if it does, it's buggy code. diff --git a/pkg/resource/snapshot/resource.go b/pkg/resource/snapshot/resource.go index 921e3665..b5dbda93 100644 --- a/pkg/resource/snapshot/resource.go +++ b/pkg/resource/snapshot/resource.go @@ -87,9 +87,10 @@ func (r *resource) SetObjectMeta(meta metav1.ObjectMeta) { // SetIdentifiers sets the Spec or Status field that is referenced as the unique // resource identifier func (r *resource) SetIdentifiers(identifier *ackv1alpha1.AWSIdentifiers) error { - if identifier.NameOrID == nil { + if identifier.NameOrID == "" { return ackerrors.MissingNameIdentifier } - r.ko.Spec.SnapshotName = identifier.NameOrID + r.ko.Spec.SnapshotName = &identifier.NameOrID + return nil } diff --git a/pkg/resource/snapshot/sdk.go b/pkg/resource/snapshot/sdk.go index 72713037..73937da0 100644 --- a/pkg/resource/snapshot/sdk.go +++ b/pkg/resource/snapshot/sdk.go @@ -553,17 +553,19 @@ func (rm *resourceManager) sdkUpdate( func (rm *resourceManager) sdkDelete( ctx context.Context, r *resource, -) (err error) { +) (latest *resource, err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.sdkDelete") defer exit(err) input, err := rm.newDeleteRequestPayload(r) if err != nil { - return err + return nil, err } - _, err = rm.sdkapi.DeleteSnapshotWithContext(ctx, input) + var resp *svcsdk.DeleteSnapshotOutput + _ = resp + resp, err = rm.sdkapi.DeleteSnapshotWithContext(ctx, input) rm.metrics.RecordAPICall("DELETE", "DeleteSnapshot", err) - return err + return nil, err } // newDeleteRequestPayload returns an SDK-specific struct for the HTTP request diff --git a/pkg/resource/user/manager.go b/pkg/resource/user/manager.go index b79038dd..7ac662ba 100644 --- a/pkg/resource/user/manager.go +++ b/pkg/resource/user/manager.go @@ -142,11 +142,12 @@ func (rm *resourceManager) Update( } // Delete attempts to destroy the supplied AWSResource in the backend AWS -// service API. +// service API, returning an AWSResource representing the +// resource being deleted (if delete is asynchronous and takes time) func (rm *resourceManager) Delete( ctx context.Context, res acktypes.AWSResource, -) error { +) (acktypes.AWSResource, error) { r := rm.concreteResource(res) if r.ko == nil { // Should never happen... if it does, it's buggy code. diff --git a/pkg/resource/user/resource.go b/pkg/resource/user/resource.go index ea31434f..c004e0e4 100644 --- a/pkg/resource/user/resource.go +++ b/pkg/resource/user/resource.go @@ -87,9 +87,10 @@ func (r *resource) SetObjectMeta(meta metav1.ObjectMeta) { // SetIdentifiers sets the Spec or Status field that is referenced as the unique // resource identifier func (r *resource) SetIdentifiers(identifier *ackv1alpha1.AWSIdentifiers) error { - if identifier.NameOrID == nil { + if identifier.NameOrID == "" { return ackerrors.MissingNameIdentifier } - r.ko.Spec.UserID = identifier.NameOrID + r.ko.Spec.UserID = &identifier.NameOrID + return nil } diff --git a/pkg/resource/user/sdk.go b/pkg/resource/user/sdk.go index c7894d07..afe5a64f 100644 --- a/pkg/resource/user/sdk.go +++ b/pkg/resource/user/sdk.go @@ -364,17 +364,19 @@ func (rm *resourceManager) newUpdateRequestPayload( func (rm *resourceManager) sdkDelete( ctx context.Context, r *resource, -) (err error) { +) (latest *resource, err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.sdkDelete") defer exit(err) input, err := rm.newDeleteRequestPayload(r) if err != nil { - return err + return nil, err } - _, err = rm.sdkapi.DeleteUserWithContext(ctx, input) + var resp *svcsdk.DeleteUserOutput + _ = resp + resp, err = rm.sdkapi.DeleteUserWithContext(ctx, input) rm.metrics.RecordAPICall("DELETE", "DeleteUser", err) - return err + return nil, err } // newDeleteRequestPayload returns an SDK-specific struct for the HTTP request diff --git a/pkg/resource/user_group/manager.go b/pkg/resource/user_group/manager.go index bd9a8b66..53bcaec9 100644 --- a/pkg/resource/user_group/manager.go +++ b/pkg/resource/user_group/manager.go @@ -142,11 +142,12 @@ func (rm *resourceManager) Update( } // Delete attempts to destroy the supplied AWSResource in the backend AWS -// service API. +// service API, returning an AWSResource representing the +// resource being deleted (if delete is asynchronous and takes time) func (rm *resourceManager) Delete( ctx context.Context, res acktypes.AWSResource, -) error { +) (acktypes.AWSResource, error) { r := rm.concreteResource(res) if r.ko == nil { // Should never happen... if it does, it's buggy code. diff --git a/pkg/resource/user_group/resource.go b/pkg/resource/user_group/resource.go index 64cdb027..75870a6d 100644 --- a/pkg/resource/user_group/resource.go +++ b/pkg/resource/user_group/resource.go @@ -87,9 +87,10 @@ func (r *resource) SetObjectMeta(meta metav1.ObjectMeta) { // SetIdentifiers sets the Spec or Status field that is referenced as the unique // resource identifier func (r *resource) SetIdentifiers(identifier *ackv1alpha1.AWSIdentifiers) error { - if identifier.NameOrID == nil { + if identifier.NameOrID == "" { return ackerrors.MissingNameIdentifier } - r.ko.Spec.UserGroupID = identifier.NameOrID + r.ko.Spec.UserGroupID = &identifier.NameOrID + return nil } diff --git a/pkg/resource/user_group/sdk.go b/pkg/resource/user_group/sdk.go index e26040b5..1d0e13f7 100644 --- a/pkg/resource/user_group/sdk.go +++ b/pkg/resource/user_group/sdk.go @@ -293,17 +293,19 @@ func (rm *resourceManager) sdkUpdate( func (rm *resourceManager) sdkDelete( ctx context.Context, r *resource, -) (err error) { +) (latest *resource, err error) { rlog := ackrtlog.FromContext(ctx) exit := rlog.Trace("rm.sdkDelete") defer exit(err) input, err := rm.newDeleteRequestPayload(r) if err != nil { - return err + return nil, err } - _, err = rm.sdkapi.DeleteUserGroupWithContext(ctx, input) + var resp *svcsdk.DeleteUserGroupOutput + _ = resp + resp, err = rm.sdkapi.DeleteUserGroupWithContext(ctx, input) rm.metrics.RecordAPICall("DELETE", "DeleteUserGroup", err) - return err + return nil, err } // newDeleteRequestPayload returns an SDK-specific struct for the HTTP request diff --git a/pkg/testutil/test_suite_runner.go b/pkg/testutil/test_suite_runner.go index 3308f31d..9b1c95fc 100644 --- a/pkg/testutil/test_suite_runner.go +++ b/pkg/testutil/test_suite_runner.go @@ -92,7 +92,7 @@ func (runner *TestSuiteRunner) runTestScenario(scenarioName string, fixtureCxt * delta := runner.Delegate.ResourceDescriptor().Delta(fixtureCxt.desired, fixtureCxt.latest) actual, err = rm.Update(context.Background(), fixtureCxt.desired, fixtureCxt.latest, delta) case "Delete": - err = rm.Delete(context.Background(), fixtureCxt.desired) + actual, err = rm.Delete(context.Background(), fixtureCxt.desired) default: panic(errors.New(fmt.Sprintf("unit under test: %s not supported", unitUnderTest))) } diff --git a/templates/hooks/sdk_delete_post_request.go.tpl b/templates/hooks/sdk_delete_post_request.go.tpl index 5573b330..c1b9131b 100644 --- a/templates/hooks/sdk_delete_post_request.go.tpl +++ b/templates/hooks/sdk_delete_post_request.go.tpl @@ -1,8 +1,5 @@ + // delete call successful if err == nil { - if foundResource, err := rm.sdkFind(ctx, r); err != ackerr.NotFound { - if isDeleting(foundResource) { - return requeueWaitWhileDeleting - } - return err - } - } \ No newline at end of file + rp, _ := rm.provideUpdatedResource(r, resp.ReplicationGroup) + return rp, requeueWaitWhileDeleting + } \ No newline at end of file diff --git a/templates/hooks/sdk_delete_pre_build_request.go.tpl b/templates/hooks/sdk_delete_pre_build_request.go.tpl index 98047139..a67a90d5 100644 --- a/templates/hooks/sdk_delete_pre_build_request.go.tpl +++ b/templates/hooks/sdk_delete_pre_build_request.go.tpl @@ -1,4 +1,4 @@ + // if resource is already deleting, return requeue error; otherwise, initiate deletion if isDeleting(r) { - return requeueWaitWhileDeleting + return r, requeueWaitWhileDeleting } -