/
init.go
173 lines (145 loc) · 4.34 KB
/
init.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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
package aws
import (
"net/http"
"net/url"
"os"
"github.com/aws/aws-sdk-go/service/sts"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
"github.com/aws/aws-sdk-go/aws/endpoints"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/stelligent/mu/common"
)
// return a session.Options mutated with extra configuration values
func setupSessOptions(region string,
proxy string,
profile string) session.Options {
sessOptions := session.Options{SharedConfigState: session.SharedConfigEnable}
if region != common.Empty {
sessOptions.Config.Region = aws.String(region)
}
if proxy != common.Empty {
proxyHTTPClient := &http.Client{
Transport: &http.Transport{
Proxy: func(*http.Request) (*url.URL, error) {
return url.Parse(proxy)
},
},
}
sessOptions.Config.HTTPClient = proxyHTTPClient
}
if profile != common.Empty {
sessOptions.Profile = profile
}
return sessOptions
}
func initializeManagers(sess *session.Session, ctx *common.Context, dryrunPath string, skipVersionCheck bool, allowDataLoss bool) error {
var err error
ctx.Region = aws.StringValue(sess.Config.Region)
if partition, ok := endpoints.PartitionForRegion(endpoints.DefaultPartitions(), ctx.Region); ok {
ctx.Partition = partition.ID()
}
callerIdentity, err := sts.New(sess).GetCallerIdentity(&sts.GetCallerIdentityInput{})
if err != nil {
return err
}
ctx.AccountID = aws.StringValue(callerIdentity.Account)
// initialize StackManager
ctx.StackManager, err = newStackManager(sess, ctx.ExtensionsManager, dryrunPath, skipVersionCheck, allowDataLoss)
if err != nil {
return err
}
// initialize ClusterManager
ctx.ClusterManager, err = newClusterManager(sess, dryrunPath != "")
if err != nil {
return err
}
// initialize InstanceManager
ctx.InstanceManager, err = newInstanceManager(sess)
if err != nil {
return err
}
// initialize ElbManager
ctx.ElbManager, err = newElbv2Manager(sess)
if err != nil {
return err
}
// initialize RdsManager
ctx.RdsManager, err = newRdsManager(sess)
if err != nil {
return err
}
// initialize ParamManager
ctx.ParamManager, err = newParamManager(sess, dryrunPath != "")
if err != nil {
return err
}
// initialize CodePipelineManager
ctx.PipelineManager, err = newPipelineManager(sess)
if err != nil {
return err
}
// initialize CloudWatchLogs
ctx.LogsManager, err = newLogsManager(sess)
if err != nil {
return err
}
// initialize TaskManager
ctx.TaskManager, err = newTaskManager(sess, &ctx.StackManager)
if err != nil {
return err
}
// initialize ArtifactManager
ctx.ArtifactManager, err = newArtifactManager(sess, dryrunPath)
if err != nil {
return err
}
// initialize SubscriptionManager
ctx.SubscriptionManager, err = newSnsManager(sess)
if err != nil {
return err
}
// initialize CatalogManager
ctx.CatalogManager, err = newCatalogManager(sess, dryrunPath != "", ctx.StackManager)
if err != nil {
return err
}
// initialize the RolesetManager
ctx.RolesetManager, err = newRolesetManager(ctx)
return err
}
// InitializeContext loads manager objects
func InitializeContext(ctx *common.Context, profile string, assumeRole string, region string, dryrunPath string, skipVersionCheck bool, proxy string, allowDataLoss bool) error {
sessOptions := setupSessOptions(region, proxy, profile)
log.Debugf("Creating AWS session profile:%s region:%s proxy:%s", profile, region, proxy)
sess, err := session.NewSessionWithOptions(sessOptions)
if err != nil {
return err
}
if assumeRole != common.Empty {
// Create the credentials from AssumeRoleProvider to assume the role
// referenced by the "myRoleARN" ARN.
creds := stscreds.NewCredentials(sess, assumeRole)
sess, err = session.NewSession(&aws.Config{Region: sess.Config.Region, HTTPClient: sess.Config.HTTPClient, Credentials: creds})
if err != nil {
return err
}
}
err = initializeManagers(sess, ctx, dryrunPath, skipVersionCheck, allowDataLoss)
if err != nil {
return err
}
// initialize LocalCodePipelineManager
localSess, err := session.NewSession()
if err != nil {
return err
}
ctx.LocalPipelineManager, _ = newPipelineManager(localSess)
// initialize KubernetesManager
ctx.KubernetesResourceManagerProvider, err = newEksKubernetesResourceManagerProvider(sess, ctx.ExtensionsManager, dryrunPath)
if err != nil {
return err
}
ctx.DockerOut = os.Stdout
return nil
}