func TestMasterAddressDefaultingToBindValues(t *testing.T) { defaultIP, err := util.DefaultLocalIP4() if err != nil { t.Fatalf("unexpected error: %v", err) } expected := "http://" + defaultIP.String() + ":9012" masterArgs := NewDefaultMasterArgs() masterArgs.ListenArg.ListenAddr.Set("http://0.0.0.0:9012") actual, err := masterArgs.GetMasterAddress() if err != nil { t.Fatalf("unexpected error: %v", err) } if expected != actual.String() { t.Fatalf("expected %v, got %v", expected, actual) } }
// GetMasterAddress checks for an unset master address and then attempts to use the first // public IPv4 non-loopback address registered on this host. // TODO: make me IPv6 safe func (args MasterArgs) GetMasterAddress() (*url.URL, error) { if args.MasterAddr.Provided { return args.MasterAddr.URL, nil } // Use the bind port by default port := args.ListenArg.ListenAddr.Port // Use the bind scheme by default scheme := args.ListenArg.ListenAddr.URL.Scheme addr := "" if ip, err := cmdutil.DefaultLocalIP4(); err == nil { addr = ip.String() } else if err == cmdutil.ErrorNoDefaultIP { addr = "127.0.0.1" } else if err != nil { return nil, fmt.Errorf("Unable to find a public IP address: %v", err) } masterAddr := scheme + "://" + net.JoinHostPort(addr, strconv.Itoa(port)) return url.Parse(masterAddr) }