aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugin/backend.go11
-rw-r--r--plugin/backend_lookup.go10
-rw-r--r--plugin/etcd/xfr.go17
-rw-r--r--plugin/kubernetes/xfr.go17
4 files changed, 48 insertions, 7 deletions
diff --git a/plugin/backend.go b/plugin/backend.go
index b520ce390..7b5b2f467 100644
--- a/plugin/backend.go
+++ b/plugin/backend.go
@@ -26,6 +26,17 @@ type ServiceBackend interface {
// IsNameError return true if err indicated a record not found condition
IsNameError(err error) bool
+
+ Transferer
+}
+
+// Transferer defines an interface for backends that provide AXFR of all records.
+type Transferer interface {
+ // Serial returns a SOA serial number to construct a SOA record.
+ Serial(state request.Request) uint32
+
+ // MinTTL returns the minimum TTL to be used in the SOA record.
+ MinTTL(state request.Request) uint32
}
// Options are extra options that can be specified for a lookup.
diff --git a/plugin/backend_lookup.go b/plugin/backend_lookup.go
index f04b397b2..9112b73aa 100644
--- a/plugin/backend_lookup.go
+++ b/plugin/backend_lookup.go
@@ -4,7 +4,6 @@ import (
"fmt"
"math"
"net"
- "time"
"github.com/coredns/coredns/plugin/etcd/msg"
"github.com/coredns/coredns/plugin/pkg/dnsutil"
@@ -371,11 +370,11 @@ func SOA(b ServiceBackend, zone string, state request.Request, opt Options) ([]d
soa := &dns.SOA{Hdr: header,
Mbox: Mbox,
Ns: Ns,
- Serial: uint32(time.Now().Unix()),
+ Serial: b.Serial(state),
Refresh: 7200,
Retry: 1800,
Expire: 86400,
- Minttl: minTTL,
+ Minttl: b.MinTTL(state),
}
return []dns.RR{soa}, nil
}
@@ -404,7 +403,4 @@ func newAddress(s msg.Service, name string, ip net.IP, what uint16) dns.RR {
return &dns.AAAA{Hdr: hdr, AAAA: ip}
}
-const (
- minTTL = 60
- hostmaster = "hostmaster"
-)
+const hostmaster = "hostmaster"
diff --git a/plugin/etcd/xfr.go b/plugin/etcd/xfr.go
new file mode 100644
index 000000000..43a734cf9
--- /dev/null
+++ b/plugin/etcd/xfr.go
@@ -0,0 +1,17 @@
+package etcd
+
+import (
+ "time"
+
+ "github.com/coredns/coredns/request"
+)
+
+// Serial implements the Transferer interface.
+func (e *Etcd) Serial(state request.Request) uint32 {
+ return uint32(time.Now().Unix())
+}
+
+// MinTTL implements the Transferer interface.
+func (e *Etcd) MinTTL(state request.Request) uint32 {
+ return 30
+}
diff --git a/plugin/kubernetes/xfr.go b/plugin/kubernetes/xfr.go
new file mode 100644
index 000000000..7197a1fd5
--- /dev/null
+++ b/plugin/kubernetes/xfr.go
@@ -0,0 +1,17 @@
+package kubernetes
+
+import (
+ "time"
+
+ "github.com/coredns/coredns/request"
+)
+
+// Serial implements the Transferer interface.
+func (e *Kubernetes) Serial(state request.Request) uint32 {
+ return uint32(time.Now().Unix())
+}
+
+// MinTTL implements the Transferer interface.
+func (e *Kubernetes) MinTTL(state request.Request) uint32 {
+ return 30
+}