small pixel drawing of a pufferfish cascade

config.go

package main

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

const DefaultBindPort int = 4449

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

	return &Config{
		BindAddr: "0.0.0.0",
		NodeName: hostname,
	}
}

// Services are built on top of serf
// tags. The tag format under the hood
// is service=name=<name>,port=<port>
type Service struct {
	name string
	port int
}

type Config struct {
	BindAddr  string
	NodeName  string
	StartJoin []string
	Services  []Service
}

// lifted from serf, could be simplified
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, DefaultBindPort)
		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
}