Skip to content

Commit 1d7f0e6

Browse files
Fix ResourceInUseException when deleting cluster (#25)
Issue #, if available: aws-controllers-k8s/community#1191 Description of changes: Adds a hook that checks to see all nodegroups have been deleted from the cluster before it attempts to delete the cluster itself By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent c583ea8 commit 1d7f0e6

File tree

8 files changed

+61
-7
lines changed

8 files changed

+61
-7
lines changed

apis/v1alpha1/ack-generate-metadata.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
ack_generate_info:
2-
build_date: "2022-02-28T18:05:07Z"
3-
build_hash: 4724c496a77a35bd6d1d1a2cc415d342457a7463
4-
go_version: go1.17.5
2+
build_date: "2022-03-01T19:48:47Z"
3+
build_hash: 7dff1f4590e623d17e58660b7dd1c66e22b5215a
4+
go_version: go1.17.1
55
version: v0.17.1
66
api_directory_checksum: 50ce02741686341685d2a897fdcdd80c80e260d9
77
api_version: v1alpha1

pkg/resource/addon/references.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resource/cluster/hook.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package cluster
1515

1616
import (
1717
"context"
18+
"errors"
1819
"fmt"
1920
"time"
2021

@@ -56,6 +57,10 @@ var (
5657
fmt.Errorf("cluster in '%s' state, cannot be modified or deleted", StatusDeleting),
5758
ackrequeue.DefaultRequeueAfterDuration,
5859
)
60+
requeueWaitWhileInUse = ackrequeue.NeededAfter(
61+
errors.New("cluster is still in use, cannot be deleted"),
62+
ackrequeue.DefaultRequeueAfterDuration,
63+
)
5964
RequeueAfterUpdateDuration = 15 * time.Second
6065
)
6166

@@ -138,6 +143,19 @@ func returnClusterUpdating(r *resource) (*resource, error) {
138143
return r, requeueAfterAsyncUpdate()
139144
}
140145

146+
// clusterInUse returns true if the supplied cluster is still being used. It
147+
// determines this by checking if there are any nodegroups still attached to
148+
// the cluster.
149+
func (rm *resourceManager) clusterInUse(ctx context.Context, r *resource) (bool, error) {
150+
nodes, err := rm.listNodegroups(ctx, r)
151+
if err != nil {
152+
return false, err
153+
}
154+
155+
// Cluster is in use if # of nodegroups != 0
156+
return (nodes != nil && len(nodes.Nodegroups) > 0), nil
157+
}
158+
141159
func (rm *resourceManager) customUpdate(
142160
ctx context.Context,
143161
desired *resource,
@@ -267,3 +285,23 @@ func (rm *resourceManager) updateConfigResourcesVPCConfig(
267285

268286
return nil
269287
}
288+
289+
func (rm *resourceManager) listNodegroups(
290+
ctx context.Context,
291+
r *resource,
292+
) (nodes *svcsdk.ListNodegroupsOutput, err error) {
293+
rlog := ackrtlog.FromContext(ctx)
294+
exit := rlog.Trace("rm.listNodegroups")
295+
defer exit(err)
296+
input := &svcsdk.ListNodegroupsInput{
297+
ClusterName: r.ko.Spec.Name,
298+
}
299+
300+
nodes, err = rm.sdkapi.ListNodegroupsWithContext(ctx, input)
301+
rm.metrics.RecordAPICall("READ_MANY", "ListNodegroups", err)
302+
if err != nil {
303+
return nil, err
304+
}
305+
306+
return nodes, nil
307+
}

pkg/resource/cluster/references.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resource/cluster/sdk.go

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

pkg/resource/fargate_profile/references.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/resource/nodegroup/references.go

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
if clusterDeleting(r) {
22
return r, requeueWaitWhileDeleting
33
}
4+
inUse, err := rm.clusterInUse(ctx, r);
5+
if err != nil {
6+
return nil, err
7+
} else if inUse {
8+
return r, requeueWaitWhileInUse
9+
}

0 commit comments

Comments
 (0)