40 lines
764 B
Go
40 lines
764 B
Go
package dnsfilter
|
|
|
|
import (
|
|
"log"
|
|
|
|
"github.com/mholt/caddy"
|
|
)
|
|
|
|
var Reload = make(chan bool)
|
|
|
|
func hook(event caddy.EventName, info interface{}) error {
|
|
if event != caddy.InstanceStartupEvent {
|
|
return nil
|
|
}
|
|
|
|
// this should be an instance. ok to panic if not
|
|
instance := info.(*caddy.Instance)
|
|
|
|
go func() {
|
|
trace("Will wait for Reload channel")
|
|
|
|
for range Reload {
|
|
trace("Got message on Reload, restarting coredns")
|
|
corefile, err := caddy.LoadCaddyfile(instance.Caddyfile().ServerType())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
_, err = instance.Restart(corefile)
|
|
if err != nil {
|
|
log.Printf("Corefile changed but reload failed: %s", err)
|
|
continue
|
|
}
|
|
// hook will be called again from new instance
|
|
return
|
|
}
|
|
}()
|
|
|
|
return nil
|
|
}
|