blob: 0261eb02a8153ad235c84f000c528142bf170ca3 (
plain)
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
|
package aws
import (
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/ec2"
)
// Ec2Info -
type Ec2Info struct {
describer func() InstanceDescriber
metaClient *Ec2Meta
}
// InstanceDescriber - A subset of ec2iface.EC2API that we can use to call EC2.DescribeInstances
type InstanceDescriber interface {
DescribeInstances(*ec2.DescribeInstancesInput) (*ec2.DescribeInstancesOutput, error)
}
// NewEc2Info -
func NewEc2Info() *Ec2Info {
metaClient := &Ec2Meta{}
return &Ec2Info{
describer: func() InstanceDescriber {
region := metaClient.Region()
return ec2Client(region)
},
metaClient: metaClient,
}
}
func ec2Client(region string) (client InstanceDescriber) {
config := aws.NewConfig()
config = config.WithRegion(region)
client = ec2.New(session.New(config))
return client
}
// Tag -
func (e *Ec2Info) Tag(tag string, def ...string) string {
instanceID := e.metaClient.Meta("instance-id")
input := &ec2.DescribeInstancesInput{
InstanceIds: aws.StringSlice([]string{instanceID}),
}
output, err := e.describer().DescribeInstances(input)
if err != nil {
return returnDefault(def)
}
if output != nil && len(output.Reservations) > 0 &&
len(output.Reservations[0].Instances) > 0 &&
len(output.Reservations[0].Instances[0].Tags) > 0 {
for _, v := range output.Reservations[0].Instances[0].Tags {
if *v.Key == tag {
return *v.Value
}
}
}
return returnDefault(def)
}
|