Fully deprecate TIMEOUT and NO_RELOAD (#2742)

* Fully deprecate NO_RELOAD

Signed-off-by: Xiao An <hac@zju.edu.cn>

* Fully deprecate TIMEOUT

Signed-off-by: Xiao An <hac@zju.edu.cn>

* Update CI tests to adapt to the deprecation of TIMEOUT

Signed-off-by: Xiao An <hac@zju.edu.cn>

* Add documents for directive transfer in plugin auto

Signed-off-by: Xiao An <hac@zju.edu.cn>
This commit is contained in:
Xiao An 2019-04-01 14:28:01 +08:00 committed by Miek Gieben
parent 99c3d065bc
commit cb96ab9f4f
9 changed files with 75 additions and 105 deletions

View file

@ -15,9 +15,9 @@ zonefile. New or changed zones are automatically picked up from disk.
~~~
auto [ZONES...] {
directory DIR [REGEXP ORIGIN_TEMPLATE [TIMEOUT]]
directory DIR [REGEXP ORIGIN_TEMPLATE]
transfer to ADDRESS...
reload DURATION
no_reload
upstream
}
~~~
@ -30,14 +30,13 @@ are used.
like `{<number>}` are replaced with the respective matches in the file name, e.g. `{1}` is the
first match, `{2}` is the second. The default is: `db\.(.*) {1}` i.e. from a file with the
name `db.example.com`, the extracted origin will be `example.com`.
**TIMEOUT** is deprecated and will be removed in a subsequent version.
`reload` will be used, if not defined
(it specifies how often CoreDNS should scan the directory to watch for file removal and addition;
the default is every 60 seconds. This value is in seconds. The minimum value is 1 second.)
* `reload` interval to perform reloads of zones if SOA version changes and zonefiles. Default is one minute.
* `transfer` enables zone transfers. It may be specified multiples times. `To` or `from` signals
the direction. **ADDRESS** must be denoted in CIDR notation (e.g., 127.0.0.1/32) or just as plain
addresses. The special wildcard `*` means: the entire internet (only valid for 'transfer to').
When an address is specified a notify message will be send whenever the zone is reloaded.
* `reload` interval to perform reloads of zones if SOA version changes and zonefiles. It specifies how often CoreDNS should scan the directory to watch for file removal and addition. Default is one minute.
Value of `0` means to not scan for changes and reload. eg. `30s` checks zonefile every 30 seconds
and reloads zone when serial changes.
* `no_reload` deprecated. Sets reload to 0.
* `upstream` defines upstream resolvers to be used resolve external names found (think CNAMEs)
pointing to external names. CoreDNS will resolve CNAMEs against itself.
@ -75,7 +74,8 @@ where `example.org` is the origin. Scan every 45 seconds.
~~~ corefile
org {
auto {
directory /etc/coredns/zones/org www\.db\.(.*) {1} 45
directory /etc/coredns/zones/org www\.db\.(.*) {1}
reload 45s
}
}
~~~

View file

@ -34,8 +34,6 @@ type (
transferTo []string
ReloadInterval time.Duration
upstream *upstream.Upstream // Upstream for looking up names during the resolution process.
duration time.Duration
}
)

View file

