Startup notification (#250)
Stop the caddy message and start our own init notifications. Log the version of CoreDNS when starting up. Fix all middleware's setup functions so that return the error prefixed with *which* middleware was failing; leads to better debuggable errors when starting up.
This commit is contained in:
parent
5216ab6b58
commit
2dd8a687b3
19 changed files with 82 additions and 34 deletions
|
@ -22,3 +22,6 @@ import (
|
||||||
_ "github.com/miekg/coredns/middleware/rewrite"
|
_ "github.com/miekg/coredns/middleware/rewrite"
|
||||||
_ "github.com/miekg/coredns/middleware/secondary"
|
_ "github.com/miekg/coredns/middleware/secondary"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Quiet mode will not show any informative output on initialization.
|
||||||
|
var Quiet bool
|
||||||
|
|
|
@ -15,12 +15,13 @@ import (
|
||||||
"gopkg.in/natefinch/lumberjack.v2"
|
"gopkg.in/natefinch/lumberjack.v2"
|
||||||
|
|
||||||
// Plug in CoreDNS
|
// Plug in CoreDNS
|
||||||
_ "github.com/miekg/coredns/core"
|
"github.com/miekg/coredns/core"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
caddy.TrapSignals()
|
caddy.TrapSignals()
|
||||||
caddy.DefaultConfigFile = "Corefile"
|
caddy.DefaultConfigFile = "Corefile"
|
||||||
|
caddy.Quiet = true // don't show init stuff from caddy
|
||||||
setVersion()
|
setVersion()
|
||||||
|
|
||||||
flag.StringVar(&conf, "conf", "", "Corefile to load (default \""+caddy.DefaultConfigFile+"\")")
|
flag.StringVar(&conf, "conf", "", "Corefile to load (default \""+caddy.DefaultConfigFile+"\")")
|
||||||
|
@ -28,7 +29,7 @@ func init() {
|
||||||
flag.BoolVar(&plugins, "plugins", false, "List installed plugins")
|
flag.BoolVar(&plugins, "plugins", false, "List installed plugins")
|
||||||
flag.StringVar(&logfile, "log", "", "Process log file")
|
flag.StringVar(&logfile, "log", "", "Process log file")
|
||||||
flag.StringVar(&caddy.PidFile, "pidfile", "", "Path to write pid file")
|
flag.StringVar(&caddy.PidFile, "pidfile", "", "Path to write pid file")
|
||||||
flag.BoolVar(&caddy.Quiet, "quiet", false, "Quiet mode (no initialization output)")
|
flag.BoolVar(&core.Quiet, "quiet", false, "Quiet mode (no initialization output)")
|
||||||
flag.BoolVar(&version, "version", false, "Show version")
|
flag.BoolVar(&version, "version", false, "Show version")
|
||||||
|
|
||||||
caddy.RegisterCaddyfileLoader("flag", caddy.LoaderFunc(confLoader))
|
caddy.RegisterCaddyfileLoader("flag", caddy.LoaderFunc(confLoader))
|
||||||
|
@ -58,12 +59,10 @@ func Run() {
|
||||||
MaxBackups: 10,
|
MaxBackups: 10,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
log.SetFlags(log.LstdFlags)
|
||||||
|
|
||||||
if version {
|
if version {
|
||||||
fmt.Printf("%s-%s\n", caddy.AppName, caddy.AppVersion)
|
showVersion()
|
||||||
if devBuild && gitShortStat != "" {
|
|
||||||
fmt.Printf("%s\n%s\n", gitShortStat, gitFilesModified)
|
|
||||||
}
|
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
if plugins {
|
if plugins {
|
||||||
|
@ -72,8 +71,7 @@ func Run() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set CPU cap
|
// Set CPU cap
|
||||||
err := setCPU(cpu)
|
if err := setCPU(cpu); err != nil {
|
||||||
if err != nil {
|
|
||||||
mustLogFatal(err)
|
mustLogFatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,10 +87,35 @@ func Run() {
|
||||||
mustLogFatal(err)
|
mustLogFatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logVersion()
|
||||||
|
|
||||||
// Twiddle your thumbs
|
// Twiddle your thumbs
|
||||||
instance.Wait()
|
instance.Wait()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// startNotification will log CoreDNS' version to the log.
|
||||||
|
func startupNotification() {
|
||||||
|
if core.Quiet {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logVersion()
|
||||||
|
}
|
||||||
|
|
||||||
|
func showVersion() {
|
||||||
|
fmt.Printf("%s-%s\n", caddy.AppName, caddy.AppVersion)
|
||||||
|
if devBuild && gitShortStat != "" {
|
||||||
|
fmt.Printf("%s\n%s\n", gitShortStat, gitFilesModified)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// logVersion logs the version that is starting.
|
||||||
|
func logVersion() {
|
||||||
|
log.Printf("[INFO] %s-%s starting\n", caddy.AppName, caddy.AppVersion)
|
||||||
|
if devBuild && gitShortStat != "" {
|
||||||
|
log.Printf("[INFO] %s\n%s\n", gitShortStat, gitFilesModified)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// mustLogFatal wraps log.Fatal() in a way that ensures the
|
// mustLogFatal wraps log.Fatal() in a way that ensures the
|
||||||
// output is always printed to stderr so the user can see it
|
// output is always printed to stderr so the user can see it
|
||||||
// if the user is still there, even if the process log was not
|
// if the user is still there, even if the process log was not
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
|
|
||||||
"github.com/miekg/coredns/core/dnsserver"
|
"github.com/miekg/coredns/core/dnsserver"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
)
|
)
|
||||||
|
@ -13,11 +14,11 @@ func setupBind(c *caddy.Controller) error {
|
||||||
config := dnsserver.GetConfig(c)
|
config := dnsserver.GetConfig(c)
|
||||||
for c.Next() {
|
for c.Next() {
|
||||||
if !c.Args(&config.ListenHost) {
|
if !c.Args(&config.ListenHost) {
|
||||||
return c.ArgErr()
|
return middleware.Error("bind", c.ArgErr())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if net.ParseIP(config.ListenHost) == nil {
|
if net.ParseIP(config.ListenHost) == nil {
|
||||||
return fmt.Errorf("not a valid IP address: %s", config.ListenHost)
|
return middleware.Error("bind", fmt.Errorf("not a valid IP address: %s", config.ListenHost))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
2
middleware/cache/setup.go
vendored
2
middleware/cache/setup.go
vendored
|
@ -20,7 +20,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
ttl, zones, err := cacheParse(c)
|
ttl, zones, err := cacheParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("cache", err)
|
||||||
}
|
}
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
||||||
return NewCache(ttl, zones, next)
|
return NewCache(ttl, zones, next)
|
||||||
|
|
|
@ -2,6 +2,7 @@ package chaos
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/miekg/coredns/core/dnsserver"
|
"github.com/miekg/coredns/core/dnsserver"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
)
|
)
|
||||||
|
@ -16,7 +17,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
version, authors, err := chaosParse(c)
|
version, authors, err := chaosParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("chaos", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
||||||
|
|
|
@ -19,7 +19,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
zones, keys, err := dnssecParse(c)
|
zones, keys, err := dnssecParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("dnssec", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/miekg/coredns/core/dnsserver"
|
"github.com/miekg/coredns/core/dnsserver"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
"github.com/miekg/coredns/middleware/pkg/roller"
|
"github.com/miekg/coredns/middleware/pkg/roller"
|
||||||
|
|
||||||
"github.com/hashicorp/go-syslog"
|
"github.com/hashicorp/go-syslog"
|
||||||
|
@ -22,7 +23,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
handler, err := errorsParse(c)
|
handler, err := errorsParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("errors", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var writer io.Writer
|
var writer io.Writer
|
||||||
|
@ -37,7 +38,7 @@ func setup(c *caddy.Controller) error {
|
||||||
case "syslog":
|
case "syslog":
|
||||||
writer, err = gsyslog.NewLogger(gsyslog.LOG_ERR, "LOCAL0", "coredns")
|
writer, err = gsyslog.NewLogger(gsyslog.LOG_ERR, "LOCAL0", "coredns")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("errors", err)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
if handler.LogFile == "" {
|
if handler.LogFile == "" {
|
||||||
|
@ -48,7 +49,7 @@ func setup(c *caddy.Controller) error {
|
||||||
var file *os.File
|
var file *os.File
|
||||||
file, err = os.OpenFile(handler.LogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
file, err = os.OpenFile(handler.LogFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("errors", err)
|
||||||
}
|
}
|
||||||
if handler.LogRoller != nil {
|
if handler.LogRoller != nil {
|
||||||
file.Close()
|
file.Close()
|
||||||
|
|
|
@ -28,7 +28,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
e, stubzones, err := etcdParse(c)
|
e, stubzones, err := etcdParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("etcd", err)
|
||||||
}
|
}
|
||||||
if stubzones {
|
if stubzones {
|
||||||
c.OnStartup(func() error {
|
c.OnStartup(func() error {
|
||||||
|
|
|
@ -21,7 +21,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
zones, err := fileParse(c)
|
zones, err := fileParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("file", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add startup functions to notify the master(s).
|
// Add startup functions to notify the master(s).
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package health
|
package health
|
||||||
|
|
||||||
import "github.com/mholt/caddy"
|
import (
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
|
"github.com/mholt/caddy"
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
caddy.RegisterPlugin("health", caddy.Plugin{
|
caddy.RegisterPlugin("health", caddy.Plugin{
|
||||||
|
@ -12,7 +16,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
addr, err := healthParse(c)
|
addr, err := healthParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("health", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
health := &Health{Addr: addr}
|
health := &Health{Addr: addr}
|
||||||
|
|
|
@ -24,12 +24,12 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
kubernetes, err := kubernetesParse(c)
|
kubernetes, err := kubernetesParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("kubernetes", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = kubernetes.InitKubeCache()
|
err = kubernetes.InitKubeCache()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("kubernetes", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register KubeCache start and stop functions with Caddy
|
// Register KubeCache start and stop functions with Caddy
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/miekg/coredns/core/dnsserver"
|
"github.com/miekg/coredns/core/dnsserver"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
"github.com/miekg/coredns/middleware/pkg/roller"
|
"github.com/miekg/coredns/middleware/pkg/roller"
|
||||||
|
|
||||||
"github.com/hashicorp/go-syslog"
|
"github.com/hashicorp/go-syslog"
|
||||||
|
@ -23,7 +24,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
rules, err := logParse(c)
|
rules, err := logParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("log", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Open the log files for writing when the server starts
|
// Open the log files for writing when the server starts
|
||||||
|
@ -39,13 +40,13 @@ func setup(c *caddy.Controller) error {
|
||||||
} else if rules[i].OutputFile == "syslog" {
|
} else if rules[i].OutputFile == "syslog" {
|
||||||
writer, err = gsyslog.NewLogger(gsyslog.LOG_INFO, "LOCAL0", "coredns")
|
writer, err = gsyslog.NewLogger(gsyslog.LOG_INFO, "LOCAL0", "coredns")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("log", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var file *os.File
|
var file *os.File
|
||||||
file, err = os.OpenFile(rules[i].OutputFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
file, err = os.OpenFile(rules[i].OutputFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("log", err)
|
||||||
}
|
}
|
||||||
if rules[i].Roller != nil {
|
if rules[i].Roller != nil {
|
||||||
file.Close()
|
file.Close()
|
||||||
|
|
|
@ -19,7 +19,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
m, err := prometheusParse(c)
|
m, err := prometheusParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("prometheus", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
|
@ -52,4 +54,8 @@ func (f HandlerFunc) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.
|
||||||
return f(ctx, w, r)
|
return f(ctx, w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Error returns err with 'middleware/name: ' prefixed to it.
|
||||||
|
func Error(name string, err error) error { return fmt.Errorf("%s/%s: %s", "middleware", name, err) }
|
||||||
|
|
||||||
|
// Namespace is the namespace used for the metrics.
|
||||||
const Namespace = "coredns"
|
const Namespace = "coredns"
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
@ -17,13 +18,13 @@ func setup(c *caddy.Controller) error {
|
||||||
found := false
|
found := false
|
||||||
for c.Next() {
|
for c.Next() {
|
||||||
if found {
|
if found {
|
||||||
return c.Err("pprof can only be specified once")
|
return middleware.Error("pprof", c.Err("pprof can only be specified once"))
|
||||||
}
|
}
|
||||||
if len(c.RemainingArgs()) != 0 {
|
if len(c.RemainingArgs()) != 0 {
|
||||||
return c.ArgErr()
|
return middleware.Error("pprof", c.ArgErr())
|
||||||
}
|
}
|
||||||
if c.NextBlock() {
|
if c.NextBlock() {
|
||||||
return c.ArgErr()
|
return middleware.Error("pprof", c.ArgErr())
|
||||||
}
|
}
|
||||||
found = true
|
found = true
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package proxy
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/miekg/coredns/core/dnsserver"
|
"github.com/miekg/coredns/core/dnsserver"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
)
|
)
|
||||||
|
@ -16,7 +17,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
upstreams, err := NewStaticUpstreams(c.Dispenser)
|
upstreams, err := NewStaticUpstreams(c.Dispenser)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("proxy", err)
|
||||||
}
|
}
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
||||||
return Proxy{Next: next, Client: Clients(), Upstreams: upstreams}
|
return Proxy{Next: next, Client: Clients(), Upstreams: upstreams}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/miekg/coredns/core/dnsserver"
|
"github.com/miekg/coredns/core/dnsserver"
|
||||||
|
"github.com/miekg/coredns/middleware"
|
||||||
|
|
||||||
"github.com/mholt/caddy"
|
"github.com/mholt/caddy"
|
||||||
)
|
)
|
||||||
|
@ -19,7 +20,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
rewrites, err := rewriteParse(c)
|
rewrites, err := rewriteParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("rewrite", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
dnsserver.GetConfig(c).AddMiddleware(func(next dnsserver.Handler) dnsserver.Handler {
|
||||||
|
|
|
@ -18,7 +18,7 @@ func init() {
|
||||||
func setup(c *caddy.Controller) error {
|
func setup(c *caddy.Controller) error {
|
||||||
zones, err := secondaryParse(c)
|
zones, err := secondaryParse(c)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return middleware.Error("secondary", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add startup functions to retrieve the zone and keep it up to date.
|
// Add startup functions to retrieve the zone and keep it up to date.
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
"github.com/miekg/dns"
|
"github.com/miekg/dns"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// TCPServer returns a generic DNS server listening for TCP connections on laddr.
|
||||||
func TCPServer(t *testing.T, laddr string) (*dns.Server, string, error) {
|
func TCPServer(t *testing.T, laddr string) (*dns.Server, string, error) {
|
||||||
l, err := net.Listen("tcp", laddr)
|
l, err := net.Listen("tcp", laddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -33,6 +34,7 @@ func TCPServer(t *testing.T, laddr string) (*dns.Server, string, error) {
|
||||||
return server, l.Addr().String(), nil
|
return server, l.Addr().String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UDPServer returns a generic DNS server listening for UDP connections on laddr.
|
||||||
func UDPServer(t *testing.T, laddr string) (*dns.Server, string, error) {
|
func UDPServer(t *testing.T, laddr string) (*dns.Server, string, error) {
|
||||||
pc, err := net.ListenPacket("udp", laddr)
|
pc, err := net.ListenPacket("udp", laddr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -53,8 +55,11 @@ func UDPServer(t *testing.T, laddr string) (*dns.Server, string, error) {
|
||||||
return server, pc.LocalAddr().String(), nil
|
return server, pc.LocalAddr().String(), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// CoreDNSServer returns a test server. It just takes a normal Corefile as input.
|
// CoreDNSServer returns a CoreDNS test server. It just takes a normal Corefile as input.
|
||||||
func CoreDNSServer(corefile string) (*caddy.Instance, error) { return caddy.Start(NewInput(corefile)) }
|
func CoreDNSServer(corefile string) (*caddy.Instance, error) {
|
||||||
|
caddy.Quiet = true
|
||||||
|
return caddy.Start(NewInput(corefile))
|
||||||
|
}
|
||||||
|
|
||||||
// CoreDNSSserverStop stops a server.
|
// CoreDNSSserverStop stops a server.
|
||||||
func CoreDNSServerStop(i *caddy.Instance) { i.Stop() }
|
func CoreDNSServerStop(i *caddy.Instance) { i.Stop() }
|
||||||
|
|
Loading…
Add table
Reference in a new issue