Commit graph

50 commits

Author SHA1 Message Date
Patrik Kernstock
6e42ccfb31
INWX: Enable concurrency support (#3856)
Tested dnscontrol with `CanConcur()` enabled and seems to work fine.
Read #2873 to see what to do, and hope below is the right way to test.

```text
$ go build -race -o dnscontrol-race
$ ./dnscontrol-race version
v4.27.2-0.20251127184623-cf6b870052c0+dirty

$ dnscontrol-race preview
CONCURRENTLY checking for 16 zone(s)
SERIALLY checking for 6 zone(s)
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Serially checking for zone: "domainX.tld"
Waiting for concurrent checking(s) to complete...DONE
CONCURRENTLY gathering records of 16 zone(s)
SERIALLY gathering records of 6 zone(s)
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Serially Gathering: "domainX.tld"
Waiting for concurrent gathering(s) to complete...DONE
******************** Domain: domainX.tld
INFO#1: 4 records not being deleted because of NO_PURGE:
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
INFO#1: 4 records not being deleted because of NO_PURGE:
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
1 correction (PK-INWX)
INFO#1: 1 records not being deleted because of IGNORE*():
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
30 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
2 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
******************** Domain: domainX.tld
2 corrections (PK-INWX)
[...]
******************** Domain: domainX.tld
******************** Domain: domainX.tld
Done. 37 corrections.
```

Unfortunately INWX sandbox is sporadically still broken so `go test` is
of limited help:
```text
$ go test -v -verbose -profile INWX
=== RUN   TestDNSProviders
Testing Profile="INWX" (TYPE="INWX")
    helpers_test.go:122: INWX: Unable to login
--- FAIL: TestDNSProviders (30.03s)
=== RUN   TestDualProviders
Testing Profile="INWX" (TYPE="INWX")
    provider_test.go:50: Clearing everything
    provider_test.go:57: Adding test nameservers
    provider_test.go:44: #1:
        + CREATE dnscontrol-inwx.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        + CREATE dnscontrol-inwx.com NS ns2.example.com. ttl=300
    provider_test.go:60: Running again to ensure stability
    provider_test.go:76: Removing test nameservers
    provider_test.go:44: #1:
        - DELETE dnscontrol-inwx.com NS ns1.example.com. ttl=300
    provider_test.go:44: #2:
        - DELETE dnscontrol-inwx.com NS ns2.example.com. ttl=300
--- PASS: TestDualProviders (2.44s)
=== RUN   TestNameserverDots
Testing Profile="INWX" (TYPE="INWX")
=== RUN   TestNameserverDots/No_trailing_dot_in_nameserver
--- PASS: TestNameserverDots (0.30s)
    --- PASS: TestNameserverDots/No_trailing_dot_in_nameserver (0.00s)
=== RUN   TestDuplicateNameservers
Testing Profile="INWX" (TYPE="INWX")
    provider_test.go:145: Skipping. Deduplication logic is not implemented for this provider.
--- SKIP: TestDuplicateNameservers (0.35s)
FAIL
exit status 1
FAIL    github.com/StackExchange/dnscontrol/v4/integrationTest  33.127s
```
2025-12-01 09:13:06 -05:00
Kevin Ji
ec9a9e23af
CLOUDFLARE: Add LOC support (#3857)
Fixes #2798.

I tested this locally and it seems to update the `LOC` record correctly.
2025-12-01 09:12:10 -05:00
Sukka
daf5a7a501
VERCEL: Implement Vercel DNS Provider (#3379) (#3542)
Fixes https://github.com/StackExchange/dnscontrol/issues/3379

Thanks to @SukkaW for adding this provider!  Even though you claimed to be "not familiar with Go at all" the new code looks excellent!  Great job!
2025-12-01 08:41:56 -05:00
Jakob Ackermann
1e67585e8f
HETZNER_V2: Add provider for Hetzner DNS API (#3837)
Closes https://github.com/StackExchange/dnscontrol/issues/3787

This PR is adding a `HETZNER_V2` provider for the "new" Hetzner DNS API.

Testing:
- The integration tests are passing.
- Manual testing:
  - `preview` (see diff for existing zone)
- `preview --populate-on-preview` (see full diff for newly created zone)
  - `push` (see full diff; no diff after push)
- `push` (see full diff; no diff after push to newly created zone --
i.e. single pass and done)

```js
var REG_NONE = NewRegistrar('none')
var DSP = NewDnsProvider('HETZNER_V2')

D('testing-2025-11-14-7.dev', REG_NONE, DnsProvider(DSP),
    A('@', '127.0.0.1')
)
```

<details>

```
# push for newly created zone
CONCURRENTLY checking for 1 zone(s)
SERIALLY checking for 0 zone(s)
Waiting for concurrent checking(s) to complete...DONE
******************** Domain: testing-2025-11-14-7.dev
1 correction (HETZNER_V2)
#1: Ensuring zone "testing-2025-11-14-7.dev" exists in "HETZNER_V2"
SUCCESS!
CONCURRENTLY gathering records of 1 zone(s)
SERIALLY gathering records of 0 zone(s)
Waiting for concurrent gathering(s) to complete...DONE
******************** Domain: testing-2025-11-14-7.dev
4 corrections (HETZNER_V2)
#1: ± MODIFY-TTL testing-2025-11-14-7.dev NS helium.ns.hetzner.de. ttl=(3600->300)
± MODIFY-TTL testing-2025-11-14-7.dev NS hydrogen.ns.hetzner.com. ttl=(3600->300)
± MODIFY-TTL testing-2025-11-14-7.dev NS oxygen.ns.hetzner.com. ttl=(3600->300)
SUCCESS!
#2: + CREATE testing-2025-11-14-7.dev A 127.0.0.1 ttl=300
SUCCESS!
Done. 5 corrections.
```
</details>

Feedback for @jooola and @LKaemmerling:
- The SDK was very useful in getting 80% there! Nice! 🎉 
- Footgun:
- The `result` values are not "up-to-date" after waiting for an
`Action`, e.g. `Zone.AuthoritativeNameservers.Assigned` is not set when
`Client.Zone.Create()` returns and the following "wait" will not update
it.
- Taking a step back here: Waiting for an `Action` with a separate SDK
call does not seem very natural to me. Does the SDK-user need to know
that you are processing operations asynchronous? (Which seems like an
implementation detail to me, something that the SDK could abstrct over.)
Can `Client.Zone.Create()` return the final `Zone` instead of the
intermediate result?
- Features missing compared to the DNS Console, in priority order:
- It is no longer possible to remove your provided name servers from the
root/apex. Use-case: dual-home/multi-home zone with fewer than three
servers from Hetzner. I'm operating one of these and cannot migrate over
until this is fixed.
- Performance regression due to lack of bulk create/modify. E.g. [one of
the test
suites](a71b89e5a2/integrationTest/integration_test.go (L619))
spends about 4.5 minutes on making creating 100 record-sets and then
another 4 minutes for deleting them in sequence again. With your async
API, these are `create 2*100 + delete 2*100 = 400` API calls.
Previously, these were `create 1 + delete 100 = 101` API calls. Are you
planning on adding batch processing again?
- Usability nits
- Compared to other record-set based APIs, upserts for record-sets are
missing. This applies to records of a record-set and the ttl of the
record-set (see separate SDK calls for the cases `diff2.CREATE` vs
`diff2.CHANGE` and two calls in `diff2.CHANGE` for updating the TTL vs
records).
- Some SDK methods return an `Action` (e.g. `Zone.ChangeRRSetTTL()`),
others wrap the `Action` in a struct (`Client.Zone.CreateRRSet()`) --
even when the struct has a single field (`ZoneRRSetDeleteResult`).

---------

Co-authored-by: "Jonas L." <jooola@users.noreply.github.com>
Co-authored-by: "Lukas Kämmerling" <LKaemmerling@users.noreply.github.com>
Co-authored-by: Tom Limoncelli <6293917+tlimoncelli@users.noreply.github.com>
2025-11-30 09:14:54 -05:00
Gabe Van Engel
97209bc2fc
AKAMAIEDGEDNS: Add ALIAS and AKAMAITLC support to the Akamai Edge DNS provider (#3836) 2025-11-14 09:48:42 -05:00
Peter
6ef0648778
NETCUP: add TLSA support (#3802) 2025-10-23 10:41:35 -04:00
Jan von Aschwege
a71b89e5a2
NEW FEATURE: Add SMIMEA support for BIND and deSEC (#3786) 2025-10-10 11:16:13 -04:00
Louis Laureys
2122390f29
DOCS: Fill some question marks for cloudns (#3767)
Co-authored-by: Tom Limoncelli <6293917+tlimoncelli@users.noreply.github.com>
2025-10-01 15:47:50 -04:00
Klemens Nanni
9edeb73d76
DOCS: Added requested provider Yandex Cloud DNS (#3738) 2025-08-24 09:21:22 -04:00
Alex Trull
ca64774004
Joker: Implement DNS Provider (#3661)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2025-08-04 16:37:20 -04:00
Tom Limoncelli
b947bddf95
CHORE: generate-all.sh (#3699) 2025-07-30 20:49:54 -04:00
Paul Donald
e84925b491
Loopia: feature updates (#3686) 2025-07-24 14:41:57 -04:00
Phil Pennock
af5907aafd
DNSIMPLE: preview data is now gathered concurrently (CanConcur) (#3675) 2025-07-21 15:09:44 -04:00
Ishan Jain
58afc59440
ADGUARDHOME: updated documentation with links to AGH pages (#3672) 2025-07-21 09:25:59 -04:00
e9b49e23aa
LUADNS: Support HTTPS record type, enable concurrency, adopt newest SDK (#3640) 2025-07-10 10:50:33 -04:00
Tom Limoncelli
8a6baa7c24 Reapply "CHORE: Remove the MSDNS provider (#3656)"
This reverts commit e9f136036f.
2025-07-09 13:07:03 -04:00
Tom Limoncelli
e9f136036f Revert "CHORE: Remove the MSDNS provider (#3656)"
This reverts commit 1ccd5eb532.
2025-07-09 13:06:42 -04:00
Tom Limoncelli
1ccd5eb532
CHORE: Remove the MSDNS provider (#3656) 2025-07-09 12:47:48 -04:00
Ishan Jain
e1830abb58
NEW PROVIDER: ADGUARDHOME (#3638) 2025-07-09 12:06:34 -04:00
James O'Gorman
4ce19352e9
PORKBUN: Improve retry handling, mark as concurrent (#3652) 2025-07-09 12:03:59 -04:00
Klett IT
3bdbb48164
NEW PROVIDE: FORTIGATE (#3642) 2025-07-08 08:37:19 -04:00
Jeffrey Cafferata
a8c41d931f
DOCS: Added requested provider Sav.com (#3635) 2025-06-23 15:48:20 -04:00
Jeffrey Cafferata
0a4162f14a
DOCS: How to add a requested provider (#3636) 2025-06-23 15:48:00 -04:00
tomf
4efa09bde6
MYTHICBEASTS: Mark as concurrent verified. (#3631) 2025-06-20 10:50:22 -04:00
Christopher Hicks
b2e3775c2e
DOCS: add links to help jump to provider table anchors (#3619)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2025-06-20 08:38:49 -04:00
Jeffrey Cafferata
e5f4d97950
DOCS: [GitBook] Refactor structure to match URL paths and fix missing page links (#3613) 2025-06-11 16:20:23 -04:00
Jeffrey Cafferata
1a7cb20599
DOCS: Added requested providers Scaleway (#3609) 2025-06-09 08:48:17 -04:00
Christopher Hicks
87cd4f40e3
DOCS: generate smaller tables for feature matrix (2nd try) (#3589) 2025-05-29 13:53:33 -04:00
Yuhui Xu
113c1ac13b
GCORE: Implement ListZones to allow auto create zones (#3588) 2025-05-29 09:56:33 -04:00
Tom Limoncelli
7882326a8d
CHORE: generate-all.sh (#3572) 2025-05-13 18:11:37 -04:00
Tom Limoncelli
5e4d68b41c
CLOUDFLAREAPI: Enable inserting DS records at the domain apex (even if they may be rejected) (#3571) 2025-05-12 17:14:32 -04:00
Tom Limoncelli
ba67db23b5
CHORE: generate-all.sh (#3561) 2025-05-03 09:01:06 -04:00
Yuxiang Zhu
6322a624b4
POWERDNS: Add support for DNAME, HTTPS, SVCB, and DNSKEY record types (#3525) 2025-05-03 08:24:23 -04:00
Eli Heady
1c04affe7c
INWX: Add AutoDNSSEC support (#3534)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2025-05-03 08:23:38 -04:00
Pascal Mathis
5715b842f5
BUNNY_DNS: Support DNSSEC and fix Null MX parsing (#3547) 2025-05-03 08:20:27 -04:00
Jeffrey Cafferata
bb7f881754
BUG: Fixed concurrency verified matrix builder (#3537) 2025-04-19 09:08:49 -04:00
J.C. Jones
605ec55546
PORKBUN: Add support for SVCB and HTTPS record types. (#3527) 2025-04-14 09:40:51 -04:00
gotjoshua
c4f5bdae0e
DOCS: add for CONCURRENCY_VERIFIED (#3510)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2025-04-03 13:01:26 -04:00
Jeffrey Cafferata
9c7fafab78
DOCS: Reclassify providers concurrency status (#3518) 2025-04-02 16:36:00 -04:00
Jeffrey Cafferata
6a008a9881
DOCS: Added requested providers Netim (#3517) 2025-04-01 16:41:25 -04:00
Tom Limoncelli
475f99b8d5
bug(rev) D_EXTEND does not work with REV (#3488) 2025-03-21 12:39:23 -04:00
Jeffrey Cafferata
47abf996e0
DOCS: Added requested providers BookMyName, IPv64 and Spaceship (#3496) 2025-03-21 10:17:42 -04:00
imlonghao
e0e32ca1a9
DOCS: fix broken links (#3437) 2025-02-17 08:41:37 -05:00
nyanotech
0d92d7a33f
DOCS: fix link to writing-providers.md (#3430) 2025-02-12 09:18:28 -05:00
Jeffrey Cafferata
4d94fcc357
DOCS: Provider request: Vercel DNS (#3416) 2025-02-05 15:26:16 -05:00
Kevin Zander
f80c1c0d7b
POWERDNS: Allow editing the SOA record (#3404)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2025-02-05 13:09:12 -05:00
Asif Nawaz
a3d6c51c7f
CNR: Add support for ALIAS record type (#3360) 2025-01-14 16:46:55 -05:00
Jeffrey Cafferata
f9718852ce
DOCS: Rackspace Cloud DNS provider request (#3322) 2025-01-08 09:54:13 -05:00
Berk D. Demir
cc366d4306
ROUTE53: Add HTTPS, SSHFP, SVCB, and TLSA record types (#3316)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2025-01-07 08:50:46 -05:00
Jeffrey Cafferata
519e4f82e1
DOCS: Provider URI redirect (#3307)
Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
2025-01-06 09:53:49 -05:00