From 519e4f82e115ea5de4a42ecc1414212026200178 Mon Sep 17 00:00:00 2001 From: Jeffrey Cafferata Date: Mon, 6 Jan 2025 15:53:49 +0100 Subject: [PATCH] DOCS: Provider URI redirect (#3307) Co-authored-by: Tom Limoncelli --- build/generate/featureMatrix.go | 4 +- commands/types/dnscontrol.d.ts | 8 +- documentation/.gitbook.yaml | 1 + documentation/SUMMARY.md | 2 +- documentation/bug-triage.md | 4 +- documentation/creds-json.md | 2 +- documentation/getting-started.md | 4 +- documentation/index.md | 4 +- .../top-level-functions/NewDnsProvider.md | 4 +- .../top-level-functions/NewRegistrar.md | 4 +- documentation/provider/index.md | 196 ++++++++++++++++++ documentation/providers.md | 196 ------------------ documentation/writing-providers.md | 6 +- 13 files changed, 218 insertions(+), 217 deletions(-) create mode 100644 documentation/provider/index.md delete mode 100644 documentation/providers.md diff --git a/build/generate/featureMatrix.go b/build/generate/featureMatrix.go index b786de97f..d92afc4e6 100644 --- a/build/generate/featureMatrix.go +++ b/build/generate/featureMatrix.go @@ -19,7 +19,7 @@ func generateFeatureMatrix() error { } replaceInlineContent( - "documentation/providers.md", + "documentation/provider/index.md", "", "", markdownTable, @@ -38,7 +38,7 @@ func markdownTable(matrix *FeatureMatrix) (string, error) { featureMap := matrix.Providers[providerName] var tableDataRow []string - tableDataRow = append(tableDataRow, "[`"+providerName+"`](provider/"+strings.ToLower(providerName)+".md)") + tableDataRow = append(tableDataRow, "[`"+providerName+"`]("+strings.ToLower(providerName)+".md)") for _, featureName := range matrix.Features { tableDataRow = append(tableDataRow, featureEmoji(featureMap, featureName)) } diff --git a/commands/types/dnscontrol.d.ts b/commands/types/dnscontrol.d.ts index fdb6a9dd5..48adeef40 100644 --- a/commands/types/dnscontrol.d.ts +++ b/commands/types/dnscontrol.d.ts @@ -2326,10 +2326,10 @@ declare function NS1_URLFWD(name: string, target: string, ...modifiers: RecordMo * answers on port 53 to queries related to the zone). * * * `name` must match the name of an entry in `creds.json`. - * * `type` specifies a valid DNS provider type identifier listed on the [provider page](../../providers.md). + * * `type` specifies a valid DNS provider type identifier listed on the [provider page](../../provider/index.md). * * Starting with [v3.16](../../v316.md), the type is optional. If it is absent, the `TYPE` field in `creds.json` is used instead. You can leave it out. (Thanks to JavaScript magic, you can leave it out even when there are more fields). * * Starting with v4.0, specifying the type may be an error. Please add the `TYPE` field to `creds.json` and remove this parameter from `dnsconfig.js` to prepare. - * * `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../providers.md) for details. + * * `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../provider/index.md) for details. * * This function will return an opaque string that should be assigned to a variable name for use in [D](D.md) directives. * @@ -2365,10 +2365,10 @@ declare function NewDnsProvider(name: string, type?: string, meta?: object): str * nameservers for the domain). DNSControl only manages the delegation. * * * `name` must match the name of an entry in `creds.json`. - * * `type` specifies a valid DNS provider type identifier listed on the [provider page](../../providers.md). + * * `type` specifies a valid DNS provider type identifier listed on the [provider page](../../provider/index.md). * * Starting with [v3.16](../../v316.md), the type is optional. If it is absent, the `TYPE` field in `creds.json` is used instead. You can leave it out. (Thanks to JavaScript magic, you can leave it out even when there are more fields). * * Starting with v4.0, specifying the type may be an error. Please add the `TYPE` field to `creds.json` and remove this parameter from `dnsconfig.js` to prepare. - * * `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../providers.md) for details. + * * `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../provider/index.md) for details. * * This function will return an opaque string that should be assigned to a variable name for use in [D](D.md) directives. * diff --git a/documentation/.gitbook.yaml b/documentation/.gitbook.yaml index 983e3097d..199c67dc9 100644 --- a/documentation/.gitbook.yaml +++ b/documentation/.gitbook.yaml @@ -1,4 +1,5 @@ redirects: + getting-started/providers: providers/index.md service-providers/providers: providers.md service-providers/providers/akamaiedgedns: provider/akamaiedgedns.md service-providers/providers/autodns: provider/autodns.md diff --git a/documentation/SUMMARY.md b/documentation/SUMMARY.md index a65e5b34e..e61ec666b 100644 --- a/documentation/SUMMARY.md +++ b/documentation/SUMMARY.md @@ -8,7 +8,6 @@ * [Examples](examples.md) * [Migrating zones to DNSControl](migrating.md) * [TypeScript autocomplete and type checking](typescript.md) -* [Providers](providers.md) ## Language Reference @@ -104,6 +103,7 @@ ## Provider +* [Supported providers](provider/index.md) * [Akamai Edge DNS](provider/akamaiedgedns.md) * [Amazon Route 53](provider/route53.md) * [AutoDNS](provider/autodns.md) diff --git a/documentation/bug-triage.md b/documentation/bug-triage.md index 35102dd0d..63d417078 100644 --- a/documentation/bug-triage.md +++ b/documentation/bug-triage.md @@ -2,7 +2,7 @@ If an issue is related to a particular provider, assign it to the person responsible for the provider, as listed in -[Providers](providers.md)'s "Maintainers of +[Providers](provider/index.md)'s "Maintainers of contributed providers". Otherwise leave it unassigned until someone grabs it. @@ -26,7 +26,7 @@ priority: 1. Respond to the issue with the message below 1. Close the issue -The [Providers](providers.md) page is generated +The [Providers](provider/index.md) page is generated automatically from all the issues tagged `provider-request`: 1. "Requested providers: state=closed, tagged `provider-request` diff --git a/documentation/creds-json.md b/documentation/creds-json.md index 318fe9213..bc5a982b7 100644 --- a/documentation/creds-json.md +++ b/documentation/creds-json.md @@ -167,7 +167,7 @@ invalid. Perhaps you meant to specify a `-` on a command-line tool? The fix is to change the `TYPE` subkey entry in `creds.json` from `-` to a valid service provider identifier, as listed -in [the service provider list](providers.md). +in [the service provider list](provider/index.md). ## Using a different file name diff --git a/documentation/getting-started.md b/documentation/getting-started.md index 675a3f52b..b2dc81be9 100644 --- a/documentation/getting-started.md +++ b/documentation/getting-started.md @@ -102,7 +102,7 @@ D("example.com", REG_NONE, DnsProvider(DNS_BIND), ``` {% endcode %} -Modify this file to match your particular providers and domains. See [the DNSConfig docs](js.md) and [the provider docs](providers.md) for more details. +Modify this file to match your particular providers and domains. See [the DNSConfig docs](js.md) and [the provider docs](provider/index.md) for more details. Create a file called `creds.json` for storing provider configurations (API tokens and other account information). For example, to use both name.com and Cloudflare, you would have: @@ -306,7 +306,7 @@ a real domain (or a test domain if you have one). Set up the provider: Add the providers's definition to `dnsconfig.js` and list any credentials in `creds.json`. Each provider is different. -See [the provider docs](providers.md) for +See [the provider docs](provider/index.md) for specifics. Edit the domain: Add the `D()` entry for the domain, or repurpose diff --git a/documentation/index.md b/documentation/index.md index 34bc897d3..7bc87ca87 100644 --- a/documentation/index.md +++ b/documentation/index.md @@ -8,14 +8,14 @@ Want to jump right in? Follow our [quick start tutorial](getting-started.md) on # Use It -Take advantage of the advanced features. Use macros and variables for easier updates. Upload your zones to [multiple DNS providers](providers.md). +Take advantage of the advanced features. Use macros and variables for easier updates. Upload your zones to [multiple DNS providers](provider/index.md). {% hint style="success" %} * Maintain your DNS data as a high-level DS, with macros, and variables for easier updates. * Super extensible! Plug-in architecture makes adding new DNS providers and Registrars easy! * Eliminate vendor lock-in. Switch DNS providers easily, any time, with full fidelity. * Reduce points of failure: Easily maintain dual DNS providers and easily drop one that is down. -* Supports 35+ [DNS Providers](providers.md) including [BIND](provider/bind.md), [AWS Route 53](provider/route53.md), [Google DNS](provider/gcloud.md), and [name.com](provider/namedotcom.md). +* Supports 35+ [DNS Providers](provider/index.md) including [BIND](provider/bind.md), [AWS Route 53](provider/route53.md), [Google DNS](provider/gcloud.md), and [name.com](provider/namedotcom.md). * [Apply CI/CD principles](ci-cd-gitlab.md) to DNS: Unit-tests, system-tests, automated deployment. * All the benefits of Git (or any VCS) for your DNS zone data. View history. Accept PRs. * Optimize DNS with [SPF optimizer](language-reference/domain-modifiers/SPF_BUILDER.md). Detect too many lookups. Flatten includes. diff --git a/documentation/language-reference/top-level-functions/NewDnsProvider.md b/documentation/language-reference/top-level-functions/NewDnsProvider.md index fe333b767..e249cb784 100644 --- a/documentation/language-reference/top-level-functions/NewDnsProvider.md +++ b/documentation/language-reference/top-level-functions/NewDnsProvider.md @@ -16,10 +16,10 @@ A DSP stores a DNS zone's records and provides DNS service for the zone (i.e. answers on port 53 to queries related to the zone). * `name` must match the name of an entry in `creds.json`. -* `type` specifies a valid DNS provider type identifier listed on the [provider page](../../providers.md). +* `type` specifies a valid DNS provider type identifier listed on the [provider page](../../provider/index.md). * Starting with [v3.16](../../v316.md), the type is optional. If it is absent, the `TYPE` field in `creds.json` is used instead. You can leave it out. (Thanks to JavaScript magic, you can leave it out even when there are more fields). * Starting with v4.0, specifying the type may be an error. Please add the `TYPE` field to `creds.json` and remove this parameter from `dnsconfig.js` to prepare. -* `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../providers.md) for details. +* `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../provider/index.md) for details. This function will return an opaque string that should be assigned to a variable name for use in [D](D.md) directives. diff --git a/documentation/language-reference/top-level-functions/NewRegistrar.md b/documentation/language-reference/top-level-functions/NewRegistrar.md index ce3d6566f..3a9826ed7 100644 --- a/documentation/language-reference/top-level-functions/NewRegistrar.md +++ b/documentation/language-reference/top-level-functions/NewRegistrar.md @@ -16,10 +16,10 @@ A registrar maintains the domain's registration and delegation (i.e. the nameservers for the domain). DNSControl only manages the delegation. * `name` must match the name of an entry in `creds.json`. -* `type` specifies a valid DNS provider type identifier listed on the [provider page](../../providers.md). +* `type` specifies a valid DNS provider type identifier listed on the [provider page](../../provider/index.md). * Starting with [v3.16](../../v316.md), the type is optional. If it is absent, the `TYPE` field in `creds.json` is used instead. You can leave it out. (Thanks to JavaScript magic, you can leave it out even when there are more fields). * Starting with v4.0, specifying the type may be an error. Please add the `TYPE` field to `creds.json` and remove this parameter from `dnsconfig.js` to prepare. -* `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../providers.md) for details. +* `meta` is a way to send additional parameters to the provider. It is optional and only certain providers use it. See the [individual provider docs](../../provider/index.md) for details. This function will return an opaque string that should be assigned to a variable name for use in [D](D.md) directives. diff --git a/documentation/provider/index.md b/documentation/provider/index.md new file mode 100644 index 000000000..adba7a8a2 --- /dev/null +++ b/documentation/provider/index.md @@ -0,0 +1,196 @@ +# Service Providers + +## Provider Features + +The table below shows various features supported, or not supported by DNSControl providers. +This table is automatically generated from metadata supplied by the provider when they register themselves inside dnscontrol. + +An empty space may indicate the feature is not supported by a provider, or it may simply mean +the feature has not been investigated and implemented yet. If a feature you need is missing from +a provider that supports it, we'd love your contribution to ensure it works correctly and add it to this matrix. + +If a feature is definitively not supported for whatever reason, we would also like a PR to clarify why it is not supported, and fill in this entire matrix. + + +| Provider name | Official Support | DNS Provider | Registrar | Concurrency Verified | [`ALIAS`](language-reference/domain-modifiers/ALIAS.md) | [`CAA`](language-reference/domain-modifiers/CAA.md) | [`AUTODNSSEC`](language-reference/domain-modifiers/AUTODNSSEC_ON.md) | [`HTTPS`](language-reference/domain-modifiers/HTTPS.md) | [`LOC`](language-reference/domain-modifiers/LOC.md) | [`NAPTR`](language-reference/domain-modifiers/NAPTR.md) | [`PTR`](language-reference/domain-modifiers/PTR.md) | [`SOA`](language-reference/domain-modifiers/SOA.md) | [`SRV`](language-reference/domain-modifiers/SRV.md) | [`SSHFP`](language-reference/domain-modifiers/SSHFP.md) | [`SVCB`](language-reference/domain-modifiers/SVCB.md) | [`TLSA`](language-reference/domain-modifiers/TLSA.md) | [`DS`](language-reference/domain-modifiers/DS.md) | [`DHCID`](language-reference/domain-modifiers/DHCID.md) | [`DNAME`](language-reference/domain-modifiers/DNAME.md) | [`DNSKEY`](language-reference/domain-modifiers/DNSKEY.md) | dual host | create-domains | get-zones | +| ------------- | ---------------- | ------------ | --------- | -------------------- | ------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------- | --------- | -------------- | --------- | +| [`AKAMAIEDGEDNS`](akamaiedgedns.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`AUTODNS`](autodns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`AXFRDDNS`](axfrddns.md) | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | +| [`AZURE_DNS`](azure_dns.md) | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`AZURE_PRIVATE_DNS`](azure_private_dns.md) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`BIND`](bind.md) | ✅ | ✅ | ❌ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| [`BUNNY_DNS`](bunny_dns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ | +| [`CLOUDFLAREAPI`](cloudflareapi.md) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | ✅ | +| [`CLOUDNS`](cloudns.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ✅ | ❔ | ❔ | ✅ | ✅ | +| [`CNR`](cnr.md) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❔ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❔ | ❌ | ❌ | ❔ | ✅ | ✅ | ✅ | +| [`CSCGLOBAL`](cscglobal.md) | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ✅ | +| [`DESEC`](desec.md) | ❌ | ✅ | ❌ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ✅ | ❔ | ✅ | ✅ | +| [`DIGITALOCEAN`](digitalocean.md) | ❌ | ✅ | ❌ | ✅ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | +| [`DNSIMPLE`](dnsimple.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`DNSMADEEASY`](dnsmadeeasy.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`DNSOVERHTTPS`](dnsoverhttps.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | +| [`DOMAINNAMESHOP`](domainnameshop.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | +| [`DYNADOT`](dynadot.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | +| [`EASYNAME`](easyname.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | +| [`EXOSCALE`](exoscale.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❔ | +| [`GANDI_V5`](gandi_v5.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ✅ | +| [`GCLOUD`](gcloud.md) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`GCORE`](gcore.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`HEDNS`](hedns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`HETZNER`](hetzner.md) | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`HEXONET`](hexonet.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ❔ | +| [`HOSTINGDE`](hostingde.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`HUAWEICLOUD`](huaweicloud.md) | ❌ | ✅ | ❌ | ❔ | ❌ | ✅ | ❔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`INTERNETBS`](internetbs.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | +| [`INWX`](inwx.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`LINODE`](linode.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`LOOPIA`](loopia.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | +| [`LUADNS`](luadns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`MSDNS`](msdns.md) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`MYTHICBEASTS`](mythicbeasts.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | +| [`NAMECHEAP`](namecheap.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ❌ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`NAMEDOTCOM`](namedotcom.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ❔ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | +| [`NETCUP`](netcup.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❌ | +| [`NETLIFY`](netlify.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`NS1`](ns1.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | +| [`OPENSRS`](opensrs.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | +| [`ORACLE`](oracle.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`OVH`](ovh.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | +| [`PACKETFRAME`](packetframe.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❔ | +| [`PORKBUN`](porkbun.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`POWERDNS`](powerdns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❔ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`REALTIMEREGISTER`](realtimeregister.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ | +| [`ROUTE53`](route53.md) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | +| [`RWTH`](rwth.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ✅ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | +| [`SAKURACLOUD`](sakuracloud.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | +| [`SOFTLAYER`](softlayer.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | +| [`TRANSIP`](transip.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | +| [`VULTR`](vultr.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ✅ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | + + +### Providers with "official support" + +Official support means: + +* New releases will block if any of these providers do not pass integration tests. +* The DNSControl maintainers prioritize fixing bugs in these providers (though we gladly accept PRs). +* New features will work on these providers (unless the provider does not support it). +* StackOverflow maintains test accounts with those providers for running integration tests. + +Providers in this category and their maintainers are: + +|Name|Maintainer| +|---|---| +|[`AZURE_DNS`](provider/azure_dns.md)|@vatsalyagoel| +|[`BIND`](provider/bind.md)|@tlimoncelli| +|[`CLOUDFLAREAPI`](provider/cloudflareapi.md)|@tresni| +|[`CSCGLOBAL`](provider/cscglobal.md)|@mikenz| +|[`GCLOUD`](provider/gcloud.md)|@riyadhalnur| +|[`MSDNS`](provider/msdns.md)|@tlimoncelli| +|[`ROUTE53`](provider/route53.md)|@tresni| + +### Providers with "contributor support" + +The other providers are supported by community members, usually the +original contributor. + +Due to the large number of DNS providers in the world, the DNSControl +team can not support and test all providers. Test frameworks are +provided to help community members support their code independently. + +Expectations of maintainers: + +* Maintainers are expected to support their provider and/or help find a new maintainer. +* Maintainers should set up test accounts and periodically verify that all tests pass (`pkg/js/parse_tests` and `integrationTest`). +* Contributors are encouraged to add new tests and refine old ones. (Test-driven development is encouraged.) +* Bugs will be referred to the maintainer or their designate. +* Maintainers must be responsible to bug reports and PRs. If a maintainer is unresponsive for more than 2 months, we will consider disabling the provider. First we will put out a call for new maintainer. If nobody volunteers, the provider may be disabled. +* Tom needs to know your real email address. Please email tlimoncelli at stack over flow dot com so he has it. + +Providers in this category and their maintainers are: + +|Name|Maintainer| +|---|---| +|[`AZURE_PRIVATE_DNS`](provider/azure_private_dns.md)|@matthewmgamble| +|[`AKAMAIEDGEDNS`](provider/akamaiedgedns.md)|@edglynes| +|[`AXFRDDNS`](provider/axfrddns.md)|@hnrgrgr| +|[`BUNNY_DNS`](provider/bunny_dns.md)|@ppmathis| +|[`CLOUDFLAREAPI`](provider/cloudflareapi.md)|@tresni| +|[`CLOUDNS`](provider/cloudns.md)|@pragmaton| +|[`CNR`](provider/cnr.md)|@KaiSchwarz-cnic| +|[`CSCGLOBAL`](provider/cscglobal.md)|@Air-New-Zealand| +|[`DESEC`](provider/desec.md)|@D3luxee| +|[`DIGITALOCEAN`](provider/digitalocean.md)|@Deraen| +|[`DNSIMPLE`](provider/dnsimple.md)|@onlyhavecans| +|[`DNSMADEEASY`](provider/dnsmadeeasy.md)|@vojtad| +|[`DNSOVERHTTPS`](provider/dnsoverhttps.md)|@mikenz| +|[`DOMAINNAMESHOP`](provider/domainnameshop.md)|@SimenBai| +|[`EASYNAME`](provider/easyname.md)|@tresni| +|[`EXOSCALE`](provider/exoscale.md)|@pierre-emmanuelJ| +|[`GANDI_V5`](provider/gandi_v5.md)|@TomOnTime| +|[`GCORE`](provider/gcore.md)|@xddxdd| +|[`HEDNS`](provider/hedns.md)|@rblenkinsopp| +|[`HETZNER`](provider/hetzner.md)|@das7pad| +|[`HEXONET`](provider/hexonet.md)|@KaiSchwarz-cnic| +|[`HOSTINGDE`](provider/hostingde.md)|@membero| +|[`HUAWEICLOUD`](provider/huaweicloud.md)|@huihuimoe| +|[`INTERNETBS`](provider/internetbs.md)|@pragmaton| +|[`INWX`](provider/inwx.md)|@patschi| +|[`LINODE`](provider/linode.md)|@koesie10| +|[`LOOPIA`](provider/loopia.md)|@systemcrash| +|[`LUADNS`](provider/luadns.md)|@riku22| +|[`NAMECHEAP`](provider/namecheap.md)|@willpower232| +|[`NETCUP`](provider/netcup.md)|@kordianbruck| +|[`NETLIFY`](provider/netlify.md)|@SphericalKat| +|[`NS1`](provider/ns1.md)|@costasd| +|[`OPENSRS`](provider/opensrs.md)|@philhug| +|[`ORACLE`](provider/oracle.md)|@kallsyms| +|[`OVH`](provider/ovh.md)|@masterzen| +|[`PACKETFRAME`](provider/packetframe.md)|@hamptonmoore| +|[`POWERDNS`](provider/powerdns.md)|@jpbede| +|[`REALTIMEREGISTER`](provider/realtimeregister.md)|@PJEilers| +|[`ROUTE53`](provider/route53.md)|@tresni| +|[`RWTH`](provider/rwth.md)|@MisterErwin| +|[`SAKURACLOUD`](provider/sakuracloud.md)|@ttkzw| +|[`SOFTLAYER`](provider/softlayer.md)|@jamielennox| +|[`TRANSIP`](provider/transip.md)|@blackshadev| +|[`VULTR`](provider/vultr.md)|@pgaskin| + +### Requested providers + +We have received requests for the following providers. If you would like to contribute +code to support this provider, we'd be glad to help in any way. + +* [1984 Hosting](https://github.com/StackExchange/dnscontrol/issues/1251) (#1251) +* [Alibaba Cloud DNS](https://github.com/StackExchange/dnscontrol/issues/420)(#420) +* [Constellix (DNSMadeEasy)](https://github.com/StackExchange/dnscontrol/issues/842) (#842) +* [CoreDNS](https://github.com/StackExchange/dnscontrol/issues/1284) (#1284) +* [EU.ORG](https://github.com/StackExchange/dnscontrol/issues/1176) (#1176) +* [EnCirca](https://github.com/StackExchange/dnscontrol/issues/1048) (#1048) +* [GoDaddy](https://github.com/StackExchange/dnscontrol/issues/2596) (#2596) +* [Imperva](https://github.com/StackExchange/dnscontrol/issues/1484) (#1484) +* [Infoblox DNS](https://github.com/StackExchange/dnscontrol/issues/1077) (#1077) +* [Joker.com](https://github.com/StackExchange/dnscontrol/issues/854) (#854) +* [Plesk](https://github.com/StackExchange/dnscontrol/issues/2261) (#2261) +* [RcodeZero](https://github.com/StackExchange/dnscontrol/issues/884) (#884) +* [SynergyWholesale](https://github.com/StackExchange/dnscontrol/issues/1605) (#1605) +* [UltraDNS by Neustar / CSCGlobal](https://github.com/StackExchange/dnscontrol/issues/1533) (#1533) + +#### Q: Why are the above GitHub issues marked "closed"? + +A: Following [the bug triage process](bug-triage.md), the request +is closed once it is added to this list. If someone chooses to implement the +provider, they re-open the issue. + +#### Q: Would someone write a provider for me? + +A: The maintainer of DNSControl does not write new providers. New providers +are contributed by the community. + +DNSControl tries to make writing a provider as easy as possible. DNSControl +does most of the work for you, you only have to write code to authenticate, +download DNS records, and perform create/modify/delete operations on those +records. Please read the directions for [Writing new DNS +providers](writing-providers.md). The DNS maintainers will gladly +coach you through the process. diff --git a/documentation/providers.md b/documentation/providers.md deleted file mode 100644 index 380564f21..000000000 --- a/documentation/providers.md +++ /dev/null @@ -1,196 +0,0 @@ -# Service Providers - -## Provider Features - -The table below shows various features supported, or not supported by DNSControl providers. -This table is automatically generated from metadata supplied by the provider when they register themselves inside dnscontrol. - -An empty space may indicate the feature is not supported by a provider, or it may simply mean -the feature has not been investigated and implemented yet. If a feature you need is missing from -a provider that supports it, we'd love your contribution to ensure it works correctly and add it to this matrix. - -If a feature is definitively not supported for whatever reason, we would also like a PR to clarify why it is not supported, and fill in this entire matrix. - - -| Provider name | Official Support | DNS Provider | Registrar | Concurrency Verified | [`ALIAS`](language-reference/domain-modifiers/ALIAS.md) | [`CAA`](language-reference/domain-modifiers/CAA.md) | [`AUTODNSSEC`](language-reference/domain-modifiers/AUTODNSSEC_ON.md) | [`HTTPS`](language-reference/domain-modifiers/HTTPS.md) | [`LOC`](language-reference/domain-modifiers/LOC.md) | [`NAPTR`](language-reference/domain-modifiers/NAPTR.md) | [`PTR`](language-reference/domain-modifiers/PTR.md) | [`SOA`](language-reference/domain-modifiers/SOA.md) | [`SRV`](language-reference/domain-modifiers/SRV.md) | [`SSHFP`](language-reference/domain-modifiers/SSHFP.md) | [`SVCB`](language-reference/domain-modifiers/SVCB.md) | [`TLSA`](language-reference/domain-modifiers/TLSA.md) | [`DS`](language-reference/domain-modifiers/DS.md) | [`DHCID`](language-reference/domain-modifiers/DHCID.md) | [`DNAME`](language-reference/domain-modifiers/DNAME.md) | [`DNSKEY`](language-reference/domain-modifiers/DNSKEY.md) | dual host | create-domains | get-zones | -| ------------- | ---------------- | ------------ | --------- | -------------------- | ------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | --------------------------------------------------------- | --------- | -------------- | --------- | -| [`AKAMAIEDGEDNS`](provider/akamaiedgedns.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`AUTODNS`](provider/autodns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`AXFRDDNS`](provider/axfrddns.md) | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | -| [`AZURE_DNS`](provider/azure_dns.md) | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`AZURE_PRIVATE_DNS`](provider/azure_private_dns.md) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`BIND`](provider/bind.md) | ✅ | ✅ | ❌ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| [`BUNNY_DNS`](provider/bunny_dns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ | -| [`CLOUDFLAREAPI`](provider/cloudflareapi.md) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | ✅ | -| [`CLOUDNS`](provider/cloudns.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ✅ | ❔ | ❔ | ✅ | ✅ | -| [`CNR`](provider/cnr.md) | ❌ | ✅ | ✅ | ✅ | ❌ | ✅ | ❔ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❔ | ❌ | ❌ | ❔ | ✅ | ✅ | ✅ | -| [`CSCGLOBAL`](provider/cscglobal.md) | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ✅ | -| [`DESEC`](provider/desec.md) | ❌ | ✅ | ❌ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ✅ | ❔ | ✅ | ✅ | -| [`DIGITALOCEAN`](provider/digitalocean.md) | ❌ | ✅ | ❌ | ✅ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | -| [`DNSIMPLE`](provider/dnsimple.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ❌ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`DNSMADEEASY`](provider/dnsmadeeasy.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`DNSOVERHTTPS`](provider/dnsoverhttps.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | -| [`DOMAINNAMESHOP`](provider/domainnameshop.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | -| [`DYNADOT`](provider/dynadot.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | -| [`EASYNAME`](provider/easyname.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | -| [`EXOSCALE`](provider/exoscale.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❔ | -| [`GANDI_V5`](provider/gandi_v5.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ✅ | -| [`GCLOUD`](provider/gcloud.md) | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`GCORE`](provider/gcore.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ✅ | ❌ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`HEDNS`](provider/hedns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`HETZNER`](provider/hetzner.md) | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`HEXONET`](provider/hexonet.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ❔ | -| [`HOSTINGDE`](provider/hostingde.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`HUAWEICLOUD`](provider/huaweicloud.md) | ❌ | ✅ | ❌ | ❔ | ❌ | ✅ | ❔ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`INTERNETBS`](provider/internetbs.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | -| [`INWX`](provider/inwx.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`LINODE`](provider/linode.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`LOOPIA`](provider/loopia.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | ❔ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | -| [`LUADNS`](provider/luadns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`MSDNS`](provider/msdns.md) | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`MYTHICBEASTS`](provider/mythicbeasts.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | -| [`NAMECHEAP`](provider/namecheap.md) | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ❌ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`NAMEDOTCOM`](provider/namedotcom.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ❔ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | -| [`NETCUP`](provider/netcup.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❌ | -| [`NETLIFY`](provider/netlify.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❔ | ✅ | ❌ | ❔ | ❌ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`NS1`](provider/ns1.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ❔ | ✅ | ❔ | ✅ | ✅ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | -| [`OPENSRS`](provider/opensrs.md) | ❌ | ❌ | ✅ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | -| [`ORACLE`](provider/oracle.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ❔ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`OVH`](provider/ovh.md) | ❌ | ✅ | ✅ | ❌ | ❌ | ✅ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | ✅ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ✅ | ❌ | ✅ | -| [`PACKETFRAME`](provider/packetframe.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ❔ | -| [`PORKBUN`](provider/porkbun.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ❔ | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❔ | ✅ | ❌ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`POWERDNS`](provider/powerdns.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ❔ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ❔ | ✅ | ✅ | ✅ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`REALTIMEREGISTER`](provider/realtimeregister.md) | ❌ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❔ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ❔ | ✅ | ❌ | ❌ | ❔ | ❔ | ❌ | ✅ | ✅ | -| [`ROUTE53`](provider/route53.md) | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ✅ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | ✅ | -| [`RWTH`](provider/rwth.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❔ | ❔ | ❌ | ❌ | ✅ | ❔ | ✅ | ✅ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❌ | ✅ | -| [`SAKURACLOUD`](provider/sakuracloud.md) | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | -| [`SOFTLAYER`](provider/softlayer.md) | ❌ | ✅ | ❌ | ❌ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | ❔ | ❔ | ✅ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❔ | ❌ | ❔ | -| [`TRANSIP`](provider/transip.md) | ❌ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | -| [`VULTR`](provider/vultr.md) | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ❔ | ❔ | ❌ | ❔ | ❌ | ❔ | ✅ | ✅ | ❔ | ❌ | ❔ | ❔ | ❔ | ❔ | ❔ | ✅ | ✅ | - - -### Providers with "official support" - -Official support means: - -* New releases will block if any of these providers do not pass integration tests. -* The DNSControl maintainers prioritize fixing bugs in these providers (though we gladly accept PRs). -* New features will work on these providers (unless the provider does not support it). -* StackOverflow maintains test accounts with those providers for running integration tests. - -Providers in this category and their maintainers are: - -|Name|Maintainer| -|---|---| -|[`AZURE_DNS`](provider/azure_dns.md)|@vatsalyagoel| -|[`BIND`](provider/bind.md)|@tlimoncelli| -|[`CLOUDFLAREAPI`](provider/cloudflareapi.md)|@tresni| -|[`CSCGLOBAL`](provider/cscglobal.md)|@mikenz| -|[`GCLOUD`](provider/gcloud.md)|@riyadhalnur| -|[`MSDNS`](provider/msdns.md)|@tlimoncelli| -|[`ROUTE53`](provider/route53.md)|@tresni| - -### Providers with "contributor support" - -The other providers are supported by community members, usually the -original contributor. - -Due to the large number of DNS providers in the world, the DNSControl -team can not support and test all providers. Test frameworks are -provided to help community members support their code independently. - -Expectations of maintainers: - -* Maintainers are expected to support their provider and/or help find a new maintainer. -* Maintainers should set up test accounts and periodically verify that all tests pass (`pkg/js/parse_tests` and `integrationTest`). -* Contributors are encouraged to add new tests and refine old ones. (Test-driven development is encouraged.) -* Bugs will be referred to the maintainer or their designate. -* Maintainers must be responsible to bug reports and PRs. If a maintainer is unresponsive for more than 2 months, we will consider disabling the provider. First we will put out a call for new maintainer. If nobody volunteers, the provider may be disabled. -* Tom needs to know your real email address. Please email tlimoncelli at stack over flow dot com so he has it. - -Providers in this category and their maintainers are: - -|Name|Maintainer| -|---|---| -|[`AZURE_PRIVATE_DNS`](provider/azure_private_dns.md)|@matthewmgamble| -|[`AKAMAIEDGEDNS`](provider/akamaiedgedns.md)|@edglynes| -|[`AXFRDDNS`](provider/axfrddns.md)|@hnrgrgr| -|[`BUNNY_DNS`](provider/bunny_dns.md)|@ppmathis| -|[`CLOUDFLAREAPI`](provider/cloudflareapi.md)|@tresni| -|[`CLOUDNS`](provider/cloudns.md)|@pragmaton| -|[`CNR`](provider/cnr.md)|@KaiSchwarz-cnic| -|[`CSCGLOBAL`](provider/cscglobal.md)|@Air-New-Zealand| -|[`DESEC`](provider/desec.md)|@D3luxee| -|[`DIGITALOCEAN`](provider/digitalocean.md)|@Deraen| -|[`DNSIMPLE`](provider/dnsimple.md)|@onlyhavecans| -|[`DNSMADEEASY`](provider/dnsmadeeasy.md)|@vojtad| -|[`DNSOVERHTTPS`](provider/dnsoverhttps.md)|@mikenz| -|[`DOMAINNAMESHOP`](provider/domainnameshop.md)|@SimenBai| -|[`EASYNAME`](provider/easyname.md)|@tresni| -|[`EXOSCALE`](provider/exoscale.md)|@pierre-emmanuelJ| -|[`GANDI_V5`](provider/gandi_v5.md)|@TomOnTime| -|[`GCORE`](provider/gcore.md)|@xddxdd| -|[`HEDNS`](provider/hedns.md)|@rblenkinsopp| -|[`HETZNER`](provider/hetzner.md)|@das7pad| -|[`HEXONET`](provider/hexonet.md)|@KaiSchwarz-cnic| -|[`HOSTINGDE`](provider/hostingde.md)|@membero| -|[`HUAWEICLOUD`](provider/huaweicloud.md)|@huihuimoe| -|[`INTERNETBS`](provider/internetbs.md)|@pragmaton| -|[`INWX`](provider/inwx.md)|@patschi| -|[`LINODE`](provider/linode.md)|@koesie10| -|[`LOOPIA`](provider/loopia.md)|@systemcrash| -|[`LUADNS`](provider/luadns.md)|@riku22| -|[`NAMECHEAP`](provider/namecheap.md)|@willpower232| -|[`NETCUP`](provider/netcup.md)|@kordianbruck| -|[`NETLIFY`](provider/netlify.md)|@SphericalKat| -|[`NS1`](provider/ns1.md)|@costasd| -|[`OPENSRS`](provider/opensrs.md)|@philhug| -|[`ORACLE`](provider/oracle.md)|@kallsyms| -|[`OVH`](provider/ovh.md)|@masterzen| -|[`PACKETFRAME`](provider/packetframe.md)|@hamptonmoore| -|[`POWERDNS`](provider/powerdns.md)|@jpbede| -|[`REALTIMEREGISTER`](provider/realtimeregister.md)|@PJEilers| -|[`ROUTE53`](provider/route53.md)|@tresni| -|[`RWTH`](provider/rwth.md)|@MisterErwin| -|[`SAKURACLOUD`](provider/sakuracloud.md)|@ttkzw| -|[`SOFTLAYER`](provider/softlayer.md)|@jamielennox| -|[`TRANSIP`](provider/transip.md)|@blackshadev| -|[`VULTR`](provider/vultr.md)|@pgaskin| - -### Requested providers - -We have received requests for the following providers. If you would like to contribute -code to support this provider, we'd be glad to help in any way. - -* [1984 Hosting](https://github.com/StackExchange/dnscontrol/issues/1251) (#1251) -* [Alibaba Cloud DNS](https://github.com/StackExchange/dnscontrol/issues/420)(#420) -* [Constellix (DNSMadeEasy)](https://github.com/StackExchange/dnscontrol/issues/842) (#842) -* [CoreDNS](https://github.com/StackExchange/dnscontrol/issues/1284) (#1284) -* [EU.ORG](https://github.com/StackExchange/dnscontrol/issues/1176) (#1176) -* [EnCirca](https://github.com/StackExchange/dnscontrol/issues/1048) (#1048) -* [GoDaddy](https://github.com/StackExchange/dnscontrol/issues/2596) (#2596) -* [Imperva](https://github.com/StackExchange/dnscontrol/issues/1484) (#1484) -* [Infoblox DNS](https://github.com/StackExchange/dnscontrol/issues/1077) (#1077) -* [Joker.com](https://github.com/StackExchange/dnscontrol/issues/854) (#854) -* [Plesk](https://github.com/StackExchange/dnscontrol/issues/2261) (#2261) -* [RcodeZero](https://github.com/StackExchange/dnscontrol/issues/884) (#884) -* [SynergyWholesale](https://github.com/StackExchange/dnscontrol/issues/1605) (#1605) -* [UltraDNS by Neustar / CSCGlobal](https://github.com/StackExchange/dnscontrol/issues/1533) (#1533) - -#### Q: Why are the above GitHub issues marked "closed"? - -A: Following [the bug triage process](bug-triage.md), the request -is closed once it is added to this list. If someone chooses to implement the -provider, they re-open the issue. - -#### Q: Would someone write a provider for me? - -A: The maintainer of DNSControl does not write new providers. New providers -are contributed by the community. - -DNSControl tries to make writing a provider as easy as possible. DNSControl -does most of the work for you, you only have to write code to authenticate, -download DNS records, and perform create/modify/delete operations on those -records. Please read the directions for [Writing new DNS -providers](writing-providers.md). The DNS maintainers will gladly -coach you through the process. diff --git a/documentation/writing-providers.md b/documentation/writing-providers.md index f9b17129a..5f2626aa3 100644 --- a/documentation/writing-providers.md +++ b/documentation/writing-providers.md @@ -8,7 +8,7 @@ and the system takes care of the rest. Please do note that if you submit a new provider you will be assigned bugs related to the provider in the future (unless you designate someone else as the maintainer). More details -[here](providers.md). +[here](provider/index.md). Please follow the [DNSControl Code Style Guide](styleguide-code.md) and the [DNSControl Documentation Style Guide](styleguide-doc.md). @@ -219,7 +219,7 @@ an automated way to test for this bug. The manual steps are here in * Add the name of the provider to the PROVIDERS list. * Edit `documentation/providers.md`: * Remove the provider from the `Requested providers` list (near the end of the doc) (if needed). - * Add the new provider to the [Providers with "contributor support"](providers.md#providers-with-contributor-support) section. + * Add the new provider to the [Providers with "contributor support"](provider/index.md#providers-with-contributor-support) section. * Edit `documentation/SUMMARY.md`: * Add the provider to the "Providers" list. * Create `documentation/provider/PROVIDERNAME.md`: @@ -367,7 +367,7 @@ These are the things we'll be checking when you submit the PR. Please try to co 4. Verify you're using the most recent version of anything you import. (See [Step 12](#step-12-dependencies)) 5. Re-run the [integration test](#step-7-integration-test) one last time. * Post the results as a comment to your PR. -6. Re-read the [maintainer's responsibilities](providers.md#providers-with-contributor-support) bullet list. By submitting a provider you agree to maintain it, respond to bugs, periodically re-run the integration test to verify nothing has broken, and if we don't hear from you for 2 months we may disable the provider. +6. Re-read the [maintainer's responsibilities](provider/index.md#providers-with-contributor-support) bullet list. By submitting a provider you agree to maintain it, respond to bugs, periodically re-run the integration test to verify nothing has broken, and if we don't hear from you for 2 months we may disable the provider. ## Step 15: Submit a PR