diff --git a/agent/agent.go b/agent/agent.go index 65addc3..d4eae46 100644 --- a/agent/agent.go +++ b/agent/agent.go @@ -189,8 +189,6 @@ func (a *Agent) Join(addrs []string) (n int, err error) { if err != nil { return n, fmt.Errorf("Error joining: %v\n", err) } - // TODO: when joining fails, we don't get an error here - serf & memberlist - // just print to stdout and serf.Join returns without issue. return n, err } diff --git a/agent/config.go b/agent/config.go index 5df5aec..bedf9bd 100644 --- a/agent/config.go +++ b/agent/config.go @@ -6,7 +6,7 @@ import ( ) const DefaultBindPort int = 4443 -const DefaultClientPort int = 4443 +const DefaultClientPort int = 4444 func DefaultConfig() *Config { hostname, err := os.Hostname() diff --git a/ipaddr/ipaddr.go b/ipaddr/ipaddr.go new file mode 100644 index 0000000..772604a --- /dev/null +++ b/ipaddr/ipaddr.go @@ -0,0 +1,34 @@ +package ipaddr + +import ( + "log" + "net" + "strconv" + "strings" +) + +// resolveHost will take a single host string and convert it to a list of TCPAddrs +// This will process any port in the input as well as looking up the hostname using +// normal DNS resolution. +func ParseIPPort(IPPort string) *net.TCPAddr { + var addr net.TCPAddr + ip, portStr, err := net.SplitHostPort(IPPort) + if err != nil { + if strings.Contains(err.Error(), "missing port in address") { + ip = IPPort + } else { + log.Printf("error splitting ip+port '%s' into IP and port: %s\n", IPPort, err) + return &addr + } + } else { + addr.Port, err = strconv.Atoi(portStr) + if err != nil { + log.Printf("Parsed port '%s' is not an integer: %s\n", portStr, err) + return &addr + } + } + + addr.IP = net.ParseIP(ip) + + return &addr +} diff --git a/main.go b/main.go index 6dc6d58..7efc2dd 100644 --- a/main.go +++ b/main.go @@ -10,6 +10,7 @@ import ( "time" "git.j3s.sh/cascade/agent" + "git.j3s.sh/cascade/ipaddr" "git.j3s.sh/cascade/list" ) @@ -47,6 +48,7 @@ func run(command string, args []string) { func handleAgent() { config := getAgentConfig() + fmt.Printf("%+v", config) agent := agent.New(config) if err := agent.Start(); err != nil { fmt.Println(err) @@ -134,8 +136,11 @@ func getAgentConfig() *agent.Config { config := agent.DefaultConfig() // CASCADE_BIND=192.168.0.15:12345 if os.Getenv("CASCADE_BIND") != "" { - //TODO - // config.BindAddr = os.Getenv("CASCADE_BIND") + addr := ipaddr.ParseIPPort(os.Getenv("CASCADE_BIND")) + config.BindAddr.IP = addr.IP + if addr.Port != 0 { + config.BindAddr.Port = addr.Port + } } // CASCADE_JOIN=127.0.0.1,127.0.0.5 if os.Getenv("CASCADE_JOIN") != "" {