mirror of
https://github.com/coredns/coredns.git
synced 2025-10-31 18:23:13 -04:00
more
This commit is contained in:
@@ -14,28 +14,14 @@ import (
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
|
||||
type (
|
||||
Etcd struct {
|
||||
Next middleware.Handler
|
||||
Zones []string
|
||||
Proxy proxy.Proxy
|
||||
client etcdc.KeysAPI
|
||||
ctx context.Context
|
||||
inflight *singleflight.Group
|
||||
PathPrefix string
|
||||
}
|
||||
)
|
||||
|
||||
func NewEtcd(client etcdc.KeysAPI, next middleware.Handler, zones []string) Etcd {
|
||||
return Etcd{
|
||||
Next: next,
|
||||
Zones: zones,
|
||||
Proxy: proxy.New([]string{"8.8.8.8:53"}),
|
||||
client: client,
|
||||
ctx: context.Background(),
|
||||
inflight: &singleflight.Group{},
|
||||
PathPrefix: "skydns", // TODO(miek): configurable
|
||||
}
|
||||
type Etcd struct {
|
||||
Next middleware.Handler
|
||||
Zones []string
|
||||
Proxy proxy.Proxy
|
||||
Client etcdc.KeysAPI
|
||||
Ctx context.Context
|
||||
Inflight *singleflight.Group
|
||||
PathPrefix string
|
||||
}
|
||||
|
||||
func (g Etcd) Records(name string, exact bool) ([]msg.Service, error) {
|
||||
@@ -57,8 +43,8 @@ func (g Etcd) Records(name string, exact bool) ([]msg.Service, error) {
|
||||
|
||||
// Get is a wrapper for client.Get that uses SingleInflight to suppress multiple outstanding queries.
|
||||
func (g Etcd) Get(path string, recursive bool) (*etcdc.Response, error) {
|
||||
resp, err := g.inflight.Do(path, func() (interface{}, error) {
|
||||
r, e := g.client.Get(g.ctx, path, &etcdc.GetOptions{Sort: false, Recursive: recursive})
|
||||
resp, err := g.Inflight.Do(path, func() (interface{}, error) {
|
||||
r, e := g.Client.Get(g.Ctx, path, &etcdc.GetOptions{Sort: false, Recursive: recursive})
|
||||
if e != nil {
|
||||
return nil, e
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ package etcd
|
||||
|
||||
import (
|
||||
"github.com/miekg/coredns/middleware"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
"golang.org/x/net/context"
|
||||
)
|
||||
@@ -35,6 +36,9 @@ func (e Etcd) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (i
|
||||
case "SRV":
|
||||
records, extra, err = e.SRV(zone, state)
|
||||
default:
|
||||
// For SOA and NS we might still want this
|
||||
// and use dns.<zones> as the name to put these
|
||||
// also for stub
|
||||
// rwrite and return
|
||||
// Nodata response
|
||||
// also catch other types, so that they return NODATA
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
package middleware
|
||||
|
||||
import "strings"
|
||||
import (
|
||||
"strings"
|
||||
|
||||
"github.com/miekg/dns"
|
||||
)
|
||||
|
||||
type Zones []string
|
||||
|
||||
@@ -11,6 +15,7 @@ func (z Zones) Matches(qname string) string {
|
||||
zone := ""
|
||||
// TODO(miek): use IsSubDomain here?
|
||||
for _, zname := range z {
|
||||
println(zname, qname)
|
||||
if strings.HasSuffix(qname, zname) {
|
||||
if len(zname) > len(zone) {
|
||||
zone = zname
|
||||
@@ -19,3 +24,11 @@ func (z Zones) Matches(qname string) string {
|
||||
}
|
||||
return zone
|
||||
}
|
||||
|
||||
// Fully qualify all zones in z
|
||||
func (z Zones) FullyQualify() {
|
||||
for i, _ := range z {
|
||||
z[i] = dns.Fqdn(z[i])
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user