in internal/pkg/describe/uri.go [177:247]
func (d *BackendServiceDescriber) URI(envName string) (URI, error) {
svcDescr, err := d.initECSServiceDescribers(envName)
if err != nil {
return URI{}, err
}
envDescr, err := d.initEnvDescribers(envName)
if err != nil {
return URI{}, err
}
resources, err := svcDescr.StackResources()
if err != nil {
return URI{}, fmt.Errorf("get stack resources for service %s: %w", d.svc, err)
}
for _, res := range resources {
if res.LogicalID == svcStackResourceALBTargetGroupLogicalID {
uriDescr := &uriDescriber{
svc: d.svc,
env: envName,
svcDescriber: svcDescr,
envDescriber: envDescr,
initLBDescriber: d.initLBDescriber,
albCFNOutputName: envOutputInternalLoadBalancerDNSName,
}
privateURI, err := uriDescr.uri()
if err != nil {
return URI{}, err
}
if !privateURI.HTTPS && len(privateURI.DNSNames) > 1 {
privateURI = uriDescr.bestEffortRemoveALBDNSName(privateURI)
}
return URI{
URI: english.OxfordWordSeries(privateURI.strings(), "or"),
AccessType: URIAccessTypeInternal,
}, nil
}
}
svcStackParams, err := svcDescr.Params()
if err != nil {
return URI{}, fmt.Errorf("get stack parameters for environment %s: %w", envName, err)
}
if !isReachableWithinVPC(svcStackParams) {
return URI{
URI: BlankServiceDiscoveryURI,
AccessType: URIAccessTypeNone,
}, nil
}
scDNSNames, err := svcDescr.ServiceConnectDNSNames()
if err != nil {
return URI{}, fmt.Errorf("retrieve service connect DNS names: %w", err)
}
if len(scDNSNames) > 0 {
return URI{
URI: english.OxfordWordSeries(scDNSNames, "or"),
AccessType: URIAccessTypeServiceConnect,
}, nil
}
endpoint, err := envDescr.ServiceDiscoveryEndpoint()
if err != nil {
return URI{}, fmt.Errorf("retrieve service discovery endpoint for environment %s: %w", envName, err)
}
s := serviceDiscovery{
Service: d.svc,
Port: svcStackParams[stack.WorkloadTargetPortParamKey],
Endpoint: endpoint,
}
return URI{
URI: s.String(),
AccessType: URIAccessTypeServiceDiscovery,
}, nil
}