/
aws.go
78 lines (65 loc) · 1.36 KB
/
aws.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
package funcs
import (
"sync"
"github.com/hairyhenderson/gomplate/aws"
)
var (
af *Funcs
afInit sync.Once
)
// AWSNS - the aws namespace
func AWSNS() *Funcs {
afInit.Do(func() {
af = &Funcs{
awsopts: aws.GetClientOptions(),
}
})
return af
}
// AWSFuncs -
func AWSFuncs(f map[string]interface{}) {
f["aws"] = AWSNS
// global aliases - for backwards compatibility
f["ec2meta"] = AWSNS().EC2Meta
f["ec2dynamic"] = AWSNS().EC2Dynamic
f["ec2tag"] = AWSNS().EC2Tag
f["ec2region"] = AWSNS().EC2Region
}
// Funcs -
type Funcs struct {
meta *aws.Ec2Meta
info *aws.Ec2Info
metaInit sync.Once
infoInit sync.Once
awsopts aws.ClientOptions
}
// EC2Region -
func (a *Funcs) EC2Region(def ...string) string {
a.metaInit.Do(a.initMeta)
return a.meta.Region(def...)
}
// EC2Meta -
func (a *Funcs) EC2Meta(key string, def ...string) string {
a.metaInit.Do(a.initMeta)
return a.meta.Meta(key, def...)
}
// EC2Dynamic -
func (a *Funcs) EC2Dynamic(key string, def ...string) string {
a.metaInit.Do(a.initMeta)
return a.meta.Dynamic(key, def...)
}
// EC2Tag -
func (a *Funcs) EC2Tag(tag string, def ...string) string {
a.infoInit.Do(a.initInfo)
return a.info.Tag(tag, def...)
}
func (a *Funcs) initMeta() {
if a.meta == nil {
a.meta = aws.NewEc2Meta(a.awsopts)
}
}
func (a *Funcs) initInfo() {
if a.info == nil {
a.info = aws.NewEc2Info(a.awsopts)
}
}