This repository has been archived by the owner on Jan 14, 2020. It is now read-only.
/
delete.go
65 lines (54 loc) · 1.59 KB
/
delete.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package tasks
import (
"fmt"
printer "github.com/KablamoOSS/go-cli-printer"
"os"
"time"
"github.com/KablamoOSS/kombustion/internal/cloudformation"
"github.com/aws/aws-sdk-go/aws"
awsCF "github.com/aws/aws-sdk-go/service/cloudformation"
)
// DeleteStack removes a cloudformation stack
func DeleteStack(client cloudformation.StackDeleter, stackName, region string) {
printer.Step(fmt.Sprintf("Delete Stack %s:", stackName))
//See if the stack exists to begin with
_, err := client.DescribeStacks(&awsCF.DescribeStacksInput{StackName: aws.String(stackName)})
checkError(err)
_, err = client.DeleteStack(&awsCF.DeleteStackInput{StackName: aws.String(stackName)})
checkError(err)
// status polling
PrintStackEventHeader()
for {
printer.Progress("Deleting")
time.Sleep(2 * time.Second)
status, err := client.DescribeStacks(&awsCF.DescribeStacksInput{StackName: aws.String(stackName)})
checkErrorDeletePoll(err)
events, err := client.DescribeStackEvents(
&awsCF.DescribeStackEventsInput{StackName: aws.String(stackName)},
)
checkError(err)
if len(status.Stacks) > 0 {
stackStatus := *status.Stacks[0].StackStatus
if len(events.StackEvents) > 0 {
PrintStackEvent(events.StackEvents[0], false)
}
if stackStatus == awsCF.StackStatusDeleteInProgress {
continue
}
}
break
}
// Make sure delete worked
_, err = client.DescribeStacks(&awsCF.DescribeStacksInput{StackName: aws.String(stackName)})
if err != nil {
checkErrorDeletePoll(err)
} else {
printer.SubStep(
fmt.Sprintf("Success Delete Stack %s", stackName),
1,
true,
true,
)
os.Exit(0)
}
}