func()

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
}