-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli.go
81 lines (75 loc) · 1.84 KB
/
cli.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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package main
import (
"log"
"os"
"time"
"github.com/burukuru/packer-ec2-cleanup/pec"
"github.com/urfave/cli/v2"
)
func main() {
ec2client := pec.CreateClient()
cliFlags := []cli.Flag{
&cli.StringFlag{
Name: "tag",
Value: "Name=Packer Builder",
Usage: "Filter tag of EC2 instances to terminate in format: `TagName=TagValue`",
},
&cli.StringFlag{
Name: "olderthan",
Value: "60m",
Usage: "Minimum age of instance that will be terminated, in minutes",
},
}
app := &cli.App{
Name: "packer-ec2-cleanup",
Usage: "Clean up stray EC2 instances, eg. Packer builds.",
Commands: []*cli.Command{
{
Name: "describe-instances",
Aliases: []string{"di"},
Usage: "List EC2 instances in selected region",
Flags: cliFlags,
Action: func(c *cli.Context) error {
m, err := time.ParseDuration(c.String("olderthan"))
if err != nil {
log.Fatal(err)
}
_, err = pec.DescribeInstances(ec2client, c.String("tag"), m)
if err != nil {
log.Fatal(err)
}
return err
},
},
{
Name: "terminate-instances",
Aliases: []string{"ti"},
Usage: "Terminate EC2 instances",
Flags: cliFlags,
Action: func(c *cli.Context) error {
m, err := time.ParseDuration(c.String("olderthan"))
if err != nil {
log.Fatal(err)
}
instanceData, err := pec.DescribeInstances(ec2client, c.String("tag"), m)
if err != nil {
log.Fatal(err)
}
if len(instanceData[0]) > 0 {
pec.Terminateinstances(ec2client, instanceData[0])
if len(instanceData[1]) > 0 {
pec.DeleteKeyPair(ec2client, instanceData[1])
}
} else {
log.Print("No running instances with specified tag \"", c.String("tag"), "\" to terminate.")
}
return err
},
},
},
}
err := app.Run(os.Args)
if err != nil {
log.Fatal(err)
}
}