mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-27 08:14:18 -04:00 
			
		
		
		
	Remove the code and remove the call in etcd and kubernetes handlers. This does mean we should not add dups in the first place, which means adding maps in backend_lookup to prevent dups from begin added. This should cut down on the allocations because dnsutil.Dedup is very expensive by converting everything to strings, we avoid doing that now.
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package kubernetes
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 
 | |
| 	"github.com/coredns/coredns/plugin"
 | |
| 	"github.com/coredns/coredns/request"
 | |
| 
 | |
| 	"github.com/miekg/dns"
 | |
| )
 | |
| 
 | |
| // ServeDNS implements the plugin.Handler interface.
 | |
| func (k Kubernetes) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
 | |
| 	opt := plugin.Options{}
 | |
| 	state := request.Request{W: w, Req: r, Context: ctx}
 | |
| 
 | |
| 	m := new(dns.Msg)
 | |
| 	m.SetReply(r)
 | |
| 	m.Authoritative, m.RecursionAvailable = 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.QType() {
 | |
| 	case dns.TypeA:
 | |
| 		records, err = plugin.A(&k, zone, state, nil, opt)
 | |
| 	case dns.TypeAAAA:
 | |
| 		records, err = plugin.AAAA(&k, zone, state, nil, opt)
 | |
| 	case dns.TypeTXT:
 | |
| 		records, err = plugin.TXT(&k, zone, state, opt)
 | |
| 	case dns.TypeCNAME:
 | |
| 		records, err = plugin.CNAME(&k, zone, state, opt)
 | |
| 	case dns.TypePTR:
 | |
| 		records, err = plugin.PTR(&k, zone, state, opt)
 | |
| 	case dns.TypeMX:
 | |
| 		records, extra, err = plugin.MX(&k, zone, state, opt)
 | |
| 	case dns.TypeSRV:
 | |
| 		records, extra, err = plugin.SRV(&k, zone, state, opt)
 | |
| 	case dns.TypeSOA:
 | |
| 		records, err = plugin.SOA(&k, zone, state, opt)
 | |
| 	case dns.TypeNS:
 | |
| 		if state.Name() == zone {
 | |
| 			records, extra, err = plugin.NS(&k, zone, state, opt)
 | |
| 			break
 | |
| 		}
 | |
| 		fallthrough
 | |
| 	case dns.TypeAXFR, dns.TypeIXFR:
 | |
| 		k.Transfer(ctx, state)
 | |
| 	default:
 | |
| 		// Do a fake A lookup, so we can distinguish between NODATA and NXDOMAIN
 | |
| 		_, err = plugin.A(&k, zone, state, nil, opt)
 | |
| 	}
 | |
| 
 | |
| 	if k.IsNameError(err) {
 | |
| 		if k.Fall.Through(state.Name()) {
 | |
| 			return plugin.NextOrFailure(k.Name(), k.Next, ctx, w, r)
 | |
| 		}
 | |
| 		return plugin.BackendError(&k, zone, dns.RcodeNameError, state, nil /* err */, opt)
 | |
| 	}
 | |
| 	if err != nil {
 | |
| 		return dns.RcodeServerFailure, err
 | |
| 	}
 | |
| 
 | |
| 	if len(records) == 0 {
 | |
| 		return plugin.BackendError(&k, zone, dns.RcodeSuccess, state, nil, opt)
 | |
| 	}
 | |
| 
 | |
| 	m.Answer = append(m.Answer, records...)
 | |
| 	m.Extra = append(m.Extra, extra...)
 | |
| 
 | |
| 	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" }
 |