aboutsummaryrefslogtreecommitdiff
path: root/middleware/kubernetes/handler.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-08-07 14:45:30 -0700
committerGravatar GitHub <noreply@github.com> 2017-08-07 14:45:30 -0700
commit0bc1ff74086152ceed1b7b3a4ef1ea26ce26f787 (patch)
treed629844b1e7de3229447cd6b0b2f0259cadd7eef /middleware/kubernetes/handler.go
parente1c1521ad564dbae4106fba7c8cf29d9bb62778c (diff)
downloadcoredns-0bc1ff74086152ceed1b7b3a4ef1ea26ce26f787.tar.gz
coredns-0bc1ff74086152ceed1b7b3a4ef1ea26ce26f787.tar.zst
coredns-0bc1ff74086152ceed1b7b3a4ef1ea26ce26f787.zip
mw/kubernetes: autopath refactors (#850)
Factor out as much of autopath into a subpackage as possible right now. apw.Sent is not needed, we should see this from the rcode returned by the middleware. See #852 on why this was needed. Disable the tests for now as to not break the main build.
Diffstat (limited to 'middleware/kubernetes/handler.go')
-rw-r--r--middleware/kubernetes/handler.go11
1 files changed, 7 insertions, 4 deletions
diff --git a/middleware/kubernetes/handler.go b/middleware/kubernetes/handler.go
index 3ef4f7a37..cb72e09eb 100644
--- a/middleware/kubernetes/handler.go
+++ b/middleware/kubernetes/handler.go
@@ -39,13 +39,15 @@ func (k Kubernetes) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.M
// Set the zone to this specific request.
zone = state.Name()
}
+
records, extra, _, err := k.routeRequest(zone, state)
// Check for Autopath search eligibility
if (k.autoPath != nil) && k.IsNameError(err) && (state.QType() == dns.TypeA || state.QType() == dns.TypeAAAA) {
p := k.findPodWithIP(state.IP())
+
for p != nil {
- name, path, ok := splitSearch(zone, state.QName(), p.Namespace)
+ name, path, ok := autopath.SplitSearch(zone, state.QName(), p.Namespace)
if !ok {
break
}
@@ -73,7 +75,8 @@ func (k Kubernetes) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.M
for _, hostsearch := range k.autoPath.HostSearchPath {
newstate := state.NewWithQuestion(strings.Join([]string{name, hostsearch}, "."), state.QType())
rcode, nextErr := middleware.NextOrFailure(k.Name(), k.Next, ctx, apw, newstate.Req)
- if apw.Sent {
+
+ if middleware.ClientWrite(rcode) || rcode == dns.RcodeNameError {
return rcode, nextErr
}
}
@@ -91,11 +94,11 @@ func (k Kubernetes) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.M
newstate = state.NewWithQuestion(strings.Join([]string{name, "."}, ""), state.QType())
r = newstate.Req
rcode, nextErr := middleware.NextOrFailure(k.Name(), k.Next, ctx, apw, r)
- if !apw.Sent && nextErr == nil {
+ if !(middleware.ClientWrite(rcode) || rcode == dns.RcodeNameError) && nextErr == nil {
r = dnsutil.Dedup(r)
state.SizeAndDo(r)
r, _ = state.Scrub(r)
- apw.ForceWriteMsg(r)
+ apw.WriteMsg(r)
}
return rcode, nextErr
}