diff options
Diffstat (limited to 'core/setup/etcd.go')
-rw-r--r-- | core/setup/etcd.go | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/core/setup/etcd.go b/core/setup/etcd.go index 68e150392..1423e71aa 100644 --- a/core/setup/etcd.go +++ b/core/setup/etcd.go @@ -10,38 +10,53 @@ import ( "github.com/miekg/coredns/middleware" "github.com/miekg/coredns/middleware/etcd" + "github.com/miekg/coredns/middleware/etcd/singleflight" + "github.com/miekg/coredns/middleware/proxy" etcdc "github.com/coreos/etcd/client" + "golang.org/x/net/context" ) const defaultEndpoint = "http://127.0.0.1:2379" // Etcd sets up the etcd middleware. func Etcd(c *Controller) (middleware.Middleware, error) { - client, err := etcdParse(c) + etcd, err := etcdParse(c) if err != nil { return nil, err } return func(next middleware.Handler) middleware.Handler { - return etcd.NewEtcd(client, next, c.ServerBlockHosts) + etcd.Next = next + return etcd }, nil } -func etcdParse(c *Controller) (etcdc.KeysAPI, error) { +func etcdParse(c *Controller) (etcd.Etcd, error) { + etc := etcd.Etcd{ + // make stuff configurable + Proxy: proxy.New([]string{"8.8.8.8:53"}), + PathPrefix: "skydns", + Ctx: context.Background(), + Inflight: &singleflight.Group{}, + } for c.Next() { if c.Val() == "etcd" { - // etcd [address...] - if !c.NextArg() { - // TODO(certs) and friends, this is client side - client, err := newEtcdClient([]string{defaultEndpoint}, "", "", "") - return client, err + // etcd [origin...] + client, err := newEtcdClient([]string{defaultEndpoint}, "", "", "") + if err != nil { + return etcd.Etcd{}, err + } + etc.Client = client + etc.Zones = c.RemainingArgs() + if len(etc.Zones) == 0 { + etc.Zones = c.ServerBlockHosts } - client, err := newEtcdClient(c.RemainingArgs(), "", "", "") - return client, err + middleware.Zones(etc.Zones).FullyQualify() + return etc, nil } } - return nil, nil + return etcd.Etcd{}, nil } func newEtcdClient(endpoints []string, tlsCert, tlsKey, tlsCACert string) (etcdc.KeysAPI, error) { |