agent: split out server config parser, add tests
This commit is contained in:
parent
8d816ec883
commit
3b5004f2a4
|
@ -58,13 +58,9 @@ func NewAgent(config *Config, logOutput io.Writer) (*Agent, error) {
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// setupServer is used to setup the server if enabled
|
// serverConfig is used to generate a new server configuration struct
|
||||||
func (a *Agent) setupServer() error {
|
// for initializing a nomad server.
|
||||||
if !a.config.Server.Enabled {
|
func (a *Agent) serverConfig() (*nomad.Config, error) {
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup the configuration
|
|
||||||
conf := a.config.NomadConfig
|
conf := a.config.NomadConfig
|
||||||
if conf == nil {
|
if conf == nil {
|
||||||
conf = nomad.DefaultConfig()
|
conf = nomad.DefaultConfig()
|
||||||
|
@ -107,7 +103,7 @@ func (a *Agent) setupServer() error {
|
||||||
if addr := a.config.AdvertiseAddrs.Serf; addr != "" {
|
if addr := a.config.AdvertiseAddrs.Serf; addr != "" {
|
||||||
serfAddr, err := net.ResolveTCPAddr("tcp", addr)
|
serfAddr, err := net.ResolveTCPAddr("tcp", addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Failed resolving Serf advertise address: %s", err)
|
return nil, fmt.Errorf("error resolving serf advertise address: %s", err)
|
||||||
}
|
}
|
||||||
conf.SerfConfig.MemberlistConfig.AdvertiseAddr = serfAddr.IP.String()
|
conf.SerfConfig.MemberlistConfig.AdvertiseAddr = serfAddr.IP.String()
|
||||||
conf.SerfConfig.MemberlistConfig.AdvertisePort = serfAddr.Port
|
conf.SerfConfig.MemberlistConfig.AdvertisePort = serfAddr.Port
|
||||||
|
@ -115,7 +111,7 @@ func (a *Agent) setupServer() error {
|
||||||
if addr := a.config.AdvertiseAddrs.RPC; addr != "" {
|
if addr := a.config.AdvertiseAddrs.RPC; addr != "" {
|
||||||
rpcAddr, err := net.ResolveTCPAddr("tcp", addr)
|
rpcAddr, err := net.ResolveTCPAddr("tcp", addr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Failed resolving RPC advertise address: %s", err)
|
return nil, fmt.Errorf("error resolving rpc advertise address: %s", err)
|
||||||
}
|
}
|
||||||
conf.RPCAdvertise = rpcAddr
|
conf.RPCAdvertise = rpcAddr
|
||||||
}
|
}
|
||||||
|
@ -140,11 +136,27 @@ func (a *Agent) setupServer() error {
|
||||||
conf.SerfConfig.MemberlistConfig.BindPort = port
|
conf.SerfConfig.MemberlistConfig.BindPort = port
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return conf, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// setupServer is used to setup the server if enabled
|
||||||
|
func (a *Agent) setupServer() error {
|
||||||
|
if !a.config.Server.Enabled {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setup the configuration
|
||||||
|
conf, err := a.serverConfig()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("server config setup failed: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Create the server
|
// Create the server
|
||||||
server, err := nomad.NewServer(conf)
|
server, err := nomad.NewServer(conf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("server setup failed: %v", err)
|
return fmt.Errorf("server setup failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
a.server = server
|
a.server = server
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"strings"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
@ -79,3 +80,86 @@ func TestAgent_RPCPing(t *testing.T) {
|
||||||
t.Fatalf("err: %v", err)
|
t.Fatalf("err: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAgent_ServerConfig(t *testing.T) {
|
||||||
|
conf := DefaultConfig()
|
||||||
|
a := &Agent{config: conf}
|
||||||
|
|
||||||
|
// Returns error on bad serf addr
|
||||||
|
conf.AdvertiseAddrs.Serf = "nope"
|
||||||
|
_, err := a.serverConfig()
|
||||||
|
if err == nil || !strings.Contains(err.Error(), "serf advertise") {
|
||||||
|
t.Fatalf("expected serf address error, got: %#v", err)
|
||||||
|
}
|
||||||
|
conf.AdvertiseAddrs.Serf = "127.0.0.1:4000"
|
||||||
|
|
||||||
|
// Returns error on bad rpc addr
|
||||||
|
conf.AdvertiseAddrs.RPC = "nope"
|
||||||
|
_, err = a.serverConfig()
|
||||||
|
if err == nil || !strings.Contains(err.Error(), "rpc advertise") {
|
||||||
|
t.Fatalf("expected rpc address error, got: %#v", err)
|
||||||
|
}
|
||||||
|
conf.AdvertiseAddrs.RPC = "127.0.0.1:4001"
|
||||||
|
|
||||||
|
// Parses the advertise addrs correctly
|
||||||
|
out, err := a.serverConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
serfAddr := out.SerfConfig.MemberlistConfig.AdvertiseAddr
|
||||||
|
if serfAddr != "127.0.0.1" {
|
||||||
|
t.Fatalf("expect 127.0.0.1, got: %s", serfAddr)
|
||||||
|
}
|
||||||
|
serfPort := out.SerfConfig.MemberlistConfig.AdvertisePort
|
||||||
|
if serfPort != 4000 {
|
||||||
|
t.Fatalf("expected 4000, got: %d", serfPort)
|
||||||
|
}
|
||||||
|
if addr := out.RPCAdvertise; addr.IP.String() != "127.0.0.1" || addr.Port != 4001 {
|
||||||
|
t.Fatalf("bad rpc advertise addr: %#v", addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets up the ports properly
|
||||||
|
conf.Ports.RPC = 4003
|
||||||
|
conf.Ports.Serf = 4004
|
||||||
|
|
||||||
|
out, err = a.serverConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if addr := out.RPCAddr.Port; addr != 4003 {
|
||||||
|
t.Fatalf("expect 4003, got: %d", out.RPCAddr.Port)
|
||||||
|
}
|
||||||
|
if port := out.SerfConfig.MemberlistConfig.BindPort; port != 4004 {
|
||||||
|
t.Fatalf("expect 4004, got: %d", port)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prefers the most specific bind addrs
|
||||||
|
conf.BindAddr = "127.0.0.3"
|
||||||
|
conf.Addresses.RPC = "127.0.0.2"
|
||||||
|
conf.Addresses.Serf = "127.0.0.2"
|
||||||
|
|
||||||
|
out, err = a.serverConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if addr := out.RPCAddr.IP.String(); addr != "127.0.0.2" {
|
||||||
|
t.Fatalf("expect 127.0.0.2, got: %s", addr)
|
||||||
|
}
|
||||||
|
if addr := out.SerfConfig.MemberlistConfig.BindAddr; addr != "127.0.0.2" {
|
||||||
|
t.Fatalf("expect 127.0.0.2, got: %s", addr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Defaults to the global bind addr
|
||||||
|
conf.Addresses.RPC = ""
|
||||||
|
conf.Addresses.Serf = ""
|
||||||
|
out, err = a.serverConfig()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if addr := out.RPCAddr.IP.String(); addr != "127.0.0.3" {
|
||||||
|
t.Fatalf("expect 127.0.0.3, got: %s", addr)
|
||||||
|
}
|
||||||
|
if addr := out.SerfConfig.MemberlistConfig.BindAddr; addr != "127.0.0.3" {
|
||||||
|
t.Fatalf("expect 127.0.0.3, got: %s", addr)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue