From 9d87b953a0c6b83e214c4152a9c38082ea83246d Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Mon, 15 Jan 2018 13:54:10 -0800 Subject: [PATCH] Enhancement of external plugin enabling (#1392) This fix is an enhancement of external plugin enabling. Previously, it was already able to build a customerized coredns with plugins enabled selectively, without changing coredns source code. However, all default plugins are actually bundled because of the import rule: ``` "github.com/coredns/coredns/coremain" ``` The issue is best described with the following: ``` root@localhost:/go/src/github.com/coredns/coredns/sample# cat sample.go package main import ( _ "github.com/coredns/forward" "github.com/coredns/coredns/coremain" "github.com/coredns/coredns/core/dnsserver" ) var directives = []string{ "forward", "startup", "shutdown", } func init() { dnsserver.Directives = directives } func main() { coremain.Run() } root@localhost:/go/src/github.com/coredns/coredns/sample# root@localhost:/go/src/github.com/coredns/coredns/sample# go build -v sample.go root@localhost:/go/src/github.com/coredns/coredns/sample# ./sample -plugins root@localhost:/go/src/github.com/coredns/coredns/sample# ./sample -plugins Server types: dns Caddyfile loaders: flag default Other plugins: dns.auto dns.autopath dns.bind dns.cache dns.chaos dns.debug dns.dnssec dns.dnstap dns.erratic dns.errors dns.etcd dns.federation dns.file dns.forward dns.health dns.hosts dns.kubernetes dns.loadbalance dns.log dns.nsid dns.pprof dns.prometheus dns.proxy dns.reverse dns.rewrite dns.root dns.route53 dns.secondary dns.template .... ``` This fix moves zplugins.go to a different package/directory so that it is possible to "only import plugins as needed". The following is the new output after this fix: ``` root@localhost:/go/src/github.com/coredns/coredns/sample# ./sample -plugins Server types: dns Caddyfile loaders: flag default Other plugins: dns.forward dns.prometheus shutdown startup root@localhost:/go/src/github.com/coredns/coredns/sample# ``` Signed-off-by: Yong Tang --- core/{ => plugin}/zplugin.go | 2 +- coredns.go | 7 ++++++- coremain/run.go | 3 --- directives_generate.go | 2 +- test/plugin_test.go | 3 +++ 5 files changed, 11 insertions(+), 6 deletions(-) rename core/{ => plugin}/zplugin.go (99%) diff --git a/core/zplugin.go b/core/plugin/zplugin.go similarity index 99% rename from core/zplugin.go rename to core/plugin/zplugin.go index ee9a96fac..478746455 100644 --- a/core/zplugin.go +++ b/core/plugin/zplugin.go @@ -1,6 +1,6 @@ // generated by directives_generate.go; DO NOT EDIT -package core +package plugin import ( // Include all plugins. diff --git a/coredns.go b/coredns.go index aa9e20818..5b3fa2b8f 100644 --- a/coredns.go +++ b/coredns.go @@ -2,7 +2,12 @@ package main //go:generate go run directives_generate.go -import "github.com/coredns/coredns/coremain" +import ( + "github.com/coredns/coredns/coremain" + + // Plug in CoreDNS + _ "github.com/coredns/coredns/core/plugin" +) func main() { coremain.Run() diff --git a/coremain/run.go b/coremain/run.go index b0d83b695..de00d1c5f 100644 --- a/coremain/run.go +++ b/coremain/run.go @@ -15,9 +15,6 @@ import ( "github.com/mholt/caddy" "github.com/coredns/coredns/core/dnsserver" - - // Plug in CoreDNS - _ "github.com/coredns/coredns/core" ) func init() { diff --git a/directives_generate.go b/directives_generate.go index ece92e329..3c1c0214b 100644 --- a/directives_generate.go +++ b/directives_generate.go @@ -48,7 +48,7 @@ func main() { } } - genImports("core/zplugin.go", "core", mi) + genImports("core/plugin/zplugin.go", "plugin", mi) genDirectives("core/dnsserver/zdirectives.go", "dnsserver", md) } diff --git a/test/plugin_test.go b/test/plugin_test.go index 9f3604e4e..c2382873c 100644 --- a/test/plugin_test.go +++ b/test/plugin_test.go @@ -8,6 +8,9 @@ import ( "github.com/coredns/coredns/plugin/test" "github.com/miekg/dns" + + // Load all managed plugins in github.com/coredns/coredns + _ "github.com/coredns/coredns/core/plugin" ) func benchmarkLookupBalanceRewriteCache(b *testing.B) {