Skip to content

Commit 4bacc6a

Browse files
committed
Add support for stack Deletion using cloudFormation sdk
Signed-off-by: Drumil Patel <[email protected]>
1 parent 198a82b commit 4bacc6a

File tree

1 file changed

+53
-5
lines changed

1 file changed

+53
-5
lines changed

pkg/provider/eks/eks.go

Lines changed: 53 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,33 @@ func (c *EKS) StackCreate(*kingpin.ParseContext) error {
250250
return nil
251251
}
252252

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+
253280
// stackCreated checks whether stack has been created.
254281
func (c *EKS) stackCreated(name string) (bool, error) {
255282
req := &cloudFormation.DescribeStacksInput{
@@ -269,6 +296,25 @@ func (c *EKS) stackCreated(name string) (bool, error) {
269296
return false, nil
270297
}
271298

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+
272318
func (c *EKS) showSubnetIds(name string) ([]string, error) {
273319
req := &cloudFormation.DescribeStacksInput{
274320
StackName: aws.String(name),
@@ -279,11 +325,13 @@ func (c *EKS) showSubnetIds(name string) ([]string, error) {
279325
return []string{}, err
280326
}
281327

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+
}
287335
}
288336
}
289337
}

0 commit comments

Comments
 (0)