mirror of
https://github.com/coredns/coredns.git
synced 2025-10-31 18:23:13 -04:00
Add etcd middleware
This middleware acts in the same way as SkyDNS. We might add options
to allow it to be behave different, but for now it will suffice.
A Corefile like:
.:1053 {
etcd miek.nl
proxy . 8.8.8.8:53
}
will perform lookup in etcd and proxy everything not miek.nl to Google
for further resolution.
The internal etcd forwarding *also* uses the proxy infrastructure,
meaning you get health check and such for (almost) free
This commit is contained in:
@@ -17,6 +17,7 @@ type ResponseRecorder struct {
|
||||
dns.ResponseWriter
|
||||
rcode int
|
||||
size int
|
||||
msg *dns.Msg
|
||||
start time.Time
|
||||
}
|
||||
|
||||
@@ -27,6 +28,7 @@ func NewResponseRecorder(w dns.ResponseWriter) *ResponseRecorder {
|
||||
return &ResponseRecorder{
|
||||
ResponseWriter: w,
|
||||
rcode: 0,
|
||||
msg: nil,
|
||||
start: time.Now(),
|
||||
}
|
||||
}
|
||||
@@ -36,6 +38,7 @@ func NewResponseRecorder(w dns.ResponseWriter) *ResponseRecorder {
|
||||
func (r *ResponseRecorder) WriteMsg(res *dns.Msg) error {
|
||||
r.rcode = res.Rcode
|
||||
r.size = res.Len()
|
||||
r.msg = res
|
||||
return r.ResponseWriter.WriteMsg(res)
|
||||
}
|
||||
|
||||
@@ -63,6 +66,11 @@ func (r *ResponseRecorder) Start() time.Time {
|
||||
return r.start
|
||||
}
|
||||
|
||||
// Reply returns the written message from the ResponseRecorder.
|
||||
func (r *ResponseRecorder) Reply() *dns.Msg {
|
||||
return r.msg
|
||||
}
|
||||
|
||||
// Hijack implements dns.Hijacker. It simply wraps the underlying
|
||||
// ResponseWriter's Hijack method if there is one, or returns an error.
|
||||
func (r *ResponseRecorder) Hijack() {
|
||||
|
||||
Reference in New Issue
Block a user