aboutsummaryrefslogtreecommitdiff
path: root/core/setup/etcd.go
diff options
context:
space:
mode:
Diffstat (limited to 'core/setup/etcd.go')
-rw-r--r--core/setup/etcd.go37
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) {