ec2.go - boof - AWS EC2 instance tag searching in golang, no longer used.
(HTM) git clone git://jay.scot/boof
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
---
ec2.go (1766B)
---
1 package cmd
2
3 import (
4 "fmt"
5 "log"
6 "net/url"
7
8 "github.com/aws/aws-sdk-go/aws"
9 "github.com/aws/aws-sdk-go/aws/session"
10 "github.com/aws/aws-sdk-go/service/ec2"
11 "github.com/jedib0t/go-pretty/table"
12 "github.com/spf13/cobra"
13 )
14
15 var ec2Cmd = &cobra.Command{
16 Use: "ec2",
17 Short: "Search EC2 based on a given tag.",
18 Long: `Returns a list of matching EC2 instances based on the entered value and tag.`,
19 Args: cobra.ExactArgs(1),
20 Run: func(cmd *cobra.Command, args []string) {
21 tag, _ := cmd.Flags().GetString("tag")
22 searchEC2(tag, args[0])
23 },
24 }
25
26 func init() {
27 rootCmd.AddCommand(ec2Cmd)
28 ec2Cmd.Flags().String("tag", "Name", "The tag name to search")
29 ec2Cmd.SetArgs([]string{"value"})
30 }
31
32 func searchEC2(tag string, value string) {
33
34 sess, err := session.NewSession(&aws.Config{
35 Region: aws.String("eu-west-1")},
36 )
37
38 if err != nil {
39 fmt.Println("failed to create session,", err)
40 return
41 }
42
43 svc := ec2.New(sess)
44 params := &ec2.DescribeInstancesInput{
45 Filters: []*ec2.Filter{
46 {
47 Name: aws.String("tag:" + tag),
48 Values: []*string{aws.String("*" + value + "*")},
49 },
50 },
51 }
52 resp, err := svc.DescribeInstances(params)
53 if err != nil {
54 fmt.Println("there was an error listing instances in", err.Error())
55 log.Fatal(err.Error())
56 }
57
58 for idx := range resp.Reservations {
59 for _, inst := range resp.Reservations[idx].Instances {
60 tw := table.NewWriter()
61 tw.AppendHeader(table.Row{"Name", "Instance ID", "Private IP", "Public IP"})
62 name := "None"
63 for _, keys := range inst.Tags {
64 if *keys.Key == "Name" {
65 name = url.QueryEscape(*keys.Value)
66 }
67 }
68
69 tw.AppendRows([]table.Row{
70 {name, *inst.InstanceId, *inst.PrivateIpAddress, *inst.PublicIpAddress},
71 })
72
73 fmt.Printf("\n%s\n", tw.Render())
74 }
75 }
76 }