// ListenAndServe starts a DNS server that exposes services and values stored in etcd (if etcdclient // is not nil). It will block until the server exits. func (s *Server) ListenAndServe() error { resolver := NewServiceResolver(s.Config, s.Services, s.Endpoints, openshiftFallback) resolvers := server.FirstBackend{resolver} if len(s.MetricsName) > 0 { server.RegisterMetrics(s.MetricsName, "") } dns := server.New(resolvers, s.Config) if s.Stop != nil { defer close(s.Stop) } return dns.Run() }
// ListenAndServe starts a DNS server that exposes services and values stored in etcd (if etcdclient // is not nil). It will block until the server exits. // TODO: hoist the service accessor out of this package so it can be reused. func ListenAndServe(config *server.Config, client *client.Client, etcdclient *etcd.Client) error { stop := make(chan struct{}) accessor := NewCachedServiceAccessor(client, stop) resolver := NewServiceResolver(config, accessor, client, openshiftFallback) resolvers := server.FirstBackend{resolver} if etcdclient != nil { resolvers = append(resolvers, backendetcd.NewBackend(etcdclient, &backendetcd.Config{ Ttl: config.Ttl, Priority: config.Priority, })) } server.RegisterMetrics("", "") s := server.New(resolvers, config) defer close(stop) return s.Run() }