diff options
author | 2018-10-15 12:43:03 -0400 | |
---|---|---|
committer | 2018-10-15 12:43:03 -0400 | |
commit | 6beeabc47ccebd77de2a41192e1cca3a882127a3 (patch) | |
tree | b77b0a4492edf2786b52bdaf5604047b9602ceba /plugin/federation/federation.go | |
parent | 1847ef6bd31ecd38fe5d19e54c47a812cb2ed303 (diff) | |
download | coredns-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.go | 16 |
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 } |