mirror of
https://github.com/coredns/coredns.git
synced 2025-10-27 00:04:15 -04:00
@@ -1,6 +1,6 @@
|
|||||||
# Middleware
|
# Plugins
|
||||||
|
|
||||||
## Writing Middleware
|
## Writing Plugins
|
||||||
|
|
||||||
From the Caddy docs:
|
From the Caddy docs:
|
||||||
|
|
||||||
@@ -136,7 +136,7 @@ compute.internal. 3600 IN MX 10 mx.compute.internal.
|
|||||||
|
|
||||||
## Qualifying for main repo
|
## Qualifying for main repo
|
||||||
|
|
||||||
Middleware for CoreDNS can live out-of-tree, `plugin.cfg` defaults to CoreDNS' repo but other
|
Plugins for CoreDNS can live out-of-tree, `plugin.cfg` defaults to CoreDNS' repo but other
|
||||||
repos work just as well. So when do we consider the inclusion of a new plugin in the main repo?
|
repos work just as well. So when do we consider the inclusion of a new plugin in the main repo?
|
||||||
|
|
||||||
* First, the plugin should be useful for other people. "Useful" is a subjective term. We will
|
* First, the plugin should be useful for other people. "Useful" is a subjective term. We will
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ autopath.Func. Note the searchpath must be ending with the empty string.
|
|||||||
|
|
||||||
I.e:
|
I.e:
|
||||||
|
|
||||||
func (m Middleware ) AutoPath(state request.Request) []string {
|
func (m Plugins ) AutoPath(state request.Request) []string {
|
||||||
return []string{"first", "second", "last", ""}
|
return []string{"first", "second", "last", ""}
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -49,8 +49,8 @@ func setup(c *caddy.Controller) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// allowedMiddleware has a list of plugin that can be used by autopath.
|
// allowedPlugins has a list of plugin that can be used by autopath.
|
||||||
var allowedMiddleware = map[string]bool{
|
var allowedPlugins = map[string]bool{
|
||||||
"@kubernetes": true,
|
"@kubernetes": true,
|
||||||
"@erratic": true,
|
"@erratic": true,
|
||||||
}
|
}
|
||||||
@@ -66,7 +66,7 @@ func autoPathParse(c *caddy.Controller) (*AutoPath, string, error) {
|
|||||||
}
|
}
|
||||||
resolv := zoneAndresolv[len(zoneAndresolv)-1]
|
resolv := zoneAndresolv[len(zoneAndresolv)-1]
|
||||||
if resolv[0] == '@' {
|
if resolv[0] == '@' {
|
||||||
_, ok := allowedMiddleware[resolv]
|
_, ok := allowedPlugins[resolv]
|
||||||
if ok {
|
if ok {
|
||||||
mw = resolv[1:]
|
mw = resolv[1:]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ func TestSetupAutoPath(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !test.shouldErr && mw != test.expectedMw {
|
if !test.shouldErr && mw != test.expectedMw {
|
||||||
t.Errorf("Test %d, Middleware not correctly set for input %s. Expected: %s, actual: %s", i, test.input, test.expectedMw, mw)
|
t.Errorf("Test %d, Plugin not correctly set for input %s. Expected: %s, actual: %s", i, test.input, test.expectedMw, mw)
|
||||||
}
|
}
|
||||||
if !test.shouldErr && ap.search != nil {
|
if !test.shouldErr && ap.search != nil {
|
||||||
if !reflect.DeepEqual(test.expectedSearch, ap.search) {
|
if !reflect.DeepEqual(test.expectedSearch, ap.search) {
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import (
|
|||||||
|
|
||||||
// Check the ordering of returned cname.
|
// Check the ordering of returned cname.
|
||||||
func TestCnameLookup(t *testing.T) {
|
func TestCnameLookup(t *testing.T) {
|
||||||
etc := newEtcdMiddleware()
|
etc := newEtcdPlugin()
|
||||||
|
|
||||||
for _, serv := range servicesCname {
|
for _, serv := range servicesCname {
|
||||||
set(t, etc, serv.Key, 0, serv)
|
set(t, etc, serv.Key, 0, serv)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestGroupLookup(t *testing.T) {
|
func TestGroupLookup(t *testing.T) {
|
||||||
etc := newEtcdMiddleware()
|
etc := newEtcdPlugin()
|
||||||
|
|
||||||
for _, serv := range servicesGroup {
|
for _, serv := range servicesGroup {
|
||||||
set(t, etc, serv.Key, 0, serv)
|
set(t, etc, serv.Key, 0, serv)
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ var dnsTestCases = []test.Case{
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func newEtcdMiddleware() *Etcd {
|
func newEtcdPlugin() *Etcd {
|
||||||
ctxt = context.TODO()
|
ctxt = context.TODO()
|
||||||
|
|
||||||
endpoints := []string{"http://localhost:2379"}
|
endpoints := []string{"http://localhost:2379"}
|
||||||
@@ -253,7 +253,7 @@ func delete(t *testing.T, e *Etcd, k string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestLookup(t *testing.T) {
|
func TestLookup(t *testing.T) {
|
||||||
etc := newEtcdMiddleware()
|
etc := newEtcdPlugin()
|
||||||
for _, serv := range services {
|
for _, serv := range services {
|
||||||
set(t, etc, serv.Key, 0, serv)
|
set(t, etc, serv.Key, 0, serv)
|
||||||
defer delete(t, etc, serv.Key)
|
defer delete(t, etc, serv.Key)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestMultiLookup(t *testing.T) {
|
func TestMultiLookup(t *testing.T) {
|
||||||
etc := newEtcdMiddleware()
|
etc := newEtcdPlugin()
|
||||||
etc.Zones = []string{"skydns.test.", "miek.nl."}
|
etc.Zones = []string{"skydns.test.", "miek.nl."}
|
||||||
etc.Fallthrough = true
|
etc.Fallthrough = true
|
||||||
etc.Next = test.ErrorHandler()
|
etc.Next = test.ErrorHandler()
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func TestOtherLookup(t *testing.T) {
|
func TestOtherLookup(t *testing.T) {
|
||||||
etc := newEtcdMiddleware()
|
etc := newEtcdPlugin()
|
||||||
|
|
||||||
for _, serv := range servicesOther {
|
for _, serv := range servicesOther {
|
||||||
set(t, etc, serv.Key, 0, serv)
|
set(t, etc, serv.Key, 0, serv)
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ func TestStubLookup(t *testing.T) {
|
|||||||
exampleNetStub := &msg.Service{Host: host, Port: port, Key: "a.example.net.stub.dns.skydns.test."}
|
exampleNetStub := &msg.Service{Host: host, Port: port, Key: "a.example.net.stub.dns.skydns.test."}
|
||||||
servicesStub = append(servicesStub, exampleNetStub)
|
servicesStub = append(servicesStub, exampleNetStub)
|
||||||
|
|
||||||
etc := newEtcdMiddleware()
|
etc := newEtcdPlugin()
|
||||||
|
|
||||||
for _, serv := range servicesStub {
|
for _, serv := range servicesStub {
|
||||||
set(t, etc, serv.Key, 0, serv)
|
set(t, etc, serv.Key, 0, serv)
|
||||||
|
|||||||
@@ -37,6 +37,6 @@ func (h *health) poll() {
|
|||||||
h.SetOk(true)
|
h.SetOk(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Middleware that implements the Healther interface.
|
// Plugins that implements the Healther interface.
|
||||||
// TODO(miek): none yet.
|
// TODO(miek): none yet.
|
||||||
var healthers = map[string]bool{}
|
var healthers = map[string]bool{}
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ func setup(c *caddy.Controller) error {
|
|||||||
c.OnStartup(h.Startup)
|
c.OnStartup(h.Startup)
|
||||||
c.OnFinalShutdown(h.Shutdown)
|
c.OnFinalShutdown(h.Shutdown)
|
||||||
|
|
||||||
// Don't do AddMiddleware, as health is not *really* a plugin just a separate webserver running.
|
// Don't do AddPlugin, as health is not *really* a plugin just a separate webserver running.
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func TestEtcdCache(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer ex.Stop()
|
defer ex.Stop()
|
||||||
|
|
||||||
etc := etcdMiddleware()
|
etc := etcdPlugin()
|
||||||
log.SetOutput(ioutil.Discard)
|
log.SetOutput(ioutil.Discard)
|
||||||
|
|
||||||
var ctx = context.TODO()
|
var ctx = context.TODO()
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import (
|
|||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
|
|
||||||
func etcdMiddleware() *etcd.Etcd {
|
func etcdPlugin() *etcd.Etcd {
|
||||||
etcdCfg := etcdc.Config{
|
etcdCfg := etcdc.Config{
|
||||||
Endpoints: []string{"http://localhost:2379"},
|
Endpoints: []string{"http://localhost:2379"},
|
||||||
}
|
}
|
||||||
@@ -53,7 +53,7 @@ func TestEtcdStubAndProxyLookup(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer ex.Stop()
|
defer ex.Stop()
|
||||||
|
|
||||||
etc := etcdMiddleware()
|
etc := etcdPlugin()
|
||||||
log.SetOutput(ioutil.Discard)
|
log.SetOutput(ioutil.Discard)
|
||||||
|
|
||||||
var ctx = context.TODO()
|
var ctx = context.TODO()
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import (
|
|||||||
// and check if it is really there, but running coredns -plugins.
|
// and check if it is really there, but running coredns -plugins.
|
||||||
|
|
||||||
// Dangerous test as it messes with your git tree, maybe use tag?
|
// Dangerous test as it messes with your git tree, maybe use tag?
|
||||||
func testExternalMiddlewareCompile(t *testing.T) {
|
func testExternalPluginCompile(t *testing.T) {
|
||||||
if err := addExampleMiddleware(); err != nil {
|
if err := addExamplePlugin(); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
defer run(t, gitReset)
|
defer run(t, gitReset)
|
||||||
@@ -50,7 +50,7 @@ func run(t *testing.T, c *exec.Cmd) ([]byte, error) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func addExampleMiddleware() error {
|
func addExamplePlugin() error {
|
||||||
f, err := os.OpenFile("../plugin.cfg", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
|
f, err := os.OpenFile("../plugin.cfg", os.O_APPEND|os.O_WRONLY, os.ModeAppend)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
Reference in New Issue
Block a user