diff options
author | 2017-08-19 14:03:03 +0100 | |
---|---|---|
committer | 2017-08-19 14:03:03 +0100 | |
commit | 7c343982a6dbefc0291e0b7ecaf64d8e32124bbc (patch) | |
tree | e83b3f7ad6ea7331a37d91f9a731774162b837c4 /middleware | |
parent | 627687b11fe56d3235a2f6a5055f1c6749752096 (diff) | |
download | coredns-7c343982a6dbefc0291e0b7ecaf64d8e32124bbc.tar.gz coredns-7c343982a6dbefc0291e0b7ecaf64d8e32124bbc.tar.zst coredns-7c343982a6dbefc0291e0b7ecaf64d8e32124bbc.zip |
backend.Records make it take request.Request (#943)
This is more general and aligns well with the other methods.
Also allows the kubernetes middleware to use it.
Fixes #940
Diffstat (limited to 'middleware')
-rw-r--r-- | middleware/backend.go | 2 | ||||
-rw-r--r-- | middleware/etcd/etcd.go | 6 | ||||
-rw-r--r-- | middleware/etcd/stub.go | 7 | ||||
-rw-r--r-- | middleware/kubernetes/kubernetes.go | 11 |
4 files changed, 14 insertions, 12 deletions
diff --git a/middleware/backend.go b/middleware/backend.go index 3ce7ab5fd..c626b36af 100644 --- a/middleware/backend.go +++ b/middleware/backend.go @@ -28,7 +28,7 @@ type ServiceBackend interface { // Returns _all_ services that matches a certain name. // Note: it does not implement a specific service. - Records(name string, exact bool) ([]msg.Service, error) + Records(state request.Request, exact bool) ([]msg.Service, error) } // Options are extra options that can be specified for a lookup. diff --git a/middleware/etcd/etcd.go b/middleware/etcd/etcd.go index 55ad03ba3..42334fac7 100644 --- a/middleware/etcd/etcd.go +++ b/middleware/etcd/etcd.go @@ -37,7 +37,7 @@ type Etcd struct { // Services implements the ServiceBackend interface. func (e *Etcd) Services(state request.Request, exact bool, opt middleware.Options) (services, debug []msg.Service, err error) { - services, err = e.Records(state.Name(), exact) + services, err = e.Records(state, exact) if err != nil { return } @@ -73,7 +73,9 @@ func (e *Etcd) Debug() string { // Records looks up records in etcd. If exact is true, it will lookup just this // name. This is used when find matches when completing SRV lookups for instance. -func (e *Etcd) Records(name string, exact bool) ([]msg.Service, error) { +func (e *Etcd) Records(state request.Request, exact bool) ([]msg.Service, error) { + name := state.Name() + path, star := msg.PathWithWildcard(name, e.PathPrefix) r, err := e.get(path, true) if err != nil { diff --git a/middleware/etcd/stub.go b/middleware/etcd/stub.go index ae75a88d1..52488f53a 100644 --- a/middleware/etcd/stub.go +++ b/middleware/etcd/stub.go @@ -9,6 +9,7 @@ import ( "github.com/coredns/coredns/middleware/etcd/msg" "github.com/coredns/coredns/middleware/proxy" + "github.com/coredns/coredns/request" "github.com/miekg/dns" ) @@ -29,7 +30,11 @@ func (e *Etcd) UpdateStubZones() { // Only the first zone configured on e is used for the lookup. func (e *Etcd) updateStubZones() { zone := e.Zones[0] - services, err := e.Records(stubDomain+"."+zone, false) + + fakeState := request.Request{W: nil, Req: new(dns.Msg)} + fakeState.Req.SetQuestion(stubDomain+"."+zone, dns.TypeA) + + services, err := e.Records(fakeState, false) if err != nil { return } diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go index 0ed71b6c0..8673dab30 100644 --- a/middleware/kubernetes/kubernetes.go +++ b/middleware/kubernetes/kubernetes.go @@ -136,7 +136,7 @@ func (k *Kubernetes) Services(state request.Request, exact bool, opt middleware. return []msg.Service{svc}, nil, nil } - s, e := k.Entries(state) + s, e := k.Records(state, false) // SRV for external services is not yet implemented, so remove those records. @@ -291,13 +291,8 @@ func (k *Kubernetes) InitKubeCache() (err error) { return err } -// Records is not implemented. -func (k *Kubernetes) Records(name string, exact bool) ([]msg.Service, error) { - return nil, fmt.Errorf("not implemented") -} - -// Entries looks up services in kubernetes. -func (k *Kubernetes) Entries(state request.Request) ([]msg.Service, error) { +// Records looks up services in kubernetes. +func (k *Kubernetes) Records(state request.Request, exact bool) ([]msg.Service, error) { r, e := k.parseRequest(state) if e != nil { return nil, e |