3.2 KiB
layout | title |
---|---|
default | Get-Zones subcommand |
get-zones (was "convertzone")
DNSControl has a stand-alone utility that will contact a provider, download the records of one or more zones, and output them to a file in a variety of formats.
The original purpose of this command is to help convert legacy domains
to DNScontrol (bootstrapping). Since bootstrapping can not depend on
dnsconfig.js
, get-zones
relies on command line parameters and
creds.json
exclusively.
Syntax:
dnscontrol get-zones [command options] credkey provider zone [...]
--creds value Provider credentials JSON file (default: "creds.json") --format value Output format: dsl pretty tsv nameonly (default: "pretty") --out value Instead of stdout, write to this file --ttl value Default TTL (0 picks the zone's most common TTL) (default: 0)
ARGUMENTS: credkey: The name used in creds.json (first parameter to NewDnsProvider() in dnsconfig.js) provider: The name of the provider (second parameter to NewDnsProvider() in dnsconfig.js) zone: One or more zones (domains) to download; or "all".
FORMATS: --format=dsl dnsconfig.js format (not perfect, but a decent first draft) --format=nameonly Just print the zone names --format=pretty BIND Zonefile format --format=tsv TAB separated value (useful for AWK)
When using tsv
, the columns are:
FQDN (the label with the domain)
ShortName (just the label, "@" if it is the naked domain)
TTL
Record Type (A, AAAA, CNAME, etc.)
Target and arguments (quoted like in a zonefile)
The --ttl flag applies to pretty and dsl formats.
EXAMPLES: dnscontrol get-zones myr53 ROUTE53 example.com dnscontrol get-zones gmain GANDI_V5 example.comn other.com dnscontrol get-zones cfmain CLOUDFLAREAPI all dnscontrol get-zones -format=tsv bind BIND example.com dnscontrol get-zones -format=dsl -out=draft.js glcoud GCLOUD example.com`,
Example commands
dnscontrol get-zone
Developer Note
This command is not implemented for all providers.
To add this to a provider:
- Document the feature
In the *Provider.go
file, change the setting to implemented.
- OLD:
providers.CanGetZones: providers.Unimplemented(),
- NEW:
providers.CanGetZones: providers.Can(),
- Update the docs
go generate
- Implement the
GetZoneRecords
function
Find the GetZoneRecords
function in the *Provider.go
file.
If currently returns fmt.Errorf("not implemented")
.
Instead, it should gather the records from the provider and return them as a list of RecordConfig structs.
The code to do that already exists in GetDomainCorrections
.
You should extract it into its own function (GetZoneRecords
), rather
than having it be burried in the middle of GetDomainCorrections
.
GetDomainCorrections
should call GetZoneRecords
.
Once that is done the get-zone
subcommand should work.
- Optionally implemement the
ListZones
function
If the ListZones
function is implemented, the "all" special case
will be activated. In this case, listing a single zone named all
will query the provider for the list of zones.
(Technically what is happening is by implementing the ListZones
function, you are completing the ZoneLister
interface for that
provider.)