mirror of
https://github.com/coredns/coredns.git
synced 2025-11-10 14:02:16 -05:00
Remove debug queries (#1058)
* Remove debug from interface and methods * remove debug queries from etcd * remove debug queries from k8s - they were not used * And remove from mw/proxy-google as well * Remove debug query test
This commit is contained in:
@@ -28,7 +28,6 @@ etcd [ZONES...] {
|
||||
endpoint ENDPOINT...
|
||||
upstream ADDRESS...
|
||||
tls CERT KEY CACERT
|
||||
debug
|
||||
}
|
||||
~~~
|
||||
|
||||
@@ -46,8 +45,6 @@ etcd [ZONES...] {
|
||||
* a single argument that is the CA PEM file, if the server cert is not signed by a system CA and no client cert is needed
|
||||
* two arguments - path to cert PEM file, the path to private key PEM file - if the server certificate is signed by a system-installed CA and a client certificate is needed
|
||||
* three arguments - path to cert PEM file, path to client private key PEM file, path to CA PEM file - if the server certificate is not signed by a system-installed CA and client certificate is needed
|
||||
* `debug` allows for debug queries. Prefix the name with `o-o.debug.` to retrieve extra information in the
|
||||
additional section of the reply in the form of TXT records.
|
||||
|
||||
## Examples
|
||||
|
||||
@@ -110,44 +107,3 @@ Querying with dig:
|
||||
% dig @localhost -x 10.0.0.127 +short
|
||||
reverse.atoom.net.
|
||||
~~~
|
||||
|
||||
Or with *debug* queries enabled:
|
||||
|
||||
~~~
|
||||
% dig @localhost -p 1053 o-o.debug.127.0.0.10.in-addr.arpa. PTR
|
||||
|
||||
;; OPT PSEUDOSECTION:
|
||||
; EDNS: version: 0, flags:; udp: 4096
|
||||
;; QUESTION SECTION:
|
||||
;o-o.debug.127.0.0.10.in-addr.arpa. IN PTR
|
||||
|
||||
;; ANSWER SECTION:
|
||||
127.0.0.10.in-addr.arpa. 300 IN PTR reverse.atoom.net.
|
||||
|
||||
;; ADDITIONAL SECTION:
|
||||
127.0.0.10.in-addr.arpa. 300 CH TXT "reverse.atoom.net.:0(10,0,,false)[0,]"
|
||||
~~~
|
||||
|
||||
## Debug queries
|
||||
|
||||
When debug queries are enabled CoreDNS will return errors and etcd records encountered during the resolution
|
||||
process in the response. The general form looks like this:
|
||||
|
||||
skydns.test.skydns.dom.a. 0 CH TXT "127.0.0.1:0(10,0,,false)[0,]"
|
||||
|
||||
This shows the complete key as the owername, the rdata of the TXT record has:
|
||||
`host:port(priority,weight,txt content,mail)[targetstrip,group]`.
|
||||
|
||||
Errors when communicating with an upstream will be returned as: `host:0(0,0,error message,false)[0,]`.
|
||||
|
||||
An example:
|
||||
|
||||
www.example.org. 0 CH TXT "www.example.org.:0(0,0, IN A: unreachable backend,false)[0,]"
|
||||
|
||||
Signalling that an A record for www.example.org. was sought, but it failed with that error.
|
||||
|
||||
Any errors seen doing parsing will show up like this:
|
||||
|
||||
. 0 CH TXT "/skydns/local/skydns/r/a: invalid character '.' after object key:value pair"
|
||||
|
||||
which shows `a.r.skydns.local.` has a json encoding problem.
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
// +build etcd
|
||||
|
||||
package etcd
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/coredns/coredns/middleware/etcd/msg"
|
||||
"github.com/coredns/coredns/middleware/pkg/dnsrecorder"
|
||||
"github.com/coredns/coredns/middleware/test"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
func TestDebugLookup(t *testing.T) {
|
||||
etc := newEtcdMiddleware()
|
||||
etc.Debugging = true
|
||||
|
||||
for _, serv := range servicesDebug {
|
||||
set(t, etc, serv.Key, 0, serv)
|
||||
defer delete(t, etc, serv.Key)
|
||||
}
|
||||
|
||||
for _, tc := range dnsTestCasesDebug {
|
||||
m := tc.Msg()
|
||||
|
||||
rec := dnsrecorder.New(&test.ResponseWriter{})
|
||||
etc.ServeDNS(ctxt, rec, m)
|
||||
|
||||
resp := rec.Msg
|
||||
test.SortAndCheck(t, resp, tc)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDebugLookupFalse(t *testing.T) {
|
||||
etc := newEtcdMiddleware()
|
||||
|
||||
for _, serv := range servicesDebug {
|
||||
set(t, etc, serv.Key, 0, serv)
|
||||
defer delete(t, etc, serv.Key)
|
||||
}
|
||||
for _, tc := range dnsTestCasesDebugFalse {
|
||||
m := tc.Msg()
|
||||
|
||||
rec := dnsrecorder.New(&test.ResponseWriter{})
|
||||
etc.ServeDNS(ctxt, rec, m)
|
||||
|
||||
resp := rec.Msg
|
||||
test.SortAndCheck(t, resp, tc)
|
||||
}
|
||||
}
|
||||
|
||||
var servicesDebug = []*msg.Service{
|
||||
{Host: "127.0.0.1", Key: "a.dom.skydns.test."},
|
||||
{Host: "127.0.0.2", Key: "b.sub.dom.skydns.test."},
|
||||
}
|
||||
|
||||
var dnsTestCasesDebug = []test.Case{
|
||||
{
|
||||
Qname: "o-o.debug.dom.skydns.test.", Qtype: dns.TypeA,
|
||||
Answer: []dns.RR{
|
||||
test.A("dom.skydns.test. 300 IN A 127.0.0.1"),
|
||||
test.A("dom.skydns.test. 300 IN A 127.0.0.2"),
|
||||
},
|
||||
Extra: []dns.RR{
|
||||
test.TXT(`a.dom.skydns.test. 300 CH TXT "127.0.0.1:0(10,0,,false)[0,]"`),
|
||||
test.TXT(`b.sub.dom.skydns.test. 300 CH TXT "127.0.0.2:0(10,0,,false)[0,]"`),
|
||||
},
|
||||
},
|
||||
{
|
||||
Qname: "o-o.debug.dom.skydns.test.", Qtype: dns.TypeTXT,
|
||||
Ns: []dns.RR{
|
||||
test.SOA("skydns.test. 300 IN SOA ns.dns.skydns.test. hostmaster.skydns.test. 1463943291 7200 1800 86400 60"),
|
||||
},
|
||||
Extra: []dns.RR{
|
||||
test.TXT(`a.dom.skydns.test. 300 CH TXT "127.0.0.1:0(10,0,,false)[0,]"`),
|
||||
test.TXT(`b.sub.dom.skydns.test. 300 CH TXT "127.0.0.2:0(10,0,,false)[0,]"`),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var dnsTestCasesDebugFalse = []test.Case{
|
||||
{
|
||||
Qname: "o-o.debug.dom.skydns.test.", Qtype: dns.TypeA,
|
||||
Rcode: dns.RcodeNameError,
|
||||
Ns: []dns.RR{
|
||||
test.SOA("skydns.test. 300 IN SOA ns.dns.skydns.test. hostmaster.skydns.test. 1463943291 7200 1800 86400 60"),
|
||||
},
|
||||
},
|
||||
{
|
||||
Qname: "o-o.debug.dom.skydns.test.", Qtype: dns.TypeTXT,
|
||||
Rcode: dns.RcodeNameError,
|
||||
Ns: []dns.RR{
|
||||
test.SOA("skydns.test. 300 IN SOA ns.dns.skydns.test. hostmaster.skydns.test. 1463943291 7200 1800 86400 60"),
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -30,26 +30,23 @@ type Etcd struct {
|
||||
Ctx context.Context
|
||||
Inflight *singleflight.Group
|
||||
Stubmap *map[string]proxy.Proxy // list of proxies for stub resolving.
|
||||
Debugging bool // Do we allow debug queries.
|
||||
|
||||
endpoints []string // Stored here as well, to aid in testing.
|
||||
}
|
||||
|
||||
// Services implements the ServiceBackend interface.
|
||||
func (e *Etcd) Services(state request.Request, exact bool, opt middleware.Options) (services, debug []msg.Service, err error) {
|
||||
func (e *Etcd) Services(state request.Request, exact bool, opt middleware.Options) (services []msg.Service, err error) {
|
||||
services, err = e.Records(state, exact)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if opt.Debug != "" {
|
||||
debug = services
|
||||
}
|
||||
|
||||
services = msg.Group(services)
|
||||
return
|
||||
}
|
||||
|
||||
// Reverse implements the ServiceBackend interface.
|
||||
func (e *Etcd) Reverse(state request.Request, exact bool, opt middleware.Options) (services, debug []msg.Service, err error) {
|
||||
func (e *Etcd) Reverse(state request.Request, exact bool, opt middleware.Options) (services []msg.Service, err error) {
|
||||
return e.Services(state, exact, opt)
|
||||
}
|
||||
|
||||
@@ -66,11 +63,6 @@ func (e *Etcd) IsNameError(err error) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
// Debug implements the ServiceBackend interface.
|
||||
func (e *Etcd) Debug() string {
|
||||
return e.PathPrefix
|
||||
}
|
||||
|
||||
// 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(state request.Request, exact bool) ([]msg.Service, error) {
|
||||
|
||||
@@ -2,8 +2,6 @@ package etcd
|
||||
|
||||
import (
|
||||
"github.com/coredns/coredns/middleware"
|
||||
"github.com/coredns/coredns/middleware/etcd/msg"
|
||||
"github.com/coredns/coredns/middleware/pkg/debug"
|
||||
"github.com/coredns/coredns/middleware/pkg/dnsutil"
|
||||
"github.com/coredns/coredns/request"
|
||||
|
||||
@@ -17,13 +15,6 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
|
||||
state := request.Request{W: w, Req: r}
|
||||
|
||||
name := state.Name()
|
||||
if e.Debugging {
|
||||
if bug := debug.IsDebug(name); bug != "" {
|
||||
opt.Debug = r.Question[0].Name
|
||||
state.Clear()
|
||||
state.Req.Question[0].Name = bug
|
||||
}
|
||||
}
|
||||
|
||||
// We need to check stubzones first, because we may get a request for a zone we
|
||||
// are not auth. for *but* do have a stubzone forward for. If we do the stubzone
|
||||
@@ -39,49 +30,39 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
|
||||
|
||||
zone := middleware.Zones(e.Zones).Matches(state.Name())
|
||||
if zone == "" {
|
||||
if opt.Debug != "" {
|
||||
r.Question[0].Name = opt.Debug
|
||||
}
|
||||
return middleware.NextOrFailure(e.Name(), e.Next, ctx, w, r)
|
||||
}
|
||||
|
||||
var (
|
||||
records, extra []dns.RR
|
||||
debug []msg.Service
|
||||
err error
|
||||
)
|
||||
switch state.Type() {
|
||||
case "A":
|
||||
records, debug, err = middleware.A(e, zone, state, nil, opt)
|
||||
records, err = middleware.A(e, zone, state, nil, opt)
|
||||
case "AAAA":
|
||||
records, debug, err = middleware.AAAA(e, zone, state, nil, opt)
|
||||
records, err = middleware.AAAA(e, zone, state, nil, opt)
|
||||
case "TXT":
|
||||
records, debug, err = middleware.TXT(e, zone, state, opt)
|
||||
records, err = middleware.TXT(e, zone, state, opt)
|
||||
case "CNAME":
|
||||
records, debug, err = middleware.CNAME(e, zone, state, opt)
|
||||
records, err = middleware.CNAME(e, zone, state, opt)
|
||||
case "PTR":
|
||||
records, debug, err = middleware.PTR(e, zone, state, opt)
|
||||
records, err = middleware.PTR(e, zone, state, opt)
|
||||
case "MX":
|
||||
records, extra, debug, err = middleware.MX(e, zone, state, opt)
|
||||
records, extra, err = middleware.MX(e, zone, state, opt)
|
||||
case "SRV":
|
||||
records, extra, debug, err = middleware.SRV(e, zone, state, opt)
|
||||
records, extra, err = middleware.SRV(e, zone, state, opt)
|
||||
case "SOA":
|
||||
records, debug, err = middleware.SOA(e, zone, state, opt)
|
||||
records, err = middleware.SOA(e, zone, state, opt)
|
||||
case "NS":
|
||||
if state.Name() == zone {
|
||||
records, extra, debug, err = middleware.NS(e, zone, state, opt)
|
||||
records, extra, err = middleware.NS(e, zone, state, opt)
|
||||
break
|
||||
}
|
||||
fallthrough
|
||||
default:
|
||||
// Do a fake A lookup, so we can distinguish between NODATA and NXDOMAIN
|
||||
_, debug, err = middleware.A(e, zone, state, nil, opt)
|
||||
}
|
||||
|
||||
if opt.Debug != "" {
|
||||
// Substitute this name with the original when we return the request.
|
||||
state.Clear()
|
||||
state.Req.Question[0].Name = opt.Debug
|
||||
_, err = middleware.A(e, zone, state, nil, opt)
|
||||
}
|
||||
|
||||
if e.IsNameError(err) {
|
||||
@@ -89,14 +70,14 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
|
||||
return middleware.NextOrFailure(e.Name(), e.Next, ctx, w, r)
|
||||
}
|
||||
// Make err nil when returning here, so we don't log spam for NXDOMAIN.
|
||||
return middleware.BackendError(e, zone, dns.RcodeNameError, state, debug, nil /* err */, opt)
|
||||
return middleware.BackendError(e, zone, dns.RcodeNameError, state, nil /* err */, opt)
|
||||
}
|
||||
if err != nil {
|
||||
return middleware.BackendError(e, zone, dns.RcodeServerFailure, state, debug, err, opt)
|
||||
return middleware.BackendError(e, zone, dns.RcodeServerFailure, state, err, opt)
|
||||
}
|
||||
|
||||
if len(records) == 0 {
|
||||
return middleware.BackendError(e, zone, dns.RcodeSuccess, state, debug, err, opt)
|
||||
return middleware.BackendError(e, zone, dns.RcodeSuccess, state, err, opt)
|
||||
}
|
||||
|
||||
m := new(dns.Msg)
|
||||
@@ -104,9 +85,6 @@ func (e *Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (
|
||||
m.Authoritative, m.RecursionAvailable, m.Compress = true, true, true
|
||||
m.Answer = append(m.Answer, records...)
|
||||
m.Extra = append(m.Extra, extra...)
|
||||
if opt.Debug != "" {
|
||||
m.Extra = append(m.Extra, middleware.ServicesToTxt(debug)...)
|
||||
}
|
||||
|
||||
m = dnsutil.Dedup(m)
|
||||
state.SizeAndDo(m)
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
// +build etcd
|
||||
|
||||
package etcd
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/coredns/coredns/middleware/etcd/msg"
|
||||
"github.com/coredns/coredns/middleware/pkg/dnsrecorder"
|
||||
"github.com/coredns/coredns/middleware/proxy"
|
||||
"github.com/coredns/coredns/middleware/test"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
func TestProxyLookupFailDebug(t *testing.T) {
|
||||
etc := newEtcdMiddleware()
|
||||
etc.Proxy = proxy.NewLookup([]string{"127.0.0.1:154"})
|
||||
etc.Debugging = true
|
||||
|
||||
for _, serv := range servicesProxy {
|
||||
set(t, etc, serv.Key, 0, serv)
|
||||
defer delete(t, etc, serv.Key)
|
||||
}
|
||||
|
||||
for _, tc := range dnsTestCasesProxy {
|
||||
m := tc.Msg()
|
||||
|
||||
rec := dnsrecorder.New(&test.ResponseWriter{})
|
||||
_, err := etc.ServeDNS(ctxt, rec, m)
|
||||
if err != nil {
|
||||
t.Errorf("expected no error, got %v\n", err)
|
||||
continue
|
||||
}
|
||||
|
||||
resp := rec.Msg
|
||||
test.SortAndCheck(t, resp, tc)
|
||||
}
|
||||
}
|
||||
|
||||
var servicesProxy = []*msg.Service{
|
||||
{Host: "www.example.org", Key: "a.dom.skydns.test."},
|
||||
}
|
||||
|
||||
var dnsTestCasesProxy = []test.Case{
|
||||
{
|
||||
Qname: "o-o.debug.dom.skydns.test.", Qtype: dns.TypeSRV,
|
||||
Answer: []dns.RR{
|
||||
test.SRV("dom.skydns.test. 300 IN SRV 10 100 0 www.example.org."),
|
||||
},
|
||||
Extra: []dns.RR{
|
||||
test.TXT("a.dom.skydns.test. 300 CH TXT \"www.example.org:0(10,0,,false)[0,]\""),
|
||||
test.TXT("www.example.org. 0 CH TXT \"www.example.org.:0(0,0, IN A: unreachable backend: no upstream host,false)[0,]\""),
|
||||
test.TXT("www.example.org. 0 CH TXT \"www.example.org.:0(0,0, IN AAAA: unreachable backend: no upstream host,false)[0,]\""),
|
||||
},
|
||||
},
|
||||
}
|
||||
@@ -77,7 +77,7 @@ func etcdParse(c *caddy.Controller) (*Etcd, bool, error) {
|
||||
case "fallthrough":
|
||||
etc.Fallthrough = true
|
||||
case "debug":
|
||||
etc.Debugging = true
|
||||
/* it is a noop now */
|
||||
case "path":
|
||||
if !c.NextArg() {
|
||||
return &Etcd{}, false, c.ArgErr()
|
||||
|
||||
Reference in New Issue
Block a user