diff options
Diffstat (limited to 'plugin/proxy/setup.go')
-rw-r--r-- | plugin/proxy/setup.go | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/plugin/proxy/setup.go b/plugin/proxy/setup.go new file mode 100644 index 000000000..bbe65c35d --- /dev/null +++ b/plugin/proxy/setup.go @@ -0,0 +1,46 @@ +package proxy + +import ( + "github.com/coredns/coredns/core/dnsserver" + "github.com/coredns/coredns/plugin" + + "github.com/mholt/caddy" +) + +func init() { + caddy.RegisterPlugin("proxy", caddy.Plugin{ + ServerType: "dns", + Action: setup, + }) +} + +func setup(c *caddy.Controller) error { + upstreams, err := NewStaticUpstreams(&c.Dispenser) + if err != nil { + return plugin.Error("proxy", err) + } + + t := dnsserver.GetConfig(c).Handler("trace") + P := &Proxy{Trace: t} + dnsserver.GetConfig(c).AddPlugin(func(next plugin.Handler) plugin.Handler { + P.Next = next + P.Upstreams = &upstreams + return P + }) + + c.OnStartup(OnStartupMetrics) + + for i := range upstreams { + u := upstreams[i] + c.OnStartup(func() error { + return u.Exchanger().OnStartup(P) + }) + c.OnShutdown(func() error { + return u.Exchanger().OnShutdown(P) + }) + // Register shutdown handlers. + c.OnShutdown(u.Stop) + } + + return nil +} |