diff options
author | 2017-09-14 09:36:06 +0100 | |
---|---|---|
committer | 2017-09-14 09:36:06 +0100 | |
commit | d8714e64e400ef873c2adc4d929a07d7890727b9 (patch) | |
tree | c9fa4c157e6af12eb1517654f8d23ca5d5619513 /plugin/kubernetes/handler.go | |
parent | b984aa45595dc95253b91191afe7d3ee29e71b48 (diff) | |
download | coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.tar.gz coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.tar.zst coredns-d8714e64e400ef873c2adc4d929a07d7890727b9.zip |
Remove the word middleware (#1067)
* Rename middleware to plugin
first pass; mostly used 'sed', few spots where I manually changed
text.
This still builds a coredns binary.
* fmt error
* Rename AddMiddleware to AddPlugin
* Readd AddMiddleware to remain backwards compat
Diffstat (limited to 'plugin/kubernetes/handler.go')
-rw-r--r-- | plugin/kubernetes/handler.go | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/plugin/kubernetes/handler.go b/plugin/kubernetes/handler.go new file mode 100644 index 000000000..9dc435111 --- /dev/null +++ b/plugin/kubernetes/handler.go @@ -0,0 +1,86 @@ +package kubernetes + +import ( + "github.com/coredns/coredns/plugin" + "github.com/coredns/coredns/plugin/pkg/dnsutil" + "github.com/coredns/coredns/request" + + "github.com/miekg/dns" + "golang.org/x/net/context" +) + +// ServeDNS implements the plugin.Handler interface. +func (k Kubernetes) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) { + state := request.Request{W: w, Req: r} + + m := new(dns.Msg) + m.SetReply(r) + m.Authoritative, m.RecursionAvailable, m.Compress = true, true, true + + zone := plugin.Zones(k.Zones).Matches(state.Name()) + if zone == "" { + return plugin.NextOrFailure(k.Name(), k.Next, ctx, w, r) + } + + state.Zone = zone + + var ( + records []dns.RR + extra []dns.RR + err error + ) + + switch state.Type() { + case "A": + records, err = plugin.A(&k, zone, state, nil, plugin.Options{}) + case "AAAA": + records, err = plugin.AAAA(&k, zone, state, nil, plugin.Options{}) + case "TXT": + records, err = plugin.TXT(&k, zone, state, plugin.Options{}) + case "CNAME": + records, err = plugin.CNAME(&k, zone, state, plugin.Options{}) + case "PTR": + records, err = plugin.PTR(&k, zone, state, plugin.Options{}) + case "MX": + records, extra, err = plugin.MX(&k, zone, state, plugin.Options{}) + case "SRV": + records, extra, err = plugin.SRV(&k, zone, state, plugin.Options{}) + case "SOA": + records, err = plugin.SOA(&k, zone, state, plugin.Options{}) + case "NS": + if state.Name() == zone { + records, extra, err = plugin.NS(&k, zone, state, plugin.Options{}) + break + } + fallthrough + default: + // Do a fake A lookup, so we can distinguish between NODATA and NXDOMAIN + _, err = plugin.A(&k, zone, state, nil, plugin.Options{}) + } + + if k.IsNameError(err) { + if k.Fallthrough { + return plugin.NextOrFailure(k.Name(), k.Next, ctx, w, r) + } + return plugin.BackendError(&k, zone, dns.RcodeNameError, state, nil /* err */, plugin.Options{}) + } + if err != nil { + return dns.RcodeServerFailure, err + } + + if len(records) == 0 { + return plugin.BackendError(&k, zone, dns.RcodeSuccess, state, nil, plugin.Options{}) + } + + m.Answer = append(m.Answer, records...) + m.Extra = append(m.Extra, extra...) + + m = dnsutil.Dedup(m) + state.SizeAndDo(m) + m, _ = state.Scrub(m) + w.WriteMsg(m) + return dns.RcodeSuccess, nil +} + +// Name implements the Handler interface. +func (k Kubernetes) Name() string { return "kubernetes" } |