diff options
author | 2016-11-10 16:24:06 -0500 | |
---|---|---|
committer | 2016-11-10 21:24:06 +0000 | |
commit | 96206cdbc38536e108ad553f0b17c5f7c9d856f8 (patch) | |
tree | 384092f55fa14a478c368338ae62d0a0ebc6741d /middleware | |
parent | 4036c3c31998de77cc1ba40d0f80207669917527 (diff) | |
download | coredns-96206cdbc38536e108ad553f0b17c5f7c9d856f8.tar.gz coredns-96206cdbc38536e108ad553f0b17c5f7c9d856f8.tar.zst coredns-96206cdbc38536e108ad553f0b17c5f7c9d856f8.zip |
Return NXDOMAIN when no items match query (#422)
* When no records match, reply with NXDOMAIN
* Implement in IsNameError
* case for unexposed namespace. k8s integation tests
* Fix imports order. Lower case of err strs.
Diffstat (limited to 'middleware')
-rw-r--r-- | middleware/kubernetes/kubernetes.go | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/middleware/kubernetes/kubernetes.go b/middleware/kubernetes/kubernetes.go index d5766377f..ca7067806 100644 --- a/middleware/kubernetes/kubernetes.go +++ b/middleware/kubernetes/kubernetes.go @@ -44,6 +44,9 @@ type Kubernetes struct { Selector *labels.Selector } +var noItemsErr = errors.New("no items found") +var nsUnexposedErr = errors.New("namespace is not exposed") + // Services implements the ServiceBackend interface. func (k *Kubernetes) Services(state request.Request, exact bool, opt middleware.Options) ([]msg.Service, []msg.Service, error) { s, e := k.Records(state.Name(), exact) @@ -67,9 +70,8 @@ func (k *Kubernetes) Lookup(state request.Request, name string, typ uint16) (*dn } // IsNameError implements the ServiceBackend interface. -// TODO(infoblox): implement! func (k *Kubernetes) IsNameError(err error) bool { - return false + return err == noItemsErr || err == nsUnexposedErr } // Debug implements the ServiceBackend interface. @@ -200,16 +202,16 @@ func (k *Kubernetes) Records(name string, exact bool) ([]msg.Service, error) { // Abort if the namespace does not contain a wildcard, and namespace is not published per CoreFile // Case where namespace contains a wildcard is handled in Get(...) method. if (!nsWildcard) && (len(k.Namespaces) > 0) && (!dnsstrings.StringInSlice(namespace, k.Namespaces)) { - return nil, nil + return nil, nsUnexposedErr } k8sItems, err := k.Get(namespace, nsWildcard, serviceName, serviceWildcard, typeName) if err != nil { return nil, err } - if k8sItems == nil { + if len(k8sItems) == 0 { // Did not find item in k8s - return nil, nil + return nil, noItemsErr } records := k.getRecordsForServiceItems(k8sItems, zone) |