1package connect 2 3import ( 4 "fmt" 5 6 "github.com/hashicorp/consul/agent/structs" 7) 8 9func UpstreamSNI(u *structs.Upstream, subset string, dc string, trustDomain string) string { 10 if u.Datacenter != "" { 11 dc = u.Datacenter 12 } 13 14 if u.DestinationType == structs.UpstreamDestTypePreparedQuery { 15 return QuerySNI(u.DestinationName, dc, trustDomain) 16 } 17 return ServiceSNI(u.DestinationName, subset, u.DestinationNamespace, dc, trustDomain) 18} 19 20func DatacenterSNI(dc string, trustDomain string) string { 21 return fmt.Sprintf("%s.internal.%s", dc, trustDomain) 22} 23 24func ServiceSNI(service string, subset string, namespace string, datacenter string, trustDomain string) string { 25 if namespace == "" { 26 namespace = "default" 27 } 28 29 if subset == "" { 30 return fmt.Sprintf("%s.%s.%s.internal.%s", service, namespace, datacenter, trustDomain) 31 } else { 32 return fmt.Sprintf("%s.%s.%s.%s.internal.%s", subset, service, namespace, datacenter, trustDomain) 33 } 34} 35 36func QuerySNI(service string, datacenter string, trustDomain string) string { 37 return fmt.Sprintf("%s.default.%s.query.%s", service, datacenter, trustDomain) 38} 39 40func TargetSNI(target *structs.DiscoveryTarget, trustDomain string) string { 41 return ServiceSNI(target.Service, target.ServiceSubset, target.Namespace, target.Datacenter, trustDomain) 42} 43