func main() { flag.Parse() if nameserver != "" { for _, hostPort := range strings.Split(nameserver, ",") { if err := validateHostPort(hostPort); err != nil { log.Fatalf("skydns: nameserver is invalid: %s", err) } config.Nameservers = append(config.Nameservers, hostPort) } } if err := validateHostPort(config.DnsAddr); err != nil { log.Fatalf("skydns: addr is invalid: %s", err) } if err := server.SetDefaults(config); err != nil { log.Fatalf("skydns defaults could not be set from /etc/resolv.conf: %v", err) } if config.Local != "" { config.Local = dns.Fqdn(config.Local) } backend := NewBackend() s := server.New(backend, config) stats.Collect() // Graphite server.Metrics() // Prometheus if err := s.Run(); err != nil { log.Fatalf("skydns: %s", err) } }
func main() { members := make([]string, 0) raft.SetLogLevel(0) flag.Parse() nameservers := strings.Split(nameserver, ",") // empty argument given if len(nameservers) == 1 && nameservers[0] == "" { nameservers = make([]string, 0) config, err := dns.ClientConfigFromFile("/etc/resolv.conf") if err == nil { for _, s := range config.Servers { nameservers = append(nameservers, net.JoinHostPort(s, config.Port)) } } else { log.Fatal(err) return } } if discover { ns, err := net.LookupNS(domain) if err != nil { log.Fatal(err) return } if len(ns) < 1 { log.Fatal("No NS records found for ", domain) return } for _, n := range ns { members = append(members, strings.TrimPrefix(n.Host, ".")) } } else if join != "" { members = strings.Split(join, ",") } s := server.NewServer(members, domain, ldns, lhttp, dataDir, rtimeout, wtimeout, secret, nameservers) stats.Collect() waiter, err := s.Start() if err != nil { log.Fatal(err) return } waiter.Wait() }
func main() { flag.Parse() machines := strings.Split(machine, ",") client := newClient(machines, tlspem, tlskey, cacert) if nameserver != "" { for _, hostPort := range strings.Split(nameserver, ",") { if err := validateHostPort(hostPort); err != nil { log.Fatalf("skydns: nameserver is invalid: %s", err) } config.Nameservers = append(config.Nameservers, hostPort) } } if err := validateHostPort(config.DnsAddr); err != nil { log.Fatalf("skydns: addr is invalid: %s", err) } if err := loadConfig(client, config); err != nil { log.Fatalf("skydns: %s", err) } if err := server.SetDefaults(config); err != nil { log.Fatalf("skydns defaults could not be set from /etc/resolv.conf: %v", err) } if config.Local != "" { config.Local = dns.Fqdn(config.Local) } backend := backendetcd.NewBackend(client, &backendetcd.Config{ Ttl: config.Ttl, Priority: config.Priority, }) s := server.New(backend, config) if discover { go func() { recv := make(chan *etcd.Response) go client.Watch("/_etcd/machines/", 0, true, recv, nil) duration := 1 * time.Second for { select { case n := <-recv: if n != nil { if client := updateClient(n, tlskey, tlspem, cacert); client != nil { backend.UpdateClient(client) } duration = 1 * time.Second // reset } else { // we can see an n == nil, probably when we can't connect to etcd. log.Printf("skydns: etcd machine cluster update failed, sleeping %s + ~3s", duration) time.Sleep(duration + (time.Duration(rand.Float32() * 3e9))) // Add some random. duration *= 2 if duration > 32*time.Second { duration = 32 * time.Second } } } } }() } if stub { s.UpdateStubZones() go func() { recv := make(chan *etcd.Response) go client.Watch(msg.Path(config.Domain)+"/dns/stub/", 0, true, recv, nil) duration := 1 * time.Second for { select { case n := <-recv: if n != nil { s.UpdateStubZones() log.Printf("skydns: stubzone update") duration = 1 * time.Second // reset } else { // we can see an n == nil, probably when we can't connect to etcd. log.Printf("skydns: stubzone update failed, sleeping %s + ~3s", duration) time.Sleep(duration + (time.Duration(rand.Float32() * 3e9))) // Add some random. duration *= 2 if duration > 32*time.Second { duration = 32 * time.Second } } } } }() } stats.Collect() // Graphite server.Metrics() // Prometheus if err := s.Run(); err != nil { log.Fatalf("skydns: %s", err) } }