Skip to content

Commit 1e67585

Browse files
das7padjooolaLKaemmerlingtlimoncelli
authored
HETZNER_V2: Add provider for Hetzner DNS API (#3837)
Closes #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](https://github.com/StackExchange/dnscontrol/blob/a71b89e5a2bf9a31872b6b2095c9d4eea641dad3/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." <[email protected]> Co-authored-by: "Lukas Kämmerling" <[email protected]> Co-authored-by: Tom Limoncelli <[email protected]>
1 parent 1b2f5d4 commit 1e67585

File tree

12 files changed

+381
-3
lines changed

12 files changed

+381
-3
lines changed

.github/workflows/pr_integration_tests.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ jobs:
5252
Write-Host "Integration test providers: $Providers"
5353
echo "integration_test_providers=$(ConvertTo-Json -InputObject $Providers -Compress)" >> $env:GITHUB_OUTPUT
5454
env:
55-
PROVIDERS: "['AXFRDDNS', 'AXFRDDNS_DNSSEC', 'AZURE_DNS','BIND','BUNNY_DNS','CLOUDFLAREAPI','CLOUDNS','CNR','DIGITALOCEAN','FORTIGATE','GANDI_V5','GCLOUD','HEDNS','HEXONET','HUAWEICLOUD','INWX','JOKER','MYTHICBEASTS', 'NAMEDOTCOM','NS1','POWERDNS','ROUTE53','SAKURACLOUD','TRANSIP']"
55+
PROVIDERS: "['AXFRDDNS', 'AXFRDDNS_DNSSEC', 'AZURE_DNS','BIND','BUNNY_DNS','CLOUDFLAREAPI','CLOUDNS','CNR','DIGITALOCEAN','FORTIGATE','GANDI_V5','GCLOUD','HEDNS','HETZNER_V2','HEXONET','HUAWEICLOUD','INWX','JOKER','MYTHICBEASTS', 'NAMEDOTCOM','NS1','POWERDNS','ROUTE53','SAKURACLOUD','TRANSIP']"
5656
ENV_CONTEXT: ${{ toJson(env) }}
5757
VARS_CONTEXT: ${{ toJson(vars) }}
5858
SECRETS_CONTEXT: ${{ toJson(secrets) }}
@@ -87,6 +87,7 @@ jobs:
8787
GANDI_V5_DOMAIN: ${{ vars.GANDI_V5_DOMAIN }}
8888
GCLOUD_DOMAIN: ${{ vars.GCLOUD_DOMAIN }}
8989
HEDNS_DOMAIN: ${{ vars.HEDNS_DOMAIN }}
90+
HETZNER_V2_DOMAIN: ${{ vars.HETZNER_V2_DOMAIN }}
9091
HEXONET_DOMAIN: ${{ vars.HEXONET_DOMAIN }}
9192
HUAWEICLOUD_DOMAIN: ${{ vars.HUAWEICLOUD_DOMAIN }}
9293
JOKER_DOMAIN: ${{ vars.JOKER_DOMAIN }}
@@ -154,6 +155,8 @@ jobs:
154155
HEDNS_TOTP_SECRET: ${{ secrets.HEDNS_TOTP_SECRET }}
155156
HEDNS_USERNAME: ${{ secrets.HEDNS_USERNAME }}
156157
#
158+
HETZNER_V2_API_TOKEN: ${{ secrets.HETZNER_V2_API_TOKEN }}
159+
#
157160
HEXONET_ENTITY: ${{ secrets.HEXONET_ENTITY }}
158161
HEXONET_PW: ${{ secrets.HEXONET_PW }}
159162
HEXONET_UID: ${{ secrets.HEXONET_UID }}

.goreleaser.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ changelog:
3939
regexp: "(?i)^.*(major|new provider|feature)[(\\w)]*:+.*$"
4040
order: 1
4141
- title: 'Provider-specific changes:'
42-
regexp: "(?i)((adguardhome|akamaiedge|autodns|axfrd|azure|azure_private_dns|bind|bunnydns|cloudflare|cloudflareapi_old|cloudns|cnr|cscglobal|desec|digitalocean|dnsimple|dnsmadeeasy|doh|domainnameshop|dynadot|easyname|exoscale|fortigate|gandi|gcloud|gcore|hedns|hetzner|hexonet|hostingde|huaweicloud|inwx|joker|linode|loopia|luadns|mythicbeasts|namecheap|namedotcom|netcup|netlify|ns1|opensrs|oracle|ovh|packetframe|porkbun|powerdns|realtimeregister|route53|rwth|sakuracloud|softlayer|transip|vultr).*:)+.*"
42+
regexp: "(?i)((adguardhome|akamaiedge|autodns|axfrd|azure|azure_private_dns|bind|bunnydns|cloudflare|cloudflareapi_old|cloudns|cnr|cscglobal|desec|digitalocean|dnsimple|dnsmadeeasy|doh|domainnameshop|dynadot|easyname|exoscale|fortigate|gandi|gcloud|gcore|hedns|hetzner|hetznerv2|hexonet|hostingde|huaweicloud|inwx|joker|linode|loopia|luadns|mythicbeasts|namecheap|namedotcom|netcup|netlify|ns1|opensrs|oracle|ovh|packetframe|porkbun|powerdns|realtimeregister|route53|rwth|sakuracloud|softlayer|transip|vultr).*:)+.*"
4343
order: 2
4444
- title: 'Documentation:'
4545
regexp: "(?i)^.*(docs)[(\\w)]*:+.*$"

OWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ providers/gcloud @riyadhalnur
2525
providers/gcore @xddxdd
2626
providers/hedns @rblenkinsopp
2727
providers/hetzner @das7pad
28+
providers/hetznerv2 @das7pad
2829
providers/hexonet @KaiSchwarz-cnic
2930
providers/hostingde @juliusrickert
3031
providers/huaweicloud @huihuimoe

documentation/SUMMARY.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,8 @@
137137
* [Gandi_v5](provider/gandi_v5.md)
138138
* [Gcore](provider/gcore.md)
139139
* [Google Cloud DNS](provider/gcloud.md)
140-
* [Hetzner DNS Console](provider/hetzner.md)
140+
* [Hetzner DNS API](provider/hetzner_v2.md)
141+
* [Hetzner DNS Console (legacy)](provider/hetzner.md)
141142
* [HEXONET](provider/hexonet.md)
142143
* [hosting.de](provider/hostingde.md)
143144
* [Huawei Cloud DNS](provider/huaweicloud.md)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
## Configuration
2+
3+
To use this provider, add an entry to `creds.json` with `TYPE` set to `HETZNER_V2`
4+
along with a [Hetzner API Token](https://docs.hetzner.cloud/reference/cloud#getting-started).
5+
6+
Example:
7+
8+
{% code title="creds.json" %}
9+
```json
10+
{
11+
"hetzner_v2": {
12+
"TYPE": "HETZNER_V2",
13+
"api_token": "your-api-token"
14+
}
15+
}
16+
```
17+
{% endcode %}
18+
19+
## Metadata
20+
21+
This provider does not recognize any special metadata fields unique to Hetzner DNS API.
22+
23+
## Usage
24+
25+
An example configuration:
26+
27+
{% code title="dnsconfig.js" %}
28+
```javascript
29+
var REG_NONE = NewRegistrar("none");
30+
var DSP_HETZNER = NewDnsProvider("hetzner_v2");
31+
32+
D("example.com", REG_NONE, DnsProvider(DSP_HETZNER),
33+
A("test", "1.2.3.4"),
34+
);
35+
```
36+
{% endcode %}
37+
38+
## Activation
39+
40+
Create a new API Key in the
41+
[Hetzner Console](https://docs.hetzner.cloud/reference/cloud#getting-started).
42+
43+
## Caveats
44+
45+
### NS
46+
47+
Removing the Hetzner provided NS records at the root is not possible.
48+
49+
### SOA
50+
51+
Hetzner DNS API does not allow changing the SOA record via their API.
52+
There is an alternative method using an import of a full BIND file, but this
53+
approach does not play nice with incremental changes or ignored records.
54+
At this time you cannot update SOA records via DNSControl.

documentation/provider/index.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ Jump to a table:
5252
| [`GCORE`](gcore.md) ||||
5353
| [`HEDNS`](hedns.md) ||||
5454
| [`HETZNER`](hetzner.md) ||||
55+
| [`HETZNER_V2`](hetzner_v2.md) ||||
5556
| [`HEXONET`](hexonet.md) ||||
5657
| [`HOSTINGDE`](hostingde.md) ||||
5758
| [`HUAWEICLOUD`](huaweicloud.md) ||||
@@ -112,6 +113,7 @@ Jump to a table:
112113
| [`GCORE`](gcore.md) |||||
113114
| [`HEDNS`](hedns.md) |||||
114115
| [`HETZNER`](hetzner.md) |||||
116+
| [`HETZNER_V2`](hetzner_v2.md) |||||
115117
| [`HEXONET`](hexonet.md) |||||
116118
| [`HOSTINGDE`](hostingde.md) |||||
117119
| [`HUAWEICLOUD`](huaweicloud.md) |||||
@@ -169,6 +171,7 @@ Jump to a table:
169171
| [`GCORE`](gcore.md) ||||||
170172
| [`HEDNS`](hedns.md) ||||||
171173
| [`HETZNER`](hetzner.md) ||||||
174+
| [`HETZNER_V2`](hetzner_v2.md) ||||||
172175
| [`HEXONET`](hexonet.md) ||||||
173176
| [`HOSTINGDE`](hostingde.md) ||||||
174177
| [`HUAWEICLOUD`](huaweicloud.md) ||||||
@@ -223,6 +226,7 @@ Jump to a table:
223226
| [`GCORE`](gcore.md) |||||
224227
| [`HEDNS`](hedns.md) |||||
225228
| [`HETZNER`](hetzner.md) |||||
229+
| [`HETZNER_V2`](hetzner_v2.md) |||||
226230
| [`HEXONET`](hexonet.md) |||||
227231
| [`HOSTINGDE`](hostingde.md) |||||
228232
| [`HUAWEICLOUD`](huaweicloud.md) |||||
@@ -276,6 +280,7 @@ Jump to a table:
276280
| [`GCORE`](gcore.md) ||||||
277281
| [`HEDNS`](hedns.md) ||||||
278282
| [`HETZNER`](hetzner.md) ||||||
283+
| [`HETZNER_V2`](hetzner_v2.md) ||||||
279284
| [`HEXONET`](hexonet.md) ||||||
280285
| [`HOSTINGDE`](hostingde.md) ||||||
281286
| [`HUAWEICLOUD`](huaweicloud.md) ||||||
@@ -320,6 +325,7 @@ Jump to a table:
320325
| [`GCORE`](gcore.md) ||||
321326
| [`HEDNS`](hedns.md) ||||
322327
| [`HETZNER`](hetzner.md) ||||
328+
| [`HETZNER_V2`](hetzner_v2.md) ||||
323329
| [`HOSTINGDE`](hostingde.md) ||||
324330
| [`HUAWEICLOUD`](huaweicloud.md) ||||
325331
| [`INWX`](inwx.md) ||||

go.mod

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ require (
6666
github.com/fbiville/markdown-table-formatter v0.3.0
6767
github.com/google/go-cmp v0.7.0
6868
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
69+
github.com/hetznercloud/hcloud-go/v2 v2.30.0
6970
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.174
7071
github.com/kylelemons/godebug v1.1.0
7172
github.com/luadns/luadns-go v0.3.0
@@ -97,8 +98,10 @@ require (
9798
github.com/aws/aws-sdk-go-v2/service/sso v1.30.1 // indirect
9899
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.5 // indirect
99100
github.com/aws/smithy-go v1.23.2 // indirect
101+
github.com/beorn7/perks v1.0.1 // indirect
100102
github.com/bits-and-blooms/bitset v1.24.0 // indirect
101103
github.com/boombuler/barcode v1.0.1 // indirect
104+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
102105
github.com/cpuguy83/go-md2man/v2 v2.0.7 // indirect
103106
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
104107
github.com/deepmap/oapi-codegen v1.9.1 // indirect
@@ -126,10 +129,15 @@ require (
126129
github.com/mitchellh/go-homedir v1.1.0 // indirect
127130
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
128131
github.com/modern-go/reflect2 v1.0.2 // indirect
132+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
129133
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
130134
github.com/peterhellberg/link v1.2.0 // indirect
131135
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
132136
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
137+
github.com/prometheus/client_golang v1.23.2 // indirect
138+
github.com/prometheus/client_model v0.6.2 // indirect
139+
github.com/prometheus/common v0.66.1 // indirect
140+
github.com/prometheus/procfs v0.16.1 // indirect
133141
github.com/russross/blackfriday/v2 v2.1.0 // indirect
134142
github.com/sergi/go-diff v1.2.0 // indirect
135143
github.com/shopspring/decimal v1.4.0 // indirect
@@ -147,6 +155,7 @@ require (
147155
go.opentelemetry.io/otel v1.37.0 // indirect
148156
go.opentelemetry.io/otel/metric v1.37.0 // indirect
149157
go.opentelemetry.io/otel/trace v1.37.0 // indirect
158+
go.yaml.in/yaml/v2 v2.4.2 // indirect
150159
golang.org/x/mod v0.29.0 // indirect
151160
golang.org/x/sync v0.18.0 // indirect
152161
golang.org/x/sys v0.38.0 // indirect

go.sum

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ github.com/aws/smithy-go v1.23.2 h1:Crv0eatJUQhaManss33hS5r40CG3ZFH+21XSkqMrIUM=
7878
github.com/aws/smithy-go v1.23.2/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0=
7979
github.com/babolivier/go-doh-client v0.0.0-20201028162107-a76cff4cb8b6 h1:4NNbNM2Iq/k57qEu7WfL67UrbPq1uFWxW4qODCohi+0=
8080
github.com/babolivier/go-doh-client v0.0.0-20201028162107-a76cff4cb8b6/go.mod h1:J29hk+f9lJrblVIfiJOtTFk+OblBawmib4uz/VdKzlg=
81+
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
82+
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
8183
github.com/billputer/go-namecheap v0.0.0-20210108011502-994a912fb7f9 h1:2vQTbEJvFsyd1VefzZ34GUkUD6TkJleYYJh9/25WBE4=
8284
github.com/billputer/go-namecheap v0.0.0-20210108011502-994a912fb7f9/go.mod h1:bqqNsI2akL+lLWyApkYY0cxquWPKwEBU0Wd3chi3TEg=
8385
github.com/bits-and-blooms/bitset v1.24.0 h1:H4x4TuulnokZKvHLfzVRTHJfFfnHEeSYJizujEZvmAM=
@@ -90,6 +92,8 @@ github.com/centralnicgroup-opensource/rtldev-middleware-go-sdk/v4 v4.0.7 h1:Jk7u
9092
github.com/centralnicgroup-opensource/rtldev-middleware-go-sdk/v4 v4.0.7/go.mod h1:FnQtD0+Q/1NZxi0eEWN+3ZRyMsE9vzSB3YjyunkbKD0=
9193
github.com/centralnicgroup-opensource/rtldev-middleware-go-sdk/v5 v5.0.18 h1:RvyTDU0VmnUBd3Qm2i6irEXtCR2KRIxnRlD8l+5z/DY=
9294
github.com/centralnicgroup-opensource/rtldev-middleware-go-sdk/v5 v5.0.18/go.mod h1:a6n4wXFHbMW0iJFxHIJR4PkgG5krP52nOVCBU0m+Obw=
95+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
96+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
9397
github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ=
9498
github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8=
9599
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
@@ -229,6 +233,8 @@ github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB1
229233
github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
230234
github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU=
231235
github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk=
236+
github.com/hetznercloud/hcloud-go/v2 v2.30.0 h1:fgAUtCCw4PbJNSs9XPLHVu0//dTNMbPq8P/48ovmdG8=
237+
github.com/hetznercloud/hcloud-go/v2 v2.30.0/go.mod h1:zv7x2kM7xyJ5mW/+y4HbfxQYhk8TE57ypTa1hofsYdw=
232238
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.174 h1:FBlx7E5rl8doUTbizt+DXR0zU05Mu2oEYvc/2GMB7pc=
233239
github.com/huaweicloud/huaweicloud-sdk-go-v3 v0.1.174/go.mod h1:M+yna96Fx9o5GbIUnF3OvVvQGjgfVSyeJbV9Yb1z/wI=
234240
github.com/influxdata/tdigest v0.0.1 h1:XpFptwYmnEKUqmkcDjrzffswZ3nvNeevbUSLPP/ZzIY=
@@ -246,6 +252,8 @@ github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfV
246252
github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU=
247253
github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k=
248254
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
255+
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
256+
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
249257
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
250258
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
251259
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -300,6 +308,8 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
300308
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
301309
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
302310
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
311+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
312+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
303313
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04 h1:o6uBwrhM5C8Ll3MAAxrQxRHEu7FkapwTuI2WmL1rw4g=
304314
github.com/namedotcom/go v0.0.0-20180403034216-08470befbe04/go.mod h1:5sN+Lt1CaY4wsPvgQH/jsuJi4XO2ssZbdsIizr4CVC8=
305315
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
@@ -333,7 +343,15 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI
333343
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
334344
github.com/pquerna/otp v1.5.0 h1:NMMR+WrmaqXU4EzdGJEE1aUUI0AMRzsp96fFFWNPwxs=
335345
github.com/pquerna/otp v1.5.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
346+
github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
347+
github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
336348
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
349+
github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
350+
github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
351+
github.com/prometheus/common v0.66.1 h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=
352+
github.com/prometheus/common v0.66.1/go.mod h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
353+
github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
354+
github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
337355
github.com/qdm12/reprint v0.0.0-20200326205758-722754a53494 h1:wSmWgpuccqS2IOfmYrbRiUgv+g37W5suLLLxwwniTSc=
338356
github.com/qdm12/reprint v0.0.0-20200326205758-722754a53494/go.mod h1:yipyliwI08eQ6XwDm1fEwKPdF/xdbkiHtrU+1Hg+vc4=
339357
github.com/robertkrimen/otto v0.0.0-20200922221731-ef014fd054ac/go.mod h1:xvqspoSXJTIpemEonrMDFq6XzwHYYgToXWj5eRX1OtY=
@@ -426,6 +444,10 @@ go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFh
426444
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
427445
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
428446
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
447+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
448+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
449+
go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
450+
go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
429451
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
430452
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
431453
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=

integrationTest/profiles.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@
176176
"api_key": "$HETZNER_API_KEY",
177177
"domain": "$HETZNER_DOMAIN"
178178
},
179+
"HETZNER_V2": {
180+
"TYPE": "HETZNER_V2",
181+
"api_token": "$HETZNER_V2_API_TOKEN",
182+
"domain": "$HETZNER_V2_DOMAIN"
183+
},
179184
"HEXONET": {
180185
"TYPE": "HEXONET",
181186
"apientity": "$HEXONET_ENTITY",

providers/_all/all.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
_ "github.com/StackExchange/dnscontrol/v4/providers/gcore"
3131
_ "github.com/StackExchange/dnscontrol/v4/providers/hedns"
3232
_ "github.com/StackExchange/dnscontrol/v4/providers/hetzner"
33+
_ "github.com/StackExchange/dnscontrol/v4/providers/hetznerv2"
3334
_ "github.com/StackExchange/dnscontrol/v4/providers/hexonet"
3435
_ "github.com/StackExchange/dnscontrol/v4/providers/hostingde"
3536
_ "github.com/StackExchange/dnscontrol/v4/providers/huaweicloud"

0 commit comments

Comments
 (0)