mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
NEW FEATURE: Support Split Horizon DNS (#1034)
* Implement main feature * BIND: Permit printf-like file name formats * BIND: Make filenameformat work forwards and backwards. * Fix extrator test cases
This commit is contained in:
@@ -18,11 +18,13 @@ you can specify a `directory` where the provider will look for and create zone f
|
||||
{% highlight json %}
|
||||
{
|
||||
"bind": {
|
||||
"directory": "myzones"
|
||||
"directory": "myzones",
|
||||
"filenameformat": "%U.zone" << The default
|
||||
}
|
||||
}
|
||||
{% endhighlight %}
|
||||
|
||||
|
||||
The BIND accepts some optional metadata via your DNS config when you create the provider:
|
||||
|
||||
In this example we set the default SOA settings and NS records.
|
||||
@@ -46,15 +48,55 @@ var BIND = NewDnsProvider('bind', 'BIND', {
|
||||
})
|
||||
{% endhighlight %}
|
||||
|
||||
# filenameformat
|
||||
|
||||
The `filenameformat` parameter specifies the file name to be used when
|
||||
writing the zone file. The default is acceptable in most cases: the
|
||||
name as specified in the `D()` function, plus ".zone".
|
||||
|
||||
The filenameformat is a string with a few printf-like `%` verbs:
|
||||
|
||||
* `%U` the domain name as specified in `D()`
|
||||
* `%D` the domain name without any split horizon tag
|
||||
* `%T` the split horizon tag, or "", see `D()`
|
||||
* `%?x` this returns `x` if the split horizon tag is non-null, otherwise nothing. `x` can be any printable.
|
||||
* `%%` `%`
|
||||
* ordinary characters (not `%`) are copied unchanged to the output stream
|
||||
* FYI: format strings must not end with an incomplete `%` or `%?`
|
||||
* FYI: `/` or other filesystem separators result in undefined behavior
|
||||
|
||||
Typical values:
|
||||
|
||||
* `%U.zone` (The default)
|
||||
* `example.com.zone` or `example.com!tag.zone`
|
||||
* `%T%*U%D.zone` (optional tag and `_` + domain + `.zone`)
|
||||
* `tag_example.com.zone` or `example.com.zone`
|
||||
* `db_%T%?_%D`
|
||||
* `db_inside_example.com` or `db_example.com`
|
||||
* `db_%D`
|
||||
* `db_example.com`
|
||||
|
||||
The last example will generate the same name for both
|
||||
`D("example.tld!inside")` and `D("example.tld!outside")`. This
|
||||
assumes two BIND providers are configured in `creds.json`, eacch with
|
||||
a different `directory` setting. Otherwise `dnscontrol` will write
|
||||
both domains to the same file, flapping between the two back and
|
||||
forth.
|
||||
|
||||
# FYI: get-zones
|
||||
|
||||
When used with "get-zones", specifying "all" scans the directory for
|
||||
The dnscontrol `get-zones all` subcommand scans the directory for
|
||||
any files named `*.zone` and assumes they are zone files.
|
||||
|
||||
```
|
||||
dnscontrol get-zones --format=nameonly - BIND all
|
||||
```
|
||||
|
||||
If `filenameformat` is defined, `dnscontrol` makes an guess at which
|
||||
filenames are zones but doesn't try to hard to get it right, which is
|
||||
mathematically impossible in all cases. Feel free to file an issue if
|
||||
your format string doesn't work. I love a challenge!
|
||||
|
||||
# FYI: SOA Records
|
||||
|
||||
DNSControl assumes that SOA records are managed by the provider. Most
|
||||
|
Reference in New Issue
Block a user