Skip to main content

PowerDNS Authoritative API client

Project description

PyPi version GitHub latest commit Integration Test

powerdns-cli

PowerDNS-CLI is your (scriptable) interface to interact with the PowerDNS Authoritative Nameserver. PowerDNS itself does only offer an API to interact with remotely, its pdns_util does only work on the PowerDNS-Host itself, not remotely from another machine.

Other interaction methods are web interface designed, by hardly scriptable (to my knowledge).

This project is currently in alpha phase and will soon progress to a beta stage. Beta release will be done as soon as integration tests and python version tests are successful.

Installation

Installation is available through pypi.org:

pip install powerdns-cli

Or you use this repositories-main branch for the latest version:

git clone https://github.com/IamLunchbox/powerdns-cli
pip install .

Please be advised, that the main branch, especially in alpha phase, might be unstable. Once this project progresses to a beta or production- ready release you can expect the main branch to be stable enough, since changes will stay in different branches.

Usage

powerdns-cli is built with pythons click framework and uses keyword-based functions. Therefore, shared flags, as the api key and api url, are positional and required before the first arguments.

To get things going you may, for example, add a zone:
$ powerdns-cli -a MyApiKey -u http://localhost zone add example.com. 10.0.0.1 MASTER

The following example does not work and will create an error:
$ powerdns-cli zone add -a MyApiKey -u http://localhost example.com. 10.0.0.1 MASTER

You may provide all flags through your environment variables as well. Use the long flag name in upper-case and prefix it with POWERDNS_CLI_. For example:

# This is effecively the same as above
export POWERDNS_CLI_APIKEY="MyApiKey"
export POWERDNS_CLI_URL="http://localhost"
powerdns-cli zone add example.com. 10.0.0.1 MASTER

If you want to use environment variables for subcommands you will have to add the subcommand to the variable string as well:
POWERDNS_CLI_ADD_RECORD_TTL=86400.

powerdns-cli will almost always respond in json, even if the PowerDNS-api doesn't (sometimes its plain/text, sometimes there is no output at all). The only time you'll be provided with non-json output is, when you request a BIND/AFXR-format export.

This script tries to stay idempotent as well and will not change anything if a corresponding configuration is already present upstream. This comes with a speed / traffic penalty, since sometimes several requests are necessary to get all upstream information.

Basic Examples

# Add a zone
$ powerdns-cli zone add example.com. 10.0.0.1 MASTER
{"message": "Zone example.com. created"}

If you are in need of all the possible cli options, you can take a look at the integration test. The workflow / integration test uses all common cli options to test for the api compatibility.

Constraints

  1. It is not possible to simply create a RRSet with several entries. Instead, you have to use powerdns-cli record extend.
  2. There are no guardrails for removing records from a zone, only for removing a zone altogether.
  3. The default TTL is set to 86400. The ttl is set per RRSet (name:zone:record-type).

Version Support

All the PowerDNS authoritative nameserver versions, which receive patches / security updates, are covered by integration tests. You can check if your version gets updates here. And you can check here which versions are actually tested.

If the PowerDNS-Team does not apply releases and changes to their publicly released docker images (see here), they won't be covered by the integration tests.

Todos

The following features are on the roadmap:

  1. Compatibility with PowerDNS Auth 5.0
  2. Management of slave zones
  3. Docker container with powerdns-cli.
  4. Porting this to Ansible.

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

powerdns_cli-0.0.17.tar.gz (33.9 kB view details)

Uploaded Source

Built Distribution

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

powerdns_cli-0.0.17-py3-none-any.whl (25.3 kB view details)

Uploaded Python 3

File details

Details for the file powerdns_cli-0.0.17.tar.gz.

File metadata

  • Download URL: powerdns_cli-0.0.17.tar.gz
  • Upload date:
  • Size: 33.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for powerdns_cli-0.0.17.tar.gz
Algorithm Hash digest
SHA256 094a828920c6665ce34eafc420c20c668a5bc6605daf1069c997ca4532a27305
MD5 27158c5278dfc5404e06ad1f97b7ab25
BLAKE2b-256 59c5204b16d971d842947fcc143a9358bc6bedd371a2aaf6230d386bb525e533

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerdns_cli-0.0.17.tar.gz:

Publisher: python-publish.yml on IamLunchbox/powerdns-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file powerdns_cli-0.0.17-py3-none-any.whl.

File metadata

  • Download URL: powerdns_cli-0.0.17-py3-none-any.whl
  • Upload date:
  • Size: 25.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for powerdns_cli-0.0.17-py3-none-any.whl
Algorithm Hash digest
SHA256 121c6c10bf237186fa680aa808ebeff9cbe59e006d9842aa194afb7b56f3fe93
MD5 1f4494816aa9aee301e1f264296994d7
BLAKE2b-256 fd71dcb4f160fabcbeb513577a241591e31ba1d5f74b59ab308ab3ef3c9b55d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for powerdns_cli-0.0.17-py3-none-any.whl:

Publisher: python-publish.yml on IamLunchbox/powerdns-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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