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

NEW PROVIDER: HETZNER DNS Console (#904)

* HETZNER: implement the provider for Hetzner DNS Console

Signed-off-by: Jakob Ackermann <das7pad@outlook.com>

* HETZNER: apply review feedback

- add domain into error messages
- insert sub-strings using `%q`
- insert sub-errors using `%w`
- change api.getZone() signature to return a (potentially `nil`) Zone
   pointer instead of a (potentially empty) Zone value
- sort imports and confirm with `$ goimports -w providers/hetzner/`
- use exact 'api_key' term in error message of settings validation
- add blank line for logic separation
- drop internal record id from correction messages

Co-Authored-By: Tom Limoncelli <tlimoncelli@stackoverflow.com>
Signed-off-by: Jakob Ackermann <das7pad@outlook.com>

* HETZNER: add request rate-limiting handling

There are a limited number of data-points on how their rate-limiting
 works at this time. I deduce from my account to others and use a fixed/
 constant backoff of 1s as the initial delay. Thereafter exponential
 increase with factor 2 (not needed at this time).
Hetzner has not made any official statements on rate-limiting, so this
 is guesswork only.

Signed-off-by: Jakob Ackermann <das7pad@outlook.com>

* HETZNER: address golint complaints

- baseUrl -> baseURL
- mark Record as private -> record
- mark Zone as private -> zone
- mark RequestRateLimiter as private -> requestRateLimiter
- capitalize Id fields as ID
- keep delay logic on same level, move return out of branch

Signed-off-by: Jakob Ackermann <das7pad@outlook.com>

* HETZNER: rate_limited: init the response timestamp on requestRateLimiter

Signed-off-by: Jakob Ackermann <das7pad@outlook.com>

* HETZNER: requestRateLimiter: align local variable with struct name

Signed-off-by: Jakob Ackermann <das7pad@outlook.com>

Co-authored-by: Tom Limoncelli <tlimoncelli@stackoverflow.com>
This commit is contained in:
Jakob Ackermann
2020-10-22 15:44:21 +02:00
committed by GitHub
parent 3a2b1b2f7b
commit 2b50af0cbc
11 changed files with 626 additions and 1 deletions

View File

@@ -0,0 +1,73 @@
---
name: Hetzner DNS Console
title: Hetzner DNS Console
layout: default
jsId: HETZNER
---
# Hetzner DNS Console Provider
## Configuration
In your credentials file, you must provide a
[Hetzner API Key](https://dns.hetzner.com/settings/api-token).
{% highlight json %}
{
"hetzner": {
"api_key": "your-api-key"
}
}
{% endhighlight %}
## Metadata
This provider does not recognize any special metadata fields unique to Hetzner
DNS Console.
## Usage
Example Javascript:
{% highlight js %}
var REG_NONE = NewRegistrar('none', 'NONE');
var HETZNER = NewDnsProvider("hetzner", "HETZNER");
D("example.tld", REG_NONE, DnsProvider(HETZNER),
A("test","1.2.3.4")
);
{%endhighlight%}
## Activation
Create a new API Key in the
[Hetzner DNS Console](https://dns.hetzner.com/settings/api-token).
## Caveats
### SOA
Hetzner DNS Console does not allow changing the SOA record via their API.
There is an alternative method using an import of a full BIND file, but this
approach does not play nice with incremental changes or ignored records.
At this time you cannot update SOA records via DNSControl.
### Rate Limiting
In case you are frequently seeing messages about being rate-limited:
{% highlight txt %}
WARNING: request rate-limited, constant back-off is now at 1s.
{% endhighlight %}
You may want to enable the `rate_limited` mode by default.
In your `creds.json` for all `HETZNER` provider entries:
{% highlight json %}
{
"hetzner": {
"rate_limited": "true",
"api_key": "your-api-key"
}
}
{% endhighlight %}