Commit 378a27e8 authored by jackgr's avatar jackgr
Browse files

Streamline service lookup

parent 30f8db7f
main Release add-codeql dependabot/go_modules/github.com/docker/distribution-2.8.2incompatible dependabot/go_modules/github.com/lib/pq-1.10.9 dependabot/go_modules/github.com/rubenv/sql-migrate-1.4.0 dependabot/go_modules/golang.org/x/crypto-0.9.0 dependabot/go_modules/golang.org/x/term-0.8.0 dependabot/go_modules/k8s.io/klog/v2-2.100.1 dev-v2 feat-v3/event-emitter-lua kube-update-test release-2.0 release-2.1 release-2.10 release-2.11 release-2.12 release-2.13 release-2.14 release-2.15 release-2.16 release-2.17 release-2.2 release-2.3 release-2.4 release-2.5 release-2.6 release-2.7 release-2.8 release-2.9 release-3.0 release-3.1 release-3.10 release-3.11 release-3.12 release-3.2 release-3.3 release-3.4 release-3.5 release-3.6 release-3.6.1 release-3.6.2 release-3.7 release-3.8 release-3.9 release-v3.0.0-beta.4 1.999.0 v3.12.0 v3.12.0-rc.1 v3.12.0-dev.1 v3.11.3 v3.11.2 v3.11.1 v3.11.0 v3.11.0-rc.2 v3.11.0-rc.1 v3.10.3 v3.10.2 v3.10.1 v3.10.0 v3.10.0-rc.1 v3.9.4 v3.9.3 v3.9.2 v3.9.1 v3.9.0 v3.9.0-rc.1 v3.8.2 v3.8.1 v3.8.0 v3.8.0-rc.2 v3.8.0-rc.1 v3.7.2 v3.7.1 v3.7.0 v3.7.0-rc.3 v3.7.0-rc.2 v3.7.0-rc.1 v3.6.3 v3.6.2 v3.6.1 v3.6.0 v3.6.0-rc.1 v3.5.4 v3.5.3 v3.5.2 v3.5.1 v3.5.0 v3.5.0-rc.2 v3.5.0-rc.1 v3.4.2 v3.4.1 v3.4.0 v3.4.0-rc.1 v3.3.4 v3.3.3 v3.3.2 v3.3.1 v3.3.0 v3.3.0-rc.2 v3.3.0-rc.1 v3.2.4 v3.2.3 v3.2.2 v3.2.1 v3.2.0 v3.2.0-rc.1 v3.1.3 v3.1.2 v3.1.1 v3.1.0 v3.1.0-rc.3 v3.1.0-rc.2 v3.1.0-rc.1 v3.0.3 v3.0.2 v3.0.1 v3.0.0 v3.0.0-rc.4 v3.0.0-rc.3 v3.0.0-rc.2 v3.0.0-rc.1 v3.0.0-beta.5 v3.0.0-beta.4 v3.0.0-beta.3 v3.0.0-beta.2 v3.0.0-beta.1 v3.0.0-alpha.2 v3.0.0-alpha.1 v2.17.0 v2.17.0-rc.1 v2.16.12 v2.16.11 v2.16.10 v2.16.9 v2.16.8 v2.16.7 v2.16.6 v2.16.5 v2.16.4 v2.16.3 v2.16.2 v2.16.1 v2.16.0 v2.16.0-rc.2 v2.16.0-rc.1 v2.15.2 v2.15.1 v2.15.0 v2.15.0-rc.2 v2.15.0-rc.1 v2.14.3 v2.14.2 v2.14.1 v2.14.0 v2.14.0-rc.2 v2.14.0-rc.1 v2.13.1 v2.13.1-rc.1 v2.13.0 v2.13.0-rc.2 v2.13.0-rc.1 v2.12.3 v2.12.2 v2.12.1 v2.12.0 v2.12.0-rc.2 v2.12.0-rc.1 v2.11.0 v2.11.0-rc.4 v2.11.0-rc.3 v2.11.0-rc.2 v2.11.0-rc.1 v2.10.0 v2.10.0-rc.3 v2.10.0-rc.2 v2.10.0-rc.1 v2.9.1 v2.9.0 v2.9.0-rc5 v2.9.0-rc4 v2.9.0-rc3 v2.9.0-rc2 v2.9.0-rc1 v2.8.2 v2.8.2-rc1 v2.8.1 v2.8.0 v2.8.0-rc.1 v2.7.2 v2.7.1 v2.7.0 v2.7.0-rc1 v2.6.2 v2.6.1 v2.6.0 v2.5.1 v2.5.0 v2.4.2 v2.4.1 v2.4.0 v2.3.1 v2.3.0 v2.2.3 v2.2.2 v2.2.1 v2.2.0 v2.1.3 v2.1.2 v2.1.1 v2.1.0 v2.0.2 v2.0.1 v2.0.0 v2.0.0-rc.2 v2.0.0-rc.1 v2.0.0-beta.2 v2.0.0-beta.1 v2.0.0-alpha.5 v2.0.0-alpha.4 v2.0.0-alpha.3 v2.0.0-alpha.2 v2.0.0-alpha.1
No related merge requests found
Showing with 34 additions and 28 deletions
+34 -28
...@@ -65,42 +65,48 @@ type KubernetesSecret struct { ...@@ -65,42 +65,48 @@ type KubernetesSecret struct {
Data map[string]string `json:"data,omitempty"` Data map[string]string `json:"data,omitempty"`
} }
// GetServiceURL takes a default service URL, a service name and a service port, // GetServiceURL takes a service name, a service port, and a default service URL,
// and returns a URL for accessing the service. It first looks for an environment // and returns a URL for accessing the service. It first looks for an environment
// variable set by Kubernetes by transposing the service name. If it can't find // variable set by Kubernetes by transposing the service name. If it can't find
// one, it looks up the service name in DNS. If that fails, it returns the default // one, it looks up the service name in DNS. If that doesn't work, it returns the
// service URL. // default service URL. If that's empty, it returns an HTTP localhost URL for the
func GetServiceURL(serviceURL, serviceName, servicePort string) string { // service port. If service port is empty, it panics.
if serviceURL == "" { func GetServiceURL(serviceName, servicePort, serviceURL string) (string, error) {
serviceURL = MakeEnvVariableURL(serviceName) if serviceName != "" {
if serviceURL == "" { varBase := strings.Replace(serviceName, "-", "_", -1)
varName := strings.ToUpper(varBase) + "_PORT"
serviceURL := os.Getenv(varName)
if serviceURL != "" {
return strings.Replace(serviceURL, "tcp", "http", 1), nil
}
if servicePort != "" {
addrs, err := net.LookupHost(serviceName) addrs, err := net.LookupHost(serviceName)
if err != nil || len(addrs) < 1 { if err == nil && len(addrs) > 0 {
log.Fatalf("cannot resolve service:%v. environment:%v\n", serviceName, os.Environ()) return fmt.Sprintf("http://%s:%s", addrs[0], servicePort), nil
} }
serviceURL = fmt.Sprintf("http://%s:%s", addrs[0], servicePort)
} }
} }
return serviceURL if serviceURL != "" {
} return serviceURL, nil
}
// MakeEnvVariableURL takes a service name and returns the value of the if servicePort != "" {
// environment variable that identifies its URL, if it exists, or the empty serviceURL = fmt.Sprintf("http://localhost:%s", servicePort)
// string, if it doesn't. return serviceURL, nil
func MakeEnvVariableURL(str string) string { }
prefix := MakeEnvVariableName(str)
url := os.Getenv(prefix + "_PORT") err := fmt.Errorf("cannot resolve service:%v in environment:%v\n", serviceName, os.Environ())
return strings.Replace(url, "tcp", "http", 1) return "", err
} }
// MakeEnvVariableName is copied from the Kubernetes source, // GetServiceURLOrDie calls GetServiceURL and exits if it returns an error.
// which is referenced by the documentation for service environment variables. func GetServiceURLOrDie(serviceName, servicePort, serviceURL string) string {
func MakeEnvVariableName(str string) string { URL, err := GetServiceURL(serviceName, servicePort, serviceURL)
// TODO: If we simplify to "all names are DNS1123Subdomains" this if err != nil {
// will need two tweaks: log.Fatal(err)
// 1) Handle leading digits }
// 2) Handle dots
return strings.ToUpper(strings.Replace(str, "-", "_", -1)) return URL
} }
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment