mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 08:14:18 -04:00
plugin/k8s_external: Persist tc bit from lookup to client response (#4716)
* persist reponse tc bit from lookup to client Signed-off-by: Chris O'Haver <cohaver@infoblox.com>
This commit is contained in:
@@ -99,9 +99,9 @@ func (e *External) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Ms
|
||||
|
||||
switch state.QType() {
|
||||
case dns.TypeA:
|
||||
m.Answer = e.a(ctx, svc, state)
|
||||
m.Answer, m.Truncated = e.a(ctx, svc, state)
|
||||
case dns.TypeAAAA:
|
||||
m.Answer = e.aaaa(ctx, svc, state)
|
||||
m.Answer, m.Truncated = e.aaaa(ctx, svc, state)
|
||||
case dns.TypeSRV:
|
||||
m.Answer, m.Extra = e.srv(ctx, svc, state)
|
||||
default:
|
||||
|
||||
@@ -10,7 +10,7 @@ import (
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
func (e *External) a(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR) {
|
||||
func (e *External) a(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR, truncated bool) {
|
||||
dup := make(map[string]struct{})
|
||||
|
||||
for _, s := range services {
|
||||
@@ -23,6 +23,9 @@ func (e *External) a(ctx context.Context, services []msg.Service, state request.
|
||||
records = append(records, rr)
|
||||
if resp, err := e.upstream.Lookup(ctx, state, dns.Fqdn(s.Host), dns.TypeA); err == nil {
|
||||
records = append(records, resp.Answer...)
|
||||
if resp.Truncated {
|
||||
truncated = true
|
||||
}
|
||||
}
|
||||
|
||||
case dns.TypeA:
|
||||
@@ -37,10 +40,10 @@ func (e *External) a(ctx context.Context, services []msg.Service, state request.
|
||||
// nada
|
||||
}
|
||||
}
|
||||
return records
|
||||
return records, truncated
|
||||
}
|
||||
|
||||
func (e *External) aaaa(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR) {
|
||||
func (e *External) aaaa(ctx context.Context, services []msg.Service, state request.Request) (records []dns.RR, truncated bool) {
|
||||
dup := make(map[string]struct{})
|
||||
|
||||
for _, s := range services {
|
||||
@@ -53,6 +56,9 @@ func (e *External) aaaa(ctx context.Context, services []msg.Service, state reque
|
||||
records = append(records, rr)
|
||||
if resp, err := e.upstream.Lookup(ctx, state, dns.Fqdn(s.Host), dns.TypeAAAA); err == nil {
|
||||
records = append(records, resp.Answer...)
|
||||
if resp.Truncated {
|
||||
truncated = true
|
||||
}
|
||||
}
|
||||
|
||||
case dns.TypeA:
|
||||
@@ -67,7 +73,7 @@ func (e *External) aaaa(ctx context.Context, services []msg.Service, state reque
|
||||
}
|
||||
}
|
||||
}
|
||||
return records
|
||||
return records, truncated
|
||||
}
|
||||
|
||||
func (e *External) srv(ctx context.Context, services []msg.Service, state request.Request) (records, extra []dns.RR) {
|
||||
|
||||
@@ -55,11 +55,11 @@ func (e *External) Transfer(zone string, serial uint32) (<-chan []dns.RR, error)
|
||||
if svcs[i].TargetStrip == 0 {
|
||||
// Add Service A/AAAA records
|
||||
s := request.Request{Req: &dns.Msg{Question: []dns.Question{{Name: name}}}}
|
||||
as := e.a(ctx, []msg.Service{svcs[i]}, s)
|
||||
as, _ := e.a(ctx, []msg.Service{svcs[i]}, s)
|
||||
if len(as) > 0 {
|
||||
ch <- as
|
||||
}
|
||||
aaaas := e.aaaa(ctx, []msg.Service{svcs[i]}, s)
|
||||
aaaas, _ := e.aaaa(ctx, []msg.Service{svcs[i]}, s)
|
||||
if len(aaaas) > 0 {
|
||||
ch <- aaaas
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user