diff options
Diffstat (limited to 'plugin/autopath')
-rw-r--r-- | plugin/autopath/README.md | 9 | ||||
-rw-r--r-- | plugin/autopath/autopath.go | 6 | ||||
-rw-r--r-- | plugin/autopath/setup.go | 20 |
3 files changed, 13 insertions, 22 deletions
diff --git a/plugin/autopath/README.md b/plugin/autopath/README.md index 9929bc672..64ca853f5 100644 --- a/plugin/autopath/README.md +++ b/plugin/autopath/README.md @@ -19,15 +19,12 @@ autopath [ZONE...] RESOLV-CONF plugin. For instance `@kubernetes`, will call out to the kubernetes plugin (for each query) to retrieve the search list it should use. -Currently the following set of plugin has implemented *autopath*: - -* *kubernetes* -* *erratic* +If a plugin implements the `AutoPather` interface then it can be used. ## Metrics - + If monitoring is enabled (via the *prometheus* directive) then the following metric is exported: - + * `coredns_autopath_success_count_total{}` - counter of successfully autopath-ed queries. ## Examples diff --git a/plugin/autopath/autopath.go b/plugin/autopath/autopath.go index 2ca6c4df8..1a2e7a5ec 100644 --- a/plugin/autopath/autopath.go +++ b/plugin/autopath/autopath.go @@ -46,6 +46,12 @@ import ( // If Func returns a nil slice, no autopathing will be done. type Func func(request.Request) []string +// AutoPather defines the interface that a plugin should implement in order to be +// used by AutoPath. +type AutoPather interface { + AutoPath(request.Request) []string +} + // AutoPath perform autopath: service side search path completion. type AutoPath struct { Next plugin.Handler diff --git a/plugin/autopath/setup.go b/plugin/autopath/setup.go index 42b4b317a..f4b908465 100644 --- a/plugin/autopath/setup.go +++ b/plugin/autopath/setup.go @@ -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) |