@ -4,7 +4,6 @@ import (
"os"
"path/filepath"
"regexp"
"strconv"
"time"
"github.com/coredns/coredns/core/dnsserver"
@ -50,7 +49,7 @@ func setup(c *caddy.Controller) error {
}
go func() {
ticker := time.NewTicker(a.loader.duration)
ticker := time.NewTicker(a.loader.ReloadInterval)
for {
select {
case <-walkChan:
@ -83,7 +82,6 @@ func autoParse(c *caddy.Controller) (Auto, error) {
template: "${1}",
re: regexp.MustCompile(`db\.(.*)`),
ReloadInterval: nilInterval,
duration: nilInterval,
},
Zones: &Zones{},
}
@ -105,7 +103,7 @@ func autoParse(c *caddy.Controller) (Auto, error) {
for c.NextBlock() {
switch c.Val() {
case "directory": // directory DIR [REGEXP [TEMPLATE] [DURATION]]
case "directory": // directory DIR [REGEXP TEMPLATE]
if !c.NextArg() {
return a, c.ArgErr()
}
@ -138,17 +136,8 @@ func autoParse(c *caddy.Controller) (Auto, error) {
a.loader.template = rewriteToExpand(c.Val())
}
// duration
if c.NextArg() {
i, err := strconv.Atoi(c.Val())
if err != nil {
return a, err
}
if i < 1 {
i = 1
}
log.Warning("TIMEOUT of directory is deprecated. Use RELOAD instead. See https://coredns.io/plugins/auto/#syntax")
a.loader.duration = time.Duration(i) * time.Second
return Auto{}, c.ArgErr()
}
case "reload":
@ -158,15 +147,11 @@ func autoParse(c *caddy.Controller) (Auto, error) {
}
a.loader.ReloadInterval = d
case "no_reload":
log.Warning("NO_RELOAD of directory is deprecated. Use RELOAD (set to 0) instead. See https://coredns.io/plugins/auto/#syntax")
a.loader.ReloadInterval = 0
case "upstream":
c.RemainingArgs() // eat remaining args
a.loader.upstream = upstream.New()
default:
case "transfer":
t, _, e := parse.Transfer(c, false)
if e != nil {
return a, e
@ -174,17 +159,15 @@ func autoParse(c *caddy.Controller) (Auto, error) {
if t != nil {
a.loader.transferTo = append(a.loader.transferTo, t...)
}
default:
return Auto{}, c.Errf("unknown property '%s'", c.Val())
}
}
}
if a.loader.ReloadInterval == nilInterval {
if a.loader.duration == nilInterval {
a.loader.duration = 60 * time.Second
}
a.loader.ReloadInterval = a.loader.duration
} else if a.loader.duration == nilInterval {
a.loader.duration = a.loader.ReloadInterval
a.loader.ReloadInterval = 60 * time.Second
}
return a, nil

View file

@ -15,7 +15,6 @@ func TestAutoParse(t *testing.T) {
expectedTempl string
expectedRe string
expectedReloadInterval time.Duration
expectedDuration time.Duration
expectedTo []string
}{
{
@ -23,46 +22,33 @@ func TestAutoParse(t *testing.T) {
directory /tmp
transfer to 127.0.0.1
}`,
false, "/tmp", "${1}", `db\.(.*)`, 60 * time.Second, 60 * time.Second, []string{"127.0.0.1:53"},
false, "/tmp", "${1}", `db\.(.*)`, 60 * time.Second, []string{"127.0.0.1:53"},
},
{
`auto 10.0.0.0/24 {
directory /tmp
}`,
false, "/tmp", "${1}", `db\.(.*)`, 60 * time.Second, 60 * time.Second, nil,
false, "/tmp", "${1}", `db\.(.*)`, 60 * time.Second, nil,
},
{
`auto {
directory /tmp
no_reload
reload 0
}`,
false, "/tmp", "${1}", `db\.(.*)`, 0 * time.Second, 0 * time.Second, nil,
false, "/tmp", "${1}", `db\.(.*)`, 0 * time.Second, nil,
},
{
`auto {
directory /tmp (.*) bliep
}`,
false, "/tmp", "bliep", `(.*)`, 60 * time.Second, 60 * time.Second, nil,
},
{
`auto {
directory /tmp (.*) bliep 10
}`,
false, "/tmp", "bliep", `(.*)`, 10 * time.Second, 10 * time.Second, nil,
false, "/tmp", "bliep", `(.*)`, 60 * time.Second, nil,
},
{
`auto {
directory /tmp (.*) bliep
reload 10s
}`,
false, "/tmp", "bliep", `(.*)`, 10 * time.Second, 10 * time.Second, nil,
},
{
`auto {
directory /tmp (.*) bliep 20
reload 10s
}`,
false, "/tmp", "bliep", `(.*)`, 10 * time.Second, 20 * time.Second, nil,
false, "/tmp", "bliep", `(.*)`, 10 * time.Second, nil,
},
{
`auto {
@ -71,44 +57,44 @@ func TestAutoParse(t *testing.T) {
transfer to 127.0.0.2
upstream 8.8.8.8
}`,
false, "/tmp", "bliep", `(.*)`, 60 * time.Second, 60 * time.Second, []string{"127.0.0.1:53", "127.0.0.2:53"},
false, "/tmp", "bliep", `(.*)`, 60 * time.Second, []string{"127.0.0.1:53", "127.0.0.2:53"},
},
// errors
// NO_RELOAD has been deprecated.
{
`auto {
directory /tmp
no_reload
}`,
true, "/tmp", "${1}", `db\.(.*)`, 0 * time.Second, nil,
},
// TIMEOUT has been deprecated.
{
`auto {
directory /tmp (.*) bliep 10
}`,
true, "/tmp", "bliep", `(.*)`, 10 * time.Second, nil,
},
// no directory specified.
{
`auto example.org {
directory
}`,
true, "", "${1}", `db\.(.*)`, 60 * time.Second, 60 * time.Second, nil,
true, "", "${1}", `db\.(.*)`, 60 * time.Second, nil,
},
// illegal REGEXP.
{
`auto example.org {
directory /tmp * {1}
}`,
true, "", "${1}", ``, 60 * time.Second, 60 * time.Second, nil,
true, "/tmp", "${1}", ``, 60 * time.Second, nil,
},
// unexpected argument.
{
`auto example.org {
directory /tmp * {1} aa
directory /tmp (.*) {1} aa
}`,
true, "", "${1}", ``, 60 * time.Second, 60 * time.Second, nil,
},
{
`auto example.org {
directory /tmp .* {1}
}`,
true, "", "${1}", ``, 60 * time.Second, 60 * time.Second, nil,
},
{
`auto example.org {
directory /tmp .* {1}
}`,
true, "", "${1}", ``, 60 * time.Second, 60 * time.Second, nil,
},
{
`auto example.org {
directory /tmp .* {1}
}`,
true, "", "${1}", ``, 60 * time.Second, 60 * time.Second, nil,
true, "/tmp", "${1}", ``, 60 * time.Second, nil,
},
}
@ -133,9 +119,6 @@ func TestAutoParse(t *testing.T) {
if a.loader.ReloadInterval != test.expectedReloadInterval {
t.Fatalf("Test %d expected %v, got %v", i, test.expectedReloadInterval, a.loader.ReloadInterval)
}
if a.loader.duration != test.expectedDuration {
t.Fatalf("Test %d expected %v, got %v", i, test.expectedDuration, a.loader.duration)
}
if test.expectedTo != nil {
for j, got := range a.loader.transferTo {
if got != test.expectedTo[j] {

View file

@ -28,7 +28,6 @@ If you want to round-robin A and AAAA responses look at the *loadbalance* plugin
file DBFILE [ZONES... ] {
transfer to ADDRESS...
reload DURATION
no_reload
upstream
}
~~~
@ -40,7 +39,6 @@ file DBFILE [ZONES... ] {
* `reload` interval to perform a reload of the zone if the SOA version changes. Default is one minute.
Value of `0` means to not scan for changes and reload. For example, `30s` checks the zonefile every 30 seconds
and reloads the zone when serial changes.
* `no_reload` deprecated. Sets reload to 0.
* `upstream` resolve external names found (think CNAMEs) pointing to external names. This is only
really useful when CoreDNS is configured as a proxy; for normal authoritative serving you don't
need *or* want to use this. CoreDNS will resolve CNAMEs against itself.

View file

@ -112,10 +112,6 @@ func fileParse(c *caddy.Controller) (Zones, error) {
}
reload = d
case "no_reload":
log.Warning("NO_RELOAD of directory is deprecated. Use RELOAD (set to 0) instead. See https://coredns.io/plugins/file/#syntax")
reload = 0
case "upstream":
// ignore args, will be error later.
c.RemainingArgs() // clear buffer

View file

@ -26,18 +26,6 @@ func TestFileParse(t *testing.T) {
shouldErr bool
expectedZones Zones
}{
{
`file ` + zoneFileName1 + ` miek.nl {
transfer from 127.0.0.1
}`,
true,
Zones{},
},
{
`file`,
true,
Zones{},
},
{
`file ` + zoneFileName1 + ` miek.nl.`,
false,
@ -60,12 +48,32 @@ func TestFileParse(t *testing.T) {
false, // OK for now as we disregard any options for the `upstream`.
Zones{Names: []string{"example.net."}},
},
// errors.
{
`file ` + zoneFileName1 + ` miek.nl {
transfer from 127.0.0.1
}`,
true,
Zones{},
},
{
`file`,
true,
Zones{},
},
{
`file ` + zoneFileName1 + ` example.net. {
no_reload
}`,
true,
Zones{},
},
{
`file ` + zoneFileName1 + ` example.net. {
no_rebloat
}`,
true,
Zones{Names: []string{}},
Zones{},
},
}

View file

@ -19,7 +19,8 @@ func TestAuto(t *testing.T) {
corefile := `org:0 {
auto {
directory ` + tmpdir + ` db\.(.*) {1} 1
directory ` + tmpdir + ` db\.(.*) {1}
reload 1s
}
}
`
@ -77,7 +78,8 @@ func TestAutoNonExistentZone(t *testing.T) {
corefile := `.:0 {
auto {
directory ` + tmpdir + ` (.*) {1} 1
directory ` + tmpdir + ` (.*) {1}
reload 1s
}
errors stdout
}
@ -115,7 +117,8 @@ func TestAutoAXFR(t *testing.T) {
corefile := `org:0 {
auto {
directory ` + tmpdir + ` db\.(.*) {1} 1
directory ` + tmpdir + ` db\.(.*) {1}
reload 1s
transfer to *
}
}

View file

@ -77,7 +77,8 @@ func TestMetricsAuto(t *testing.T) {
corefile := `org:0 {
auto {
directory ` + tmpdir + ` db\.(.*) {1} 1
directory ` + tmpdir + ` db\.(.*) {1}
reload 1s
}
prometheus localhost:0
}