in internal/pkg/describe/lb_web_service.go [72:138]
func NewLBWebServiceDescriber(opt NewServiceConfig) (*LBWebServiceDescriber, error) {
describer := &LBWebServiceDescriber{
app: opt.App,
svc: opt.Svc,
enableResources: opt.EnableResources,
store: opt.DeployStore,
ecsServiceDescribers: make(map[string]ecsDescriber),
envDescriber: make(map[string]envDescriber),
}
describer.initLBDescriber = func(envName string) (lbDescriber, error) {
env, err := opt.ConfigStore.GetEnvironment(opt.App, envName)
if err != nil {
return nil, fmt.Errorf("get environment %s: %w", envName, err)
}
sess, err := sessions.ImmutableProvider().FromRole(env.ManagerRoleARN, env.Region)
if err != nil {
return nil, err
}
return elbv2.New(sess), nil
}
describer.initECSServiceDescribers = func(env string) (ecsDescriber, error) {
if describer, ok := describer.ecsServiceDescribers[env]; ok {
return describer, nil
}
svcDescr, err := newECSServiceDescriber(NewServiceConfig{
App: opt.App,
Env: env,
Svc: opt.Svc,
ConfigStore: opt.ConfigStore,
})
if err != nil {
return nil, err
}
describer.ecsServiceDescribers[env] = svcDescr
return svcDescr, nil
}
describer.initEnvDescribers = func(env string) (envDescriber, error) {
if describer, ok := describer.envDescriber[env]; ok {
return describer, nil
}
envDescr, err := NewEnvDescriber(NewEnvDescriberConfig{
App: opt.App,
Env: env,
ConfigStore: opt.ConfigStore,
})
if err != nil {
return nil, err
}
describer.envDescriber[env] = envDescr
return envDescr, nil
}
describer.initCWDescriber = func(envName string) (cwAlarmDescriber, error) {
if describer, ok := describer.cwAlarmDescribers[envName]; ok {
return describer, nil
}
env, err := opt.ConfigStore.GetEnvironment(opt.App, envName)
if err != nil {
return nil, fmt.Errorf("get environment %s: %w", envName, err)
}
sess, err := sessions.ImmutableProvider().FromRole(env.ManagerRoleARN, env.Region)
if err != nil {
return nil, err
}
return cloudwatch.New(sess), nil
}
return describer, nil
}