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 }