in internal/pkg/describe/rd_web_service.go [72:160]
func (d *RDWebServiceDescriber) 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 observabilities []observabilityInEnv
var routes []*RDWSRoute
var configs []*ServiceConfig
var envVars envVars
var secrets []*rdwsSecret
resources := make(map[string][]*stack.Resource)
for _, env := range environments {
describer, err := d.initAppRunnerDescriber(env)
if err != nil {
return nil, err
}
service, err := describer.Service()
if err != nil {
return nil, fmt.Errorf("retrieve service configuration: %w", err)
}
url, err := describer.ServiceURL()
if err != nil {
return nil, fmt.Errorf("retrieve service url: %w", err)
}
private, err := describer.IsPrivate()
if err != nil {
return nil, fmt.Errorf("check if service is private: %w", err)
}
ingress := rdwsIngressInternet
if private {
ingress = rdwsIngressEnvironment
}
routes = append(routes, &RDWSRoute{
Environment: env,
URL: url,
Ingress: ingress,
})
configs = append(configs, &ServiceConfig{
Environment: env,
Port: service.Port,
CPU: service.CPU,
Memory: service.Memory,
})
for _, v := range service.EnvironmentVariables {
envVars = append(envVars, &envVar{
Environment: env,
Name: v.Name,
Value: v.Value,
})
}
for _, v := range service.EnvironmentSecrets {
secrets = append(secrets, &rdwsSecret{
Environment: env,
Name: v.Name,
ValueFrom: v.Value,
})
}
observabilities = append(observabilities, observabilityInEnv{
Environment: env,
Tracing: formatTracingConfiguration(service.Observability.TraceConfiguration),
})
if d.enableResources {
stackResources, err := describer.StackResources()
if err != nil {
return nil, fmt.Errorf("retrieve service resources: %w", err)
}
resources[env] = stackResources
}
}
if !observabilityPerEnv(observabilities).hasObservabilityConfiguration() {
observabilities = nil
}
return &rdWebSvcDesc{
Service: d.svc,
Type: manifestinfo.RequestDrivenWebServiceType,
App: d.app,
AppRunnerConfigurations: configs,
Routes: routes,
Variables: envVars,
Resources: resources,
Observability: observabilities,
Secrets: secrets,
environments: environments,
}, nil
}