Skip to content

Commit cbc2bde

Browse files
authored
eks/cluster: do not delete other resources on cluster delete failures (#186)
Signed-off-by: Gyuho Lee <leegyuho@amazon.com>
1 parent f904a31 commit cbc2bde

File tree

1 file changed

+27
-10
lines changed

1 file changed

+27
-10
lines changed

eks/cluster/cluster.go

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import (
3131
"github.com/aws/aws-k8s-tester/pkg/user"
3232
"github.com/aws/aws-k8s-tester/version"
3333
"github.com/aws/aws-sdk-go/aws"
34+
"github.com/aws/aws-sdk-go/aws/awserr"
3435
"github.com/aws/aws-sdk-go/service/cloudformation"
3536
"github.com/aws/aws-sdk-go/service/cloudformation/cloudformationiface"
3637
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
@@ -192,15 +193,21 @@ func (ts *tester) Delete() error {
192193

193194
if err := ts.deleteEKS(); err != nil {
194195
errs = append(errs, err.Error())
195-
}
196-
if err := ts.deleteEncryption(); err != nil {
197-
errs = append(errs, err.Error())
198-
}
199-
if err := ts.deleteClusterRole(); err != nil {
200-
errs = append(errs, err.Error())
201-
}
202-
if err := ts.deleteVPC(); err != nil {
203-
errs = append(errs, err.Error())
196+
ts.cfg.Logger.Warn("EKS cluster delete failed -- please try delete again to clean up other resources!!!", zap.Error(err))
197+
} else {
198+
// only proceed when the cluster delete succeeded
199+
// otherwise, it's not safe to delete non-EKS resources
200+
// (e.g. delete CMK can fail other dependent components
201+
// under the same account)
202+
if err := ts.deleteEncryption(); err != nil {
203+
errs = append(errs, err.Error())
204+
}
205+
if err := ts.deleteClusterRole(); err != nil {
206+
errs = append(errs, err.Error())
207+
}
208+
if err := ts.deleteVPC(); err != nil {
209+
errs = append(errs, err.Error())
210+
}
204211
}
205212

206213
if len(errs) > 0 {
@@ -226,7 +233,7 @@ Parameters:
226233
227234
Version:
228235
Type: String
229-
Default: 1.16
236+
Default: 1.18
230237
Description: Specify the EKS version
231238
232239
RoleARN:
@@ -549,6 +556,8 @@ func (ts *tester) createEKS() (err error) {
549556
return ts.cfg.EKSConfig.Sync()
550557
}
551558

559+
// deleteEKS returns error if EKS cluster delete fails.
560+
// It returns nil if the cluster has already been deleted.
552561
func (ts *tester) deleteEKS() error {
553562
fmt.Printf(ts.cfg.EKSConfig.Colorize("\n\n\n[yellow]*********************************\n"))
554563
fmt.Printf(ts.cfg.EKSConfig.Colorize("[light_blue]deleteEKS [default](%q)\n"), ts.cfg.EKSConfig.ConfigPath)
@@ -611,6 +620,14 @@ func (ts *tester) deleteEKS() error {
611620
Name: aws.String(ts.cfg.EKSConfig.Name),
612621
})
613622
if err != nil {
623+
awsErr, ok := err.(awserr.Error)
624+
if ok && awsErr.Code() == "ResourceNotFoundException" &&
625+
strings.HasPrefix(awsErr.Message(), "No cluster found for") {
626+
ts.cfg.EKSConfig.RecordStatus(eksconfig.ClusterStatusDELETEDORNOTEXIST)
627+
ts.cfg.Logger.Warn("cluster is already deleted", zap.Error(err))
628+
return nil
629+
}
630+
614631
ts.cfg.EKSConfig.RecordStatus(fmt.Sprintf("failed to delete cluster (%v)", err))
615632
ts.cfg.Logger.Warn("failed to delete cluster", zap.Error(err))
616633
return err

0 commit comments

Comments
 (0)