Instead of hardcoding plugin lists in autopath/health, use interfaces. (#1306)

Switched health and autopath plugin to allow any plugins to be used instead
of a hardcoded list. I did not switch federation over since it wasn't
obvious that anything other than kubernetes could be used with it.

Fixes #1291
This commit is contained in:
James Hartig 2017-12-12 15:40:30 -05:00 committed by Miek Gieben
parent 99e163c375
commit a469a17cdf
8 changed files with 63 additions and 35 deletions

View file

@ -5,8 +5,6 @@ import (
"github.com/coredns/coredns/core/dnsserver"
"github.com/coredns/coredns/plugin"
"github.com/coredns/coredns/plugin/erratic"
"github.com/coredns/coredns/plugin/kubernetes"
"github.com/mholt/caddy"
"github.com/miekg/dns"
@ -34,11 +32,10 @@ func setup(c *caddy.Controller) error {
if m == nil {
return nil
}
if x, ok := m.(*kubernetes.Kubernetes); ok {
ap.searchFunc = x.AutoPath
}
if x, ok := m.(*erratic.Erratic); ok {
if x, ok := m.(AutoPather); ok {
ap.searchFunc = x.AutoPath
} else {
return plugin.Error("autopath", fmt.Errorf("%s does not implement the AutoPather interface", mw))
}
return nil
})
@ -51,12 +48,6 @@ func setup(c *caddy.Controller) error {
return nil
}
// allowedPlugins has a list of plugin that can be used by autopath.
var allowedPlugins = map[string]bool{
"@kubernetes": true,
"@erratic": true,
}
func autoPathParse(c *caddy.Controller) (*AutoPath, string, error) {
ap := &AutoPath{}
mw := ""
@ -68,10 +59,7 @@ func autoPathParse(c *caddy.Controller) (*AutoPath, string, error) {
}
resolv := zoneAndresolv[len(zoneAndresolv)-1]
if resolv[0] == '@' {
_, ok := allowedPlugins[resolv]
if ok {
mw = resolv[1:]
}
mw = resolv[1:]
} else {
// assume file on disk
rc, err := dns.ClientConfigFromFile(resolv)