small pixel drawing of a pufferfish cascade

agent/config.go

package agent

import (
	"fmt"
	"net"
	"os"
)

const DefaultSerfPort int = 4443
const DefaultClientPort int = 4444

func DefaultConfig() *Config {
	hostname, err := os.Hostname()
	if err != nil {
		panic(err)
	}

	// TODO: figure out how to default the listeners
	cfg := Config{}
	cfg.BindAddr = &net.TCPAddr{IP: []byte{0, 0, 0, 0}, Port: DefaultSerfPort}
	cfg.ClientAddr = &net.TCPAddr{IP: []byte{127, 0, 0, 1}, Port: DefaultClientPort}
	cfg.NodeName = hostname

	return &cfg
}

type Config struct {
	BindAddr   *net.TCPAddr
	ClientAddr *net.TCPAddr
	NodeName   string
	StartJoin  []string
}

// BindAddrParts returns the parts of the BindAddr that should be
// used to configure Serf.
func (c *Config) AddrParts(address string) (string, int, error) {
	checkAddr := address

START:
	_, _, err := net.SplitHostPort(checkAddr)
	if ae, ok := err.(*net.AddrError); ok && ae.Err == "missing port in address" {
		checkAddr = fmt.Sprintf("%s:%d", checkAddr, DefaultSerfPort)
		goto START
	}
	if err != nil {
		return "", 0, err
	}

	// Get the address
	addr, err := net.ResolveTCPAddr("tcp", checkAddr)
	if err != nil {
		return "", 0, err
	}

	return addr.IP.String(), addr.Port, nil
}