85 lines
2.2 KiB
Go
85 lines
2.2 KiB
Go
|
package records
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net"
|
||
|
)
|
||
|
|
||
|
func validateEnabledServices(c *Config) error {
|
||
|
if !c.DNSOn && !c.HTTPOn {
|
||
|
return fmt.Errorf("Either DNS or HTTP server should be on")
|
||
|
}
|
||
|
if len(c.Masters) == 0 && c.Zk == "" {
|
||
|
return fmt.Errorf("specify mesos masters or zookeeper in config.json")
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// validateMasters checks that each master in the list is a properly formatted host:ip pair.
|
||
|
// duplicate masters in the list are not allowed.
|
||
|
// returns nil if the masters list is empty, or else all masters in the list are valid.
|
||
|
func validateMasters(ms []string) error {
|
||
|
if len(ms) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
valid := make(map[string]struct{}, len(ms))
|
||
|
for i, m := range ms {
|
||
|
h, p, err := net.SplitHostPort(m)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("illegal host:port specified for master %q", ms[i])
|
||
|
}
|
||
|
// normalize ipv6 addresses
|
||
|
if ip := net.ParseIP(h); ip != nil {
|
||
|
h = ip.String()
|
||
|
m = h + "_" + p
|
||
|
}
|
||
|
//TODO(jdef) distinguish between intended hostnames and invalid ip addresses
|
||
|
if _, found := valid[m]; found {
|
||
|
return fmt.Errorf("duplicate master specified: %v", ms[i])
|
||
|
}
|
||
|
valid[m] = struct{}{}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// validateResolvers checks that each resolver in the list is a properly formatted IP address.
|
||
|
// duplicate resolvers in the list are not allowed.
|
||
|
// returns nil if the resolver list is empty, or else all resolvers in the list are valid.
|
||
|
func validateResolvers(rs []string) error {
|
||
|
if len(rs) == 0 {
|
||
|
return nil
|
||
|
}
|
||
|
ips := make(map[string]struct{}, len(rs))
|
||
|
for _, r := range rs {
|
||
|
ip := net.ParseIP(r)
|
||
|
if ip == nil {
|
||
|
return fmt.Errorf("illegal IP specified for resolver %q", r)
|
||
|
}
|
||
|
ipstr := ip.String()
|
||
|
if _, found := ips[ipstr]; found {
|
||
|
return fmt.Errorf("duplicate resolver IP specified: %v", r)
|
||
|
}
|
||
|
ips[ipstr] = struct{}{}
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// validateIPSources checks validity of ip sources
|
||
|
func validateIPSources(srcs []string) error {
|
||
|
if len(srcs) == 0 {
|
||
|
return fmt.Errorf("empty ip sources")
|
||
|
}
|
||
|
if len(srcs) != len(unique(srcs)) {
|
||
|
return fmt.Errorf("duplicate ip source specified")
|
||
|
}
|
||
|
for _, src := range srcs {
|
||
|
switch src {
|
||
|
case "host", "docker", "mesos", "netinfo":
|
||
|
default:
|
||
|
return fmt.Errorf("invalid ip source %q", src)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|