@@ -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.
552561func (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