@@ -250,6 +250,33 @@ func (c *EKS) StackCreate(*kingpin.ParseContext) error {
250
250
return nil
251
251
}
252
252
253
+ // StackDelete deletes vpc stack.
254
+ func (c * EKS ) StackDelete (* kingpin.ParseContext ) error {
255
+ stackName := fmt .Sprintf ("%s-vpc" , c .DeploymentVars ["CLUSTER_NAME" ])
256
+ req := & cloudFormation.DeleteStackInput {
257
+ StackName : aws .String (stackName ),
258
+ }
259
+
260
+ log .Printf ("Delete stack request: name: '%s'" , * req .StackName )
261
+
262
+ _ , err := c .clientCF .DeleteStack (req )
263
+ if err != nil {
264
+ log .Fatalf ("Couldn't delete stack '%s' ,err: %s" , * req .StackName , err )
265
+ }
266
+
267
+ err = provider .RetryUntilTrue (
268
+ fmt .Sprintf ("deleting stack: %s" , * req .StackName ),
269
+ provider .GlobalRetryCount ,
270
+ func () (bool , error ) { return c .stackDeleted (* req .StackName ) },
271
+ )
272
+
273
+ if err != nil {
274
+ log .Fatalf ("deleting stack err:%v" , err )
275
+ }
276
+
277
+ return nil
278
+ }
279
+
253
280
// stackCreated checks whether stack has been created.
254
281
func (c * EKS ) stackCreated (name string ) (bool , error ) {
255
282
req := & cloudFormation.DescribeStacksInput {
@@ -269,6 +296,25 @@ func (c *EKS) stackCreated(name string) (bool, error) {
269
296
return false , nil
270
297
}
271
298
299
+ // stackDeleted checks whether stack has been deleted.
300
+ func (c * EKS ) stackDeleted (name string ) (bool , error ) {
301
+ req := & cloudFormation.DescribeStacksInput {
302
+ StackName : aws .String (name ),
303
+ }
304
+ stackRes , err := c .clientCF .DescribeStacks (req )
305
+ if err != nil {
306
+ return false , fmt .Errorf ("Couldn't get stack status: %v" , err )
307
+ }
308
+ if * stackRes .Stacks [0 ].StackStatus == cloudFormation .StackStatusDeleteFailed {
309
+ return false , fmt .Errorf ("Stack delete failed - %s" , * stackRes .Stacks [0 ].StackStatus )
310
+ }
311
+ if len (stackRes .Stacks ) == 0 {
312
+ return true , nil
313
+ }
314
+ log .Printf ("Stack '%s' status: %s" , name , * stackRes .Stacks [0 ].StackStatus )
315
+ return false , nil
316
+ }
317
+
272
318
func (c * EKS ) showSubnetIds (name string ) ([]string , error ) {
273
319
req := & cloudFormation.DescribeStacksInput {
274
320
StackName : aws .String (name ),
@@ -279,11 +325,13 @@ func (c *EKS) showSubnetIds(name string) ([]string, error) {
279
325
return []string {}, err
280
326
}
281
327
282
- if * stackRes .Stacks [0 ].StackStatus == cloudFormation .StackStatusCreateComplete {
283
- stackOutputs := stackRes .Stacks [0 ].Outputs
284
- for _ , output := range stackOutputs {
285
- if * output .OutputKey == "SubnetIds" {
286
- return strings .Split (* output .OutputValue , "," ), nil
328
+ for _ , stack := range stackRes .Stacks {
329
+ if * stack .StackStatus == cloudFormation .StackStatusCreateComplete {
330
+ stackOutputs := stack .Outputs
331
+ for _ , output := range stackOutputs {
332
+ if * output .OutputKey == "SubnetIds" {
333
+ return strings .Split (* output .OutputValue , "," ), nil
334
+ }
287
335
}
288
336
}
289
337
}
0 commit comments