in internal/pkg/describe/lb_web_service.go [97:183]
func (d *LBWebServiceDescriber) Describe() (HumanJSONStringer, error) {
environments, err := d.store.ListEnvironmentsDeployedTo(d.app, d.svc)
if err != nil {
return nil, fmt.Errorf("list deployed environments for application %s: %w", d.app, err)
}
var routes []*WebServiceRoute
var configs []*ECSServiceConfig
var serviceDiscoveries []*ServiceDiscovery
var envVars []*containerEnvVar
var secrets []*secret
for _, env := range environments {
err := d.initClients(env)
if err != nil {
return nil, err
}
webServiceURI, err := d.URI(env)
if err != nil {
return nil, fmt.Errorf("retrieve service URI: %w", err)
}
routes = append(routes, &WebServiceRoute{
Environment: env,
URL: webServiceURI,
})
containerPlatform, err := d.ecsServiceDescribers[env].Platform()
if err != nil {
return nil, fmt.Errorf("retrieve platform: %w", err)
}
webSvcEnvVars, err := d.ecsServiceDescribers[env].EnvVars()
if err != nil {
return nil, fmt.Errorf("retrieve environment variables: %w", err)
}
configs = append(configs, &ECSServiceConfig{
ServiceConfig: &ServiceConfig{
Environment: env,
Port: d.svcParams[cfnstack.LBWebServiceContainerPortParamKey],
CPU: d.svcParams[cfnstack.WorkloadTaskCPUParamKey],
Memory: d.svcParams[cfnstack.WorkloadTaskMemoryParamKey],
Platform: dockerengine.PlatformString(containerPlatform.OperatingSystem, containerPlatform.Architecture),
},
Tasks: d.svcParams[cfnstack.WorkloadTaskCountParamKey],
})
endpoint, err := d.envDescriber[env].ServiceDiscoveryEndpoint()
if err != nil {
return nil, err
}
serviceDiscoveries = appendServiceDiscovery(serviceDiscoveries, serviceDiscovery{
Service: d.svc,
Port: d.svcParams[cfnstack.LBWebServiceContainerPortParamKey],
Endpoint: endpoint,
}, env)
envVars = append(envVars, flattenContainerEnvVars(env, webSvcEnvVars)...)
webSvcSecrets, err := d.ecsServiceDescribers[env].Secrets()
if err != nil {
return nil, fmt.Errorf("retrieve secrets: %w", err)
}
secrets = append(secrets, flattenSecrets(env, webSvcSecrets)...)
}
resources := make(map[string][]*stack.Resource)
if d.enableResources {
for _, env := range environments {
err := d.initClients(env)
if err != nil {
return nil, err
}
stackResources, err := d.ecsServiceDescribers[env].ServiceStackResources()
if err != nil {
return nil, fmt.Errorf("retrieve service resources: %w", err)
}
resources[env] = stackResources
}
}
return &webSvcDesc{
Service: d.svc,
Type: manifest.LoadBalancedWebServiceType,
App: d.app,
Configurations: configs,
Routes: routes,
ServiceDiscovery: serviceDiscoveries,
Variables: envVars,
Secrets: secrets,
Resources: resources,
environments: environments,
}, nil
}