plugin/{kubernetes/etcd}: dynamic SOA (#1188)

Add a dynamic SOA record (at least the serial and minttl). This create
another interface that should be implemented by the backends.

For now default to returning epoch in as a uint32 (no change from
before).

Lower the minTTL returned to 30s (from 60s)
This commit is contained in:
Miek Gieben 2017-11-01 10:11:34 +00:00 committed by GitHub
parent fa2ae3fb43
commit 2c80551fdc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 48 additions and 7 deletions

View file

@ -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.

View file

@ -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"

17
plugin/etcd/xfr.go Normal file
View file

@ -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
}

17
plugin/kubernetes/xfr.go Normal file
View file

@ -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
}