Skip to main content

Hetzner DNS Zone Manager

Project description

Hetzner DNS Manager

A command-line tool to interact with the Hetzner DNS API, allowing you to manage DNS records by editing a set of YAML files.

It is designed for small to medium installations with up to 100 zones. Function scope is limited to managing records within existing zones for now.

Features

  • Import zones and records from the Hetzner DNS API
  • Check DNS records against actual DNS entries
  • Create missing and update mismatched DNS records
  • Delete DNS records
  • Stores zone data in YAML files for easy manual editing

Example Workflow

After initial import, add records to a zone YAML file with empty ID:

Adding records to a zone YAML file

Then run update to push the change to the API and update the YAML file with the new ID:

Running the update command

The same way you can update records and push those.

Installation

The script uses PEP 723 for dependency management, so it's self-contained. You'll need Python 3.10 or higher and a working installation of uv, installed via your OS's package manager or via pip.

# Clone the repository
git clone https://github.com/serpent213/hetzner-dns-manager.git
cd hetzner-dns-manager

or

# Download raw script directly
curl -LO https://github.com/serpent213/hetzner-dns-manager/raw/refs/heads/master/hdem
chmod +x hdem

Install from PyPI

Alternatively install from PyPI:

# Install using pip
pip install hetzner-dns-manager

# Or with pipx for isolated installation
pipx install hetzner-dns-manager

After installation, you'll have access to the hdem command in your terminal.

Configuration

Set your Hetzner DNS API token as an environment variable:

export HETZNER_DNS_API_TOKEN="your_api_token_here"

You may want to add this to your shell profile file (.bashrc, .zshrc, etc.) for persistence.

Usage

The database will be created in ./zones and consists of one YAML file per zone.

Import Zones and Records

Import a specific zone:

hdem import example.com

Import all zones:

hdem import --all

This will create YAML files in the ./zones directory.

Segmented TXT records (like "abc" "def") will be concatenated (to "abcdef") by default. This might be undesirable and can be disabled by passing --no-txt-concat.

Check DNS Records

Check a specific zone against actual DNS entries using one of the domain's authoritative servers:

hdem check --verbose example.com

Check all zones:

hdem check --all

SOA records will be ignored as they are updated automatically by Hetzner.

Update DNS Records

Check and update mismatched records for a specific zone:

hdem update example.com

Check and update mismatched records for all zones:

hdem update --all

To create new records, add to them to your zone YAML with empty ID field, which will be filled in after creation.

Delete DNS Records

Delete a specific record by name:

hdem delete example.com www

If there is more than one candidate, hdem will ask you which records to delete.

Data Structure

The YAML files in the ./zones directory follow this structure:

id: ZoneID
name: example.com
records:
  - id: RecordID1
    type: A
    name: www
    value: 192.0.2.1
  - id: RecordID2
    type: MX
    name: '@'
    value: '10 mail.example.com.'

Related Projects

Some other tools dealing with the Hetzner DNS API (that are not dynamic DNS updaters):

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hetzner_dns_manager-0.2.1.tar.gz (15.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

hetzner_dns_manager-0.2.1-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file hetzner_dns_manager-0.2.1.tar.gz.

File metadata

  • Download URL: hetzner_dns_manager-0.2.1.tar.gz
  • Upload date:
  • Size: 15.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.17

File hashes

Hashes for hetzner_dns_manager-0.2.1.tar.gz
Algorithm Hash digest
SHA256 9b80ac248239213e685d8d6d6f0f6bce63646009a1b427744184a00194d1d22c
MD5 48699f30bc50c5e886b2345c4910860f
BLAKE2b-256 4537f1105df2ad038f1ca72e09c935dd60f368fdf4116b466b8ee96dcb06cbbe

See more details on using hashes here.

File details

Details for the file hetzner_dns_manager-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for hetzner_dns_manager-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 3685a2aa6869645815cbd52a515e05c26f484a04383e66d4a7fa4fc767c264f0
MD5 ca9f56328b2c37008c6a2a1009c1b55b
BLAKE2b-256 bc0f4d6ffe0048ac3bffcbb79b1f16e83c6b0048dfee221dc812f2bb1cca2a34

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page