1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

Merge branch 'master' into tlim_corrector

This commit is contained in:
Tom Limoncelli
2023-03-15 17:36:37 -04:00
committed by GitHub
11 changed files with 109 additions and 101 deletions

View File

@ -18,19 +18,18 @@ Windows). The provider model is extensible, so more providers can be added.
Currently supported DNS providers:
- AWS Route 53
- AXFR+DDNS
- Active Directory (Deprecated, see Microsoft DNS)
- Akamai Edge DNS
- AutoDNS
- AWS Route 53
- AXFR+DDNS
- Azure DNS
- BIND
- ClouDNS
- Cloudflare
- ClouDNS
- deSEC
- DigitalOcean
- DNS Made Easy
- DNSimple
- DigitalOcean
- Domainnameshop (Domeneshop)
- Exoscale
- Gandi
@ -45,13 +44,13 @@ Currently supported DNS providers:
- Loopia
- LuaDNS
- Microsoft Windows Server DNS Server
- NS1
- Name.com
- Namecheap
- Name.com
- Netcup
- Netlify
- OVH
- NS1
- Oracle Cloud
- OVH
- Packetframe
- Porkbun
- PowerDNS
@ -71,10 +70,10 @@ Currently supported Domain Registrars:
- hosting.de
- Internet.bs
- INWX
- Name.com
- Namecheap
- OVH
- Name.com
- OpenSRS
- OVH
At Stack Overflow, we use this system to manage hundreds of domains
and subdomains across multiple registrars and DNS providers.

View File

