aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--core/coredns.go3
-rw-r--r--core/dnsserver/directives.go1
-rw-r--r--core/dnsserver/zdirectives.go47
-rw-r--r--coredns.go2
-rw-r--r--directives_generate.go114
-rw-r--r--gen/directives_generate.go116
7 files changed, 140 insertions, 145 deletions
diff --git a/Makefile b/Makefile
index cc87ea63f..a720d23ab 100644
--- a/Makefile
+++ b/Makefile
@@ -50,7 +50,7 @@ clean:
.PHONY: gen
gen:
- go generate ./core/...
+ go generate coredns.go
.PHONY: distclean
distclean: clean
diff --git a/core/coredns.go b/core/coredns.go
index b621f2c27..0449c4c2f 100644
--- a/core/coredns.go
+++ b/core/coredns.go
@@ -1,7 +1,4 @@
// Package core registers the server and all plugins we support.
-
-// Additional middleware packages
-//go:generate go run ../gen/directives_generate.go ../middleware.cfg
package core
import (
diff --git a/core/dnsserver/directives.go b/core/dnsserver/directives.go
index 2d9fce66e..bc37baf11 100644
--- a/core/dnsserver/directives.go
+++ b/core/dnsserver/directives.go
@@ -1,4 +1,3 @@
-//go:generate go run ../../gen/directives_generate.go ../../middleware.cfg
package dnsserver
import (
diff --git a/core/dnsserver/zdirectives.go b/core/dnsserver/zdirectives.go
index ff6722998..3f76a401d 100644
--- a/core/dnsserver/zdirectives.go
+++ b/core/dnsserver/zdirectives.go
@@ -1,7 +1,6 @@
// generated by directives_generate.go; DO NOT EDIT
package dnsserver
-
// Directives are registered in the order they should be
// executed.
//
@@ -11,27 +10,27 @@ package dnsserver
// care what middleware above them are doing.
var directives = []string{
- "root",
- "bind",
- "trace",
- "health",
- "pprof",
- "prometheus",
- "errors",
- "log",
- "chaos",
- "cache",
- "rewrite",
- "loadbalance",
- "dnssec",
- "file",
- "auto",
- "secondary",
- "etcd",
- "kubernetes",
- "reverse",
- "proxy",
- "httpprox",
- "whoami",
- "erratic",
+ "root",
+ "bind",
+ "trace",
+ "health",
+ "pprof",
+ "prometheus",
+ "errors",
+ "log",
+ "chaos",
+ "cache",
+ "rewrite",
+ "loadbalance",
+ "dnssec",
+ "file",
+ "auto",
+ "secondary",
+ "etcd",
+ "kubernetes",
+ "reverse",
+ "proxy",
+ "httpprox",
+ "whoami",
+ "erratic",
}
diff --git a/coredns.go b/coredns.go
index f03c218e9..17f106566 100644
--- a/coredns.go
+++ b/coredns.go
@@ -1,5 +1,7 @@
package main
+//go:generate go run directives_generate.go
+
import "github.com/miekg/coredns/coremain"
func main() {
diff --git a/directives_generate.go b/directives_generate.go
new file mode 100644
index 000000000..c6c719fc6
--- /dev/null
+++ b/directives_generate.go
@@ -0,0 +1,114 @@
+//+build ignore
+
+package main
+
+import (
+ "bufio"
+ "go/format"
+ "io/ioutil"
+ "log"
+ "os"
+ "sort"
+ "strconv"
+ "strings"
+)
+
+func main() {
+ mi := make(map[string]string, 0)
+ md := make(map[int]string, 0)
+
+ file, err := os.Open(middlewareFile)
+ fatalIfErr(err)
+
+ defer file.Close()
+
+ scanner := bufio.NewScanner(file)
+ for scanner.Scan() {
+ line := scanner.Text()
+ if !strings.HasPrefix(line, `//`) && !strings.HasPrefix(line, "#") {
+ items := strings.Split(line, ":")
+ if len(items) == 3 {
+ if priority, err := strconv.Atoi(items[0]); err == nil {
+ md[priority] = items[1]
+ }
+
+ if items[2] != "" {
+ if strings.Contains(items[2], "/") {
+ mi[items[1]] = items[2]
+ } else {
+ mi[items[1]] = middlewarePath + items[2]
+ }
+ }
+
+ }
+ }
+ }
+
+ genImports("core/zmiddleware.go", "core", mi)
+ genDirectives("core/dnsserver/zdirectives.go", "dnsserver", md)
+}
+
+func genImports(file, pack string, mi map[string]string) {
+ outs := header + "package " + pack + "\n\n" + "import ("
+
+ if len(mi) > 0 {
+ outs += "\n"
+ }
+
+ for _, v := range mi {
+ outs += `_ "` + v + `\` + "\n"
+ }
+ outs += ")\n"
+
+ res, err := format.Source([]byte(outs))
+ fatalIfErr(err)
+
+ err = ioutil.WriteFile(file, res, 0644)
+ fatalIfErr(err)
+}
+
+func genDirectives(file, pack string, md map[int]string) {
+
+ outs := header + "package " + pack + "\n\n"
+ outs += `
+// Directives are registered in the order they should be
+// executed.
+//
+// Ordering is VERY important. Every middleware will
+// feel the effects of all other middleware below
+// (after) them during a request, but they must not
+// care what middleware above them are doing.
+
+var directives = []string{
+`
+
+ var orders []int
+ for k := range md {
+ orders = append(orders, k)
+ }
+ sort.Ints(orders)
+
+ for _, k := range orders {
+ outs += `"` + md[k] + `",` + "\n"
+ }
+
+ outs += "}\n"
+
+ res, err := format.Source([]byte(outs))
+ fatalIfErr(err)
+
+ err = ioutil.WriteFile(file, res, 0644)
+ fatalIfErr(err)
+}
+
+func fatalIfErr(err error) {
+ if err != nil {
+ log.Fatal(err)
+ }
+}
+
+const (
+ middlewarePath = "github.com/miekg/coredns/middleware/"
+ middlewareFile = "middleware.cfg"
+ header = "// generated by directives_generate.go; DO NOT EDIT\n"
+)
diff --git a/gen/directives_generate.go b/gen/directives_generate.go
deleted file mode 100644
index 5cd8eccd2..000000000
--- a/gen/directives_generate.go
+++ /dev/null
@@ -1,116 +0,0 @@
-package main
-
-import (
- "bufio"
- "io/ioutil"
- "os"
- "sort"
- "strconv"
- "strings"
-)
-
-var middlewarePath = "github.com/miekg/coredns/middleware/"
-var header = "// generated by directives_generate.go; DO NOT EDIT\n"
-
-func main() {
- mwFile := os.Args[1]
-
- mi := make(map[string]string, 0)
- md := make(map[int]string, 0)
-
- if file, err := os.Open(mwFile); err == nil {
- defer file.Close()
-
- scanner := bufio.NewScanner(file)
- for scanner.Scan() {
- line := scanner.Text()
- if !strings.HasPrefix(line, `//`) && !strings.HasPrefix(line, "#") {
- items := strings.Split(line, ":")
- if len(items) == 3 {
- if priority, err := strconv.Atoi(items[0]); err == nil {
- md[priority] = items[1]
- }
-
- if items[2] != "" {
- if strings.Contains(items[2], "/") {
- mi[items[1]] = items[2]
- } else {
- mi[items[1]] = middlewarePath + items[2]
- }
- }
-
- }
- }
- }
-
- var orders []int
- for k := range md {
- orders = append(orders, k)
- }
- sort.Ints(orders)
-
- if os.Getenv("GOPACKAGE") == "core" {
- genImports("zmiddleware.go", mi)
- }
- if os.Getenv("GOPACKAGE") == "dnsserver" {
- genDirectives("zdirectives.go", md)
- }
-
- } else {
- os.Exit(1)
- }
- os.Exit(0)
-
-}
-
-func genImports(file string, mi map[string]string) {
- outs := header + "package " + os.Getenv("GOPACKAGE") + "\n\n" + "import ("
-
- if len(mi) > 0 {
- outs += "\n"
- }
-
- for _, v := range mi {
- outs += " _ \"" + v + "\"\n"
- }
- outs += ")\n"
-
- err := ioutil.WriteFile(file, []byte(outs), 0644)
- if err != nil {
- os.Exit(1)
- }
-
-}
-
-func genDirectives(file string, md map[int]string) {
-
- outs := header + "package " + os.Getenv("GOPACKAGE") + "\n\n"
- outs += `
-// Directives are registered in the order they should be
-// executed.
-//
-// Ordering is VERY important. Every middleware will
-// feel the effects of all other middleware below
-// (after) them during a request, but they must not
-// care what middleware above them are doing.
-
-var directives = []string{
-`
-
- var orders []int
- for k := range md {
- orders = append(orders, k)
- }
- sort.Ints(orders)
-
- for _, k := range orders {
- outs += " \"" + md[k] + "\",\n"
- }
-
- outs += "}\n"
-
- err := ioutil.WriteFile(file, []byte(outs), 0644)
- if err != nil {
- os.Exit(1)
- }
-}