aboutsummaryrefslogtreecommitdiff
path: root/plugin/federation/federation.go
diff options
context:
space:
mode:
authorGravatar Chris O'Haver <cohaver@infoblox.com> 2018-10-15 12:43:03 -0400
committerGravatar Francois Tur <ftur@infoblox.com> 2018-10-15 12:43:03 -0400
commit6beeabc47ccebd77de2a41192e1cca3a882127a3 (patch)
treeb77b0a4492edf2786b52bdaf5604047b9602ceba /plugin/federation/federation.go
parent1847ef6bd31ecd38fe5d19e54c47a812cb2ed303 (diff)
downloadcoredns-6beeabc47ccebd77de2a41192e1cca3a882127a3.tar.gz
coredns-6beeabc47ccebd77de2a41192e1cca3a882127a3.tar.zst
coredns-6beeabc47ccebd77de2a41192e1cca3a882127a3.zip
plugin/federation: Add upstream option to federation (#2177)
* add upstream * add upstream * debug ci * debug ci * set context * update readme * update readme * remove empty if
Diffstat (limited to 'plugin/federation/federation.go')
-rw-r--r--plugin/federation/federation.go16
1 files changed, 13 insertions, 3 deletions
diff --git a/plugin/federation/federation.go b/plugin/federation/federation.go
index 779636b6a..daf470891 100644
--- a/plugin/federation/federation.go
+++ b/plugin/federation/federation.go
@@ -20,6 +20,7 @@ import (
"github.com/coredns/coredns/plugin/etcd/msg"
"github.com/coredns/coredns/plugin/pkg/dnsutil"
"github.com/coredns/coredns/plugin/pkg/nonwriter"
+ "github.com/coredns/coredns/plugin/pkg/upstream"
"github.com/coredns/coredns/request"
"github.com/miekg/dns"
@@ -27,8 +28,9 @@ import (
// Federation contains the name to zone mapping used for federation in kubernetes.
type Federation struct {
- f map[string]string
- zones []string
+ f map[string]string
+ zones []string
+ Upstream *upstream.Upstream
Next plugin.Handler
Federations Func
@@ -49,7 +51,8 @@ func (f *Federation) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.
return plugin.NextOrFailure(f.Name(), f.Next, ctx, w, r)
}
- state := request.Request{W: w, Req: r}
+ state := request.Request{W: w, Req: r, Context: ctx}
+
zone := plugin.Zones(f.zones).Matches(state.Name())
if zone == "" {
return plugin.NextOrFailure(f.Name(), f.Next, ctx, w, r)
@@ -105,6 +108,13 @@ func (f *Federation) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.
m.Answer = []dns.RR{service.NewCNAME(state.QName(), service.Host)}
+ if f.Upstream != nil {
+ aRecord, err := f.Upstream.Lookup(state, service.Host, state.QType())
+ if err == nil && aRecord != nil && len(aRecord.Answer) > 0 {
+ m.Answer = append(m.Answer, aRecord.Answer...)
+ }
+ }
+
w.WriteMsg(m)
return dns.RcodeSuccess, nil
}