@ -1,12 +1,13 @@
package main
import (
"github.com/StackExchange/dnscontrol/v3/providers"
_ "github.com/StackExchange/dnscontrol/v3/providers/_all"
"github.com/fbiville/markdown-table-formatter/pkg/markdown"
"os"
"sort"
"strings"
"github.com/StackExchange/dnscontrol/v3/providers"
_ "github.com/StackExchange/dnscontrol/v3/providers/_all"
"github.com/fbiville/markdown-table-formatter/pkg/markdown"
)
func generateFeatureMatrix() error {
@ -72,7 +73,7 @@ func featureEmoji(
func matrixData() *FeatureMatrix {
const (
OfficialSupport = "Official Support"
OfficialSupport = "Official Support" // vs. community supported
ProviderDNSProvider = "DNS Provider"
ProviderRegistrar = "Registrar"
DomainModifierAlias = "ALIAS"

View File

@ -34,15 +34,19 @@ var delimiterRegex = regexp.MustCompile(`(?m)^---\n`)
func parseFrontMatter(content string) (map[string]interface{}, string, error) {
delimiterIndices := delimiterRegex.FindAllStringIndex(content, 2)
startIndex := delimiterIndices[0][0]
endIndex := delimiterIndices[1][0]
yamlString := content[startIndex+4 : endIndex]
var frontMatter map[string]interface{}
err := yaml.Unmarshal([]byte(yamlString), &frontMatter)
if err != nil {
return nil, "", err
if len(delimiterIndices) > 0 {
startIndex := delimiterIndices[0][0]
endIndex := delimiterIndices[1][0]
yamlString := content[startIndex+4 : endIndex]
var frontMatter map[string]interface{}
err := yaml.Unmarshal([]byte(yamlString), &frontMatter)
if err != nil {
return nil, "", err
}
return frontMatter, content[endIndex+4:], nil
} else {
return nil, "", fmt.Errorf("Failed to parse file. Remove it and try again.")
}
return frontMatter, content[endIndex+4:], nil
}
var returnTypes = map[string]string{
@ -81,8 +85,8 @@ func generateFunctionTypes() (string, error) {
}
frontMatter, body, err := parseFrontMatter(string(content))
if err != nil {
println("Error parsing front matter in", fPath)
return "", err
println("Error parsing front matter in", fPath, "error: ", err.Error())
continue
}
if frontMatter["ts_ignore"] == true {
continue

View File

@ -2240,7 +2240,7 @@ declare function R53_ZONE(zone_id: string): DomainModifier & RecordModifier;
* [multi-string]: https://tools.ietf.org/html/rfc4408#section-3.1.3
* [record-size]: https://tools.ietf.org/html/rfc4408#section-3.1.4
*
* `SPR_BUILDER()` returns multiple `TXT()` records:
* `SPF_BUILDER()` returns multiple `TXT()` records:
*
* * `TXT("@", "v=spf1 .... ~all")`
* * This is the optimized configuration.

View File

@ -88,6 +88,7 @@
* [Providers](providers.md)
* [Akamai Edge DNS](providers/akamaiedgedns.md)
* [Amazon Route 53](providers/route53.md)
* [AutoDNS](providers/autodns.md)
* [AXFR+DDNS](providers/axfrddns.md)
* [Azure DNS](providers/azure_dns.md)
@ -97,18 +98,18 @@
* [CSC Global](providers/cscglobal.md)
* [deSEC](providers/desec.md)
* [DigitalOcean](providers/digitalocean.md)
* [DNSimple](providers/dnsimple.md)
* [DNS Made Simple](providers/dnsmadeeasy.md)
* [DNSimple](providers/dnsimple.md)
* [DNS-over-HTTPS](providers/dnsoverhttps.md)
* [DOMAINNAMESHOP](providers/domainnameshop.md)
* [easyname](providers/easyname.md)
* [Gandi_v5](providers/gandi_v5.md)
* [Google Cloud DNS](providers/gcloud.md)
* [Gcore](providers/gcore.md)
* [Hurricane Electric DNS](providers/hedns.md)
* [Google Cloud DNS](providers/gcloud.md)
* [Hetzner DNS Console](providers/hetzner.md)
* [HEXONET](providers/hexonet.md)
* [hosting.de](providers/hostingde.md)
* [Hurricane Electric DNS](providers/hedns.md)
* [Internet.bs](providers/internetbs.md)
* [INWX](providers/inwx.md)
* [Linode](providers/linode.md)
@ -125,7 +126,6 @@
* [Packetframe](providers/packetframe.md)
* [Porkbun](providers/porkbun.md)
* [PowerDNS](providers/powerdns.md)
* [Amazon Route 53](providers/route53.md)
* [RWTH DNS-Admin](providers/rwth.md)
* [SoftLayer DNS](providers/softlayer.md)
* [TransIP](providers/transip.md)

View File

@ -136,7 +136,7 @@ The parameters are:
[multi-string]: https://tools.ietf.org/html/rfc4408#section-3.1.3
[record-size]: https://tools.ietf.org/html/rfc4408#section-3.1.4
`SPR_BUILDER()` returns multiple `TXT()` records:
`SPF_BUILDER()` returns multiple `TXT()` records:
* `TXT("@", "v=spf1 .... ~all")`
* This is the optimized configuration.

View File

@ -76,8 +76,11 @@ Providers in this category and their maintainers are:
|---|---|
|`AZURE_DNS`|@vatsalyagoel|
|`BIND`|@tlimoncelli|
|`CLOUDFLAREAPI`|@tresni|
|`CSCGLOBAL`|@mikenz|
|`GCLOUD`|@riyadhalnur|
|`NAMEDOTCOM`|@tlimoncelli|
|`MSDNS`|@tlimoncelli|
|`ROUTE53`|@tresni|
### Providers with "contributor support"
@ -100,16 +103,16 @@ Providers in this category and their maintainers are:
|Name|Maintainer|
|---|---|
|`AXFRDDNS`|@hnrgrgr|
|`AKAMAIEDGEDNS`|@svernick|
|`CLOUDNS`|@pragmaton|
|`AXFRDDNS`|@hnrgrgr|
|`CLOUDFLAREAPI`|@tresni|
|`CLOUDNS`|@pragmaton|
|`CSCGLOBAL`|@Air-New-Zealand|
|`DESEC`|@D3luxee|
|`DIGITALOCEAN`|@Deraen|
|`DNSOVERHTTPS`|@mikenz|
|`DNSIMPLE`|@onlyhavecans|
|`DNSMADEEASY`|@vojtad|
|`DNSOVERHTTPS`|@mikenz|
|`DOMAINNAMESHOP`|@SimenBai|
|`EASYNAME`|@tresni|
|`EXOSCALE`|@pierre-emmanuelJ|
@ -132,8 +135,8 @@ Providers in this category and their maintainers are:
|`OVH`|@masterzen|
|`PACKETFRAME`|@hamptonmoore|
|`POWERDNS`|@jpbede|
|`RWTH`|@MisterErwin|
|`ROUTE53`|@tresni|
|`RWTH`|@MisterErwin|
|`SOFTLAYER`|@jamielennox|
|`TRANSIP`|@blackshadev|
|`VULTR`|@pgaskin|

View File

@ -310,6 +310,7 @@ Here are some last-minute things to check before you submit your PR.
2. Make sure all appropriate documentation is current. (See [Step 8](#step-8-manual-tests))
3. Check that dependencies are current (See [Step 13](#step-13-dependencies))
4. Re-run the integration test one last time (See [Step 7](#step-7-integration-test))
5. Re-read the [maintainer's responsibilities](providers.md) bullet list. By submitting a provider you agree to maintain it, respond to bugs, perioidically 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: After the PR is merged

View File

@ -1,9 +1,18 @@
{
"AKAMAIEDGEDNS": {
"access_token": "$AED_ACCESS_TOKEN",
"client_secret": "$AED_CLIENT_SECRET",
"client_token": "$AED_CLIENT_TOKEN",
"contract_id": "$AED_CONTRACT_ID",
"domain": "$AED_DOMAIN",
"group_id": "$AED_GROUP_ID",
"host": "$AED_HOST"
},
"AUTODNS": {
"username": "$AUTODNS_USERNAME",
"password": "$AUTODNS_PASSWORD",
"context": "$AUTODNS_CONTEXT",
"domain": "$AUTODNS_DOMAIN"
"domain": "$AUTODNS_DOMAIN",
"password": "$AUTODNS_PASSWORD",
"username": "$AUTODNS_USERNAME"
},
"AXFRDDNS": {
"domain": "$AXFRDDNS_DOMAIN",
@ -13,29 +22,23 @@
"update-key": "$AXFRDDNS_UPDATE_KEY"
},
"AZURE_DNS": {
"TYPE": "AZURE_DNS",
"ClientID": "$AZURE_DNS_CLIENT_ID",
"ClientSecret": "$AZURE_DNS_CLIENT_SECRET",
"ResourceGroup": "$AZURE_DNS_RESOURCE_GROUP",
"SubscriptionID": "$AZURE_DNS_SUBSCRIPTION_ID",
"TYPE": "AZURE_DNS",
"TenantID": "$AZURE_DNS_TENANT_ID",
"domain": "$AZURE_DNS_DOMAIN"
},
"BIND": {
"domain": "$BIND_DOMAIN"
},
"CSCGLOBAL": {
"api-key": "$CSCGLOBAL_APIKEY",
"user-token": "$CSCGLOBAL_USERTOKEN",
"notification_emails": "$CSCGLOBAL_NOTIFICATION",
"domain": "$CSCGLOBAL_DOMAIN"
},
"CLOUDFLAREAPI": {
"accountid": "$CLOUDFLAREAPI_ACCOUNTID",
"apikey": "$CLOUDFLAREAPI_KEY",
"apitoken": "$CLOUDFLAREAPI_TOKEN",
"apiuser": "$CLOUDFLAREAPI_USER",
"domain": "$CLOUDFLAREAPI_DOMAIN",
"accountid": "$CLOUDFLAREAPI_ACCOUNTID"
"domain": "$CLOUDFLAREAPI_DOMAIN"
},
"CLOUDFLAREAPI_OLD": {
"apikey": "$CF_KEY",
@ -45,9 +48,15 @@
},
"CLOUDNS": {
"auth-id": "$CLOUDNS_AUTH_ID",
"sub-auth-id": "$CLOUDNS_SUB_AUTH_ID",
"auth-password": "$CLOUDNS_AUTH_PASSWORD",
"domain": "$CLOUDNS_DOMAIN"
"domain": "$CLOUDNS_DOMAIN",
"sub-auth-id": "$CLOUDNS_SUB_AUTH_ID"
},
"CSCGLOBAL": {
"api-key": "$CSCGLOBAL_APIKEY",
"domain": "$CSCGLOBAL_DOMAIN",
"notification_emails": "$CSCGLOBAL_NOTIFICATION",
"user-token": "$CSCGLOBAL_USERTOKEN"
},
"DESEC": {
"auth-token": "$DESEC_TOKEN",
@ -63,26 +72,22 @@
"token": "$DNSIMPLE_TOKEN"
},
"DNSMADEEASY": {
"api_key": "$DNSMADEEASY_API_KEY",
"domain": "$DNSMADEEASY_DOMAIN",
"sandbox": "true",
"api_key": "$DNSMADEEASY_API_KEY",
"secret_key": "$DNSMADEEASY_SECRET_KEY"
},
"AKAMAIEDGEDNS": {
"client_secret": "$AED_CLIENT_SECRET",
"host": "$AED_HOST",
"access_token": "$AED_ACCESS_TOKEN",
"client_token": "$AED_CLIENT_TOKEN",
"contract_id": "$AED_CONTRACT_ID",
"group_id": "$AED_GROUP_ID",
"domain": "$AED_DOMAIN"
"DOMAINNAMESHOP": {
"domain": "$DOMAINNAMESHOP_DOMAIN",
"secret": "$DOMAINNAMESHOP_SECRET",
"token": "$DOMAINNAMESHOP_TOKEN"
},
"EXOSCALE": {
"apikey": "$EXOSCALE_API_KEY",
"apizone": "ch-gva-2",
"dns-endpoint": "https://api.exoscale.com/v2",
"domain": "$EXOSCALE_DOMAIN",
"secretkey": "$EXOSCALE_SECRET_KEY",
"apizone": "ch-gva-2"
"secretkey": "$EXOSCALE_SECRET_KEY"
},
"GANDI_V5": {
"apikey": "$GANDI_V5_APIKEY",
@ -135,25 +140,25 @@
"token": "$LINODE_TOKEN"
},
"LOOPIA": {
"username": "$LOOPIA_USERNAME",
"domain": "$LOOPIA_DOMAIN",
"password": "$LOOPIA_PASSWORD",
"domain": "$LOOPIA_DOMAIN"
"username": "$LOOPIA_USERNAME"
},
"LUADNS": {
"apikey": "$LUADNS_APIKEY",
"domain": "$LUADNS_DOMAIN",
"email": "$LUADNS_EMAIL",
"apikey": "$LUADNS_APIKEY"
"email": "$LUADNS_EMAIL"
},
"MSDNS": {
"domain": "$MSDNS_DOMAIN",
"dnsserver": "$MSDNS_DNSSERVER",
"domain": "$MSDNS_DOMAIN",
"pssession": "$MSDNS_PSSESSION"
},
"NAMECHEAP": {
"BaseURL": "$NAMECHEAP_BASEURL",
"apikey": "$NAMECHEAP_KEY",
"apiuser": "$NAMECHEAP_USER",
"domain": "$NAMECHEAP_DOMAIN",
"BaseURL": "$NAMECHEAP_BASEURL"
"domain": "$NAMECHEAP_DOMAIN"
},
"NAMEDOTCOM": {
"apikey": "$NAMEDOTCOM_KEY",
@ -167,18 +172,23 @@
"customer-number": "$NETCUP_CUSTOMER_NUMBER",
"domain": "$NETCUP_DOMAIN"
},
"NETLIFY": {
"domain": "$NETLIFY_DOMAIN",
"slug": "$NETLIFY_ACCOUNT_SLUG",
"token": "$NETLIFY_TOKEN"
},
"NS1": {
"api_token": "$NS1_TOKEN",
"domain": "$NS1_DOMAIN"
},
"ORACLE": {
"user_ocid": "$ORACLE_USER_OCID",
"tenancy_ocid": "$ORACLE_TENANCY_OCID",
"fingerprint": "$ORACLE_FINGERPRINT",
"region": "$ORACLE_REGION",
"private_key": "$ORACLE_PRIVATE_KEY",
"compartment": "$ORACLE_COMPARTMENT",
"domain": "$ORACLE_DOMAIN"
"domain": "$ORACLE_DOMAIN",
"fingerprint": "$ORACLE_FINGERPRINT",
"private_key": "$ORACLE_PRIVATE_KEY",
"region": "$ORACLE_REGION",
"tenancy_ocid": "$ORACLE_TENANCY_OCID",
"user_ocid": "$ORACLE_USER_OCID"
},
"OVH": {
"app-key": "$OVH_APP_KEY",
@ -186,20 +196,20 @@
"consumer-key": "$OVH_CONSUMER_KEY",
"domain": "$OVH_DOMAIN"
},
"POWERDNS": {
"apiKey": "$POWERDNS_APIKEY",
"apiUrl": "$POWERDNS_APIURL",
"serverName": "$POWERDNS_SERVERNAME",
"domain": "$POWERDNS_DOMAIN"
},
"PACKETFRAME": {
"token": "$PACKETFRAME_TOKEN",
"domain": "$PACKETFRAME_DOMAIN"
"domain": "$PACKETFRAME_DOMAIN",
"token": "$PACKETFRAME_TOKEN"
},
"PORKBUN": {
"api_key": "$PORKBUN_API_KEY",
"secret_key": "$PORKBUN_SECRET_KEY",
"domain": "$PORKBUN_DOMAIN"
"domain": "$PORKBUN_DOMAIN",
"secret_key": "$PORKBUN_SECRET_KEY"
},
"POWERDNS": {
"apiKey": "$POWERDNS_APIKEY",
"apiUrl": "$POWERDNS_APIURL",
"domain": "$POWERDNS_DOMAIN",
"serverName": "$POWERDNS_SERVERNAME"
},
"ROUTE53": {
"KeyId": "$ROUTE53_KEY_ID",
@ -211,24 +221,14 @@
"domain": "$SL_DOMAIN",
"username": "$SL_USERNAME"
},
"TRANSIP": {
"AccessToken": "$TRANSIP_ACCESS_TOKEN",
"AccountName": "$TRANSIP_ACCOUNT_NAME",
"PrivateKey": "$TRANSIP_PRIVATE_KEY",
"domain": "$TRANSIP_DOMAIN"
},
"VULTR": {
"domain": "$VULTR_DOMAIN",
"token": "$VULTR_TOKEN"
},
"TRANSIP": {
"AccountName": "$TRANSIP_ACCOUNT_NAME",
"PrivateKey": "$TRANSIP_PRIVATE_KEY",
"AccessToken": "$TRANSIP_ACCESS_TOKEN",
"domain": "$TRANSIP_DOMAIN"
},
"DOMAINNAMESHOP": {
"token": "$DOMAINNAMESHOP_TOKEN",
"secret": "$DOMAINNAMESHOP_SECRET",
"domain": "$DOMAINNAMESHOP_DOMAIN"
},
"NETLIFY": {
"token": "$NETLIFY_TOKEN",
"slug": "$NETLIFY_ACCOUNT_SLUG",
"domain": "$NETLIFY_DOMAIN"
}
}

View File

@ -29,7 +29,7 @@ var features = providers.DocumentationNotes{
providers.CanUseTLSA: providers.Can(),
providers.DocCreateDomains: providers.Can(),
providers.DocDualHost: providers.Can(),
providers.DocOfficiallySupported: providers.Can(),
providers.DocOfficiallySupported: providers.Cannot(),
}
func init() {

View File

@ -27,7 +27,7 @@ var features = providers.DocumentationNotes{
providers.CanUseSRV: providers.Can("SRV records with empty targets are not supported"),
providers.DocCreateDomains: providers.Cannot("New domains require registration"),
providers.DocDualHost: providers.Can(),
providers.DocOfficiallySupported: providers.Can(),
providers.DocOfficiallySupported: providers.Cannot(),
}
func newReg(conf map[string]string) (providers.Registrar, error) {