mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04: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)
 | |
| 	}
 | |
| }
 |