Hetzner Cloud API¶
dnsjinja kommuniziert ausschließlich über die offizielle Python-Bibliothek
hcloud-python mit der
Hetzner Cloud API.
HTTP-Aufrufe, Authentifizierung und Paginierung übernimmt die Bibliothek.
Token erstellen¶
Das Bearer-Token wird in der Hetzner Cloud Console erstellt: Projekt → Security → API Tokens → Generate API Token mit Read & Write.
Kein alter DNS-Token
Es muss ein Cloud-API-Token sein. Die früheren Auth-API-Token aus der
DNS-Konsole (dns.hetzner.com) funktionieren mit der Cloud API nicht und
führen zu Authentifizierungsfehlern.
Das Token wird über --auth-api-token, die Umgebungsvariable
DNSJINJA_AUTH_API_TOKEN oder eine .env-Datei bereitgestellt. Ist es nicht gesetzt,
fragt dnsjinja es bei Bedarf interaktiv ab.
Basis-URL überschreiben¶
Standardmäßig spricht dnsjinja https://api.hetzner.cloud/v1 an. Die Basis-URL lässt
sich überschreiben:
- in der
config.jsonüberglobal.dns-api-base - für
explore_hetznerüber--api-basebzw.DNSJINJA_API_BASE
Verwendete Operationen¶
| Operation | hcloud-Methode | Verwendet für |
|---|---|---|
| Zonen auflisten | client.zones.get_all() |
Abgleich Config ↔ Hetzner, Zonen-IDs |
| Zone neu anlegen | client.zones.create(name, mode="primary") |
--create-missing |
| Zone exportieren | client.zones.export_zonefile(zone) |
Backup (-b) |
| RRSets lesen | client.zones.get_rrset_all(zone) |
Soll-/Ist-Abgleich beim Upload |
| RRSet anlegen/ändern | client.zones.create_rrset(...) / set_rrset_records(...) |
Upload (-u) |
| RRSet löschen | client.zones.delete_rrset(rrset) |
Upload (-u), veraltete Records |
| TTL ändern | client.zones.change_rrset_ttl(...) |
Upload (-u) |
| Zone importieren | client.zones.import_zonefile(zone, zonefile) |
Restore aus Backup |
So funktioniert der Upload (RRSet-Sync)¶
Der Upload arbeitet auf Record-Ebene und macht die Hetzner-Zone deckungsgleich mit dem gerenderten Template:
- Rendern & validieren – das Zone-File wird gerendert und mit dnspython auf Syntax geprüft. Fehler brechen den Lauf für diese Domain ab.
- Soll-Ist-Abgleich – gerenderte RRSets werden mit den vorhandenen verglichen.
- Anlegen / Aktualisieren – neue RRSets werden erstellt, geänderte aktualisiert.
- Löschen – RRSets, die nicht (mehr) im Template stehen, werden entfernt.
Ausgenommen sind der SOA-Record (von Hetzner verwaltet) sowie als protected markierte RRSets, die übersprungen werden.
Restore aus dem Backup
Jeder Lauf mit -b legt vor Änderungen ein Zonefile in zone-backups/ ab. Im
Notfall lässt sich eine Zone daraus mit client.zones.import_zonefile(zone,
zonefile) vollständig wiederherstellen (ersetzt alle RRSets der Zone).