-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathec2.go
91 lines (75 loc) · 1.9 KB
/
ec2.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
82
83
84
85
86
87
88
89
90
91
package ec2fzf
import (
"bytes"
"fmt"
"strings"
"text/template"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ec2"
)
func (e *Ec2fzf) ListInstances(ec2Client *ec2.EC2) ([]*ec2.Instance, error) {
instances := make([]*ec2.Instance, 0)
filters := make([]*ec2.Filter, 0, 0)
filters = append(filters, &ec2.Filter{
Name: aws.String("instance-state-name"),
Values: []*string{aws.String("pending"), aws.String("running"), aws.String("shutting-down")},
})
for _, filter := range e.options.Filters {
split := strings.SplitN(filter, "=", 2)
if len(split) < 2 {
return nil, fmt.Errorf("Filters can only contain one '='. Filter \"%s\" has %d", filter, len(split))
}
filters = append(filters, &ec2.Filter{
Name: aws.String(split[0]),
Values: []*string{aws.String(split[1])},
})
}
params := &ec2.DescribeInstancesInput{}
if len(filters) > 0 {
params.Filters = filters
}
err := ec2Client.DescribeInstancesPages(
params,
func(p *ec2.DescribeInstancesOutput, lastPage bool) bool {
for _, r := range p.Reservations {
for _, i := range r.Instances {
instances = append(instances, i)
}
}
return !lastPage
},
)
return instances, err
}
func (e *Ec2fzf) GetConnectionDetails(instance *ec2.Instance) string {
if e.options.UsePrivateIp {
return *instance.PrivateIpAddress
}
return *instance.PublicDnsName
}
func TemplateForInstance(i *ec2.Instance, t *template.Template) (output string, err error) {
tags := make(map[string]string)
for _, t := range i.Tags {
tags[*t.Key] = *t.Value
}
buffer := new(bytes.Buffer)
err = t.Execute(
buffer,
struct {
Tags map[string]string
*ec2.Instance
}{
tags,
i,
},
)
output = buffer.String()
return
}
func InstanceIdFromString(s string) (string, error) {
i := strings.Index(s, ":")
if i < 0 {
return "", fmt.Errorf("Unable to find instance id")
}
return strings.TrimSpace(s[0:i]), nil
}