mirror of
				https://github.com/coredns/coredns.git
				synced 2025-11-04 03:03:14 -05:00 
			
		
		
		
	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 <yong.tang.github@outlook.com>
		
	
		
			
				
	
	
		
			47 lines
		
	
	
		
			870 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			870 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package test
 | 
						|
 | 
						|
import (
 | 
						|
	"io/ioutil"
 | 
						|
	"log"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"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) {
 | 
						|
	t := new(testing.T)
 | 
						|
	name, rm, err := test.TempFile(".", exampleOrg)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatalf("failed to create zone: %s", err)
 | 
						|
	}
 | 
						|
	defer rm()
 | 
						|
 | 
						|
	corefile := `example.org:0 {
 | 
						|
    file ` + name + `
 | 
						|
    rewrite type ANY HINFO
 | 
						|
    loadbalance
 | 
						|
}
 | 
						|
`
 | 
						|
 | 
						|
	ex, udp, _, err := CoreDNSServerAndPorts(corefile)
 | 
						|
	if err != nil {
 | 
						|
		t.Fatalf("Could not get CoreDNS serving instance: %s", err)
 | 
						|
	}
 | 
						|
	defer ex.Stop()
 | 
						|
 | 
						|
	log.SetOutput(ioutil.Discard)
 | 
						|
	c := new(dns.Client)
 | 
						|
	m := new(dns.Msg)
 | 
						|
	m.SetQuestion("example.org.", dns.TypeA)
 | 
						|
 | 
						|
	b.ResetTimer()
 | 
						|
	for i := 0; i < b.N; i++ {
 | 
						|
		c.Exchange(m, udp)
 | 
						|
	}
 | 
						|
}
 |