Skip to content

Commit eb74078

Browse files
authored
Merge pull request #1902 from hashicorp/b-advertise
Allow advertise to not specify port
2 parents b5cbcd3 + a379f86 commit eb74078

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

command/agent/agent.go

+20-9
Original file line numberDiff line numberDiff line change
@@ -537,29 +537,40 @@ func (a *Agent) getSerfAddr(bind bool) (*net.TCPAddr, error) {
537537
bindAddr := a.config.Addresses.Serf
538538
globalBindAddr := a.config.BindAddr
539539
port := a.config.Ports.Serf
540-
return pickAddress(bind, globalBindAddr, advertAddr, bindAddr, port, "RPC")
540+
return pickAddress(bind, globalBindAddr, advertAddr, bindAddr, port, "Serf")
541541
}
542542

543543
// pickAddress is a shared helper to pick the address to either bind to or
544544
// advertise.
545545
func pickAddress(bind bool, globalBindAddr, advertiseAddr, bindAddr string, port int, service string) (*net.TCPAddr, error) {
546-
portConverted := strconv.Itoa(port)
547546
var serverAddr string
548547
if advertiseAddr != "" && !bind {
549548
serverAddr = advertiseAddr
549+
550+
// Check if the advertise has a port
551+
if host, pport, err := net.SplitHostPort(advertiseAddr); err == nil {
552+
if parsed, err := strconv.Atoi(pport); err == nil {
553+
serverAddr = host
554+
port = parsed
555+
}
556+
}
550557
} else if bindAddr != "" && !(bindAddr == "0.0.0.0" && !bind) {
551-
serverAddr = net.JoinHostPort(bindAddr, portConverted)
558+
serverAddr = bindAddr
552559
} else if globalBindAddr != "" && !(globalBindAddr == "0.0.0.0" && !bind) {
553-
serverAddr = net.JoinHostPort(globalBindAddr, portConverted)
560+
serverAddr = globalBindAddr
554561
} else {
555-
serverAddr = net.JoinHostPort("127.0.0.1", portConverted)
562+
serverAddr = "127.0.0.1"
556563
}
557564

558-
addr, err := net.ResolveTCPAddr("tcp", serverAddr)
559-
if err != nil {
560-
return nil, fmt.Errorf("error resolving %s addr %+q: %v", service, serverAddr, err)
565+
ip := net.ParseIP(serverAddr)
566+
if ip == nil {
567+
return nil, fmt.Errorf("Failed to parse %s address: %q", service, serverAddr)
561568
}
562-
return addr, nil
569+
570+
return &net.TCPAddr{
571+
IP: ip,
572+
Port: port,
573+
}, nil
563574
}
564575

565576
// reservePortsForClient reserves a range of ports for the client to use when

command/agent/agent_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -98,15 +98,15 @@ func TestAgent_ServerConfig(t *testing.T) {
9898
// Returns error on bad serf addr
9999
conf.AdvertiseAddrs.Serf = "nope"
100100
_, err := a.serverConfig()
101-
if err == nil || !strings.Contains(err.Error(), "error resolving Serf addr") {
101+
if err == nil || !strings.Contains(err.Error(), "Failed to parse Serf address") {
102102
t.Fatalf("expected serf address error, got: %#v", err)
103103
}
104104
conf.AdvertiseAddrs.Serf = "127.0.0.1:4000"
105105

106106
// Returns error on bad rpc addr
107107
conf.AdvertiseAddrs.RPC = "nope"
108108
_, err = a.serverConfig()
109-
if err == nil || !strings.Contains(err.Error(), "error resolving RPC addr") {
109+
if err == nil || !strings.Contains(err.Error(), "Failed to parse RPC address") {
110110
t.Fatalf("expected rpc address error, got: %#v", err)
111111
}
112112
conf.AdvertiseAddrs.RPC = "127.0.0.1:4001"
@@ -155,7 +155,7 @@ func TestAgent_ServerConfig(t *testing.T) {
155155
conf.Addresses.RPC = "127.0.0.2"
156156
conf.Addresses.Serf = "127.0.0.2"
157157
conf.Addresses.HTTP = "127.0.0.2"
158-
conf.AdvertiseAddrs.HTTP = "10.0.0.10:4646"
158+
conf.AdvertiseAddrs.HTTP = "10.0.0.10"
159159
conf.AdvertiseAddrs.RPC = ""
160160
conf.AdvertiseAddrs.Serf = "10.0.0.12:4004"
161161

0 commit comments

Comments
 (0)