PowerDNS Authoritative API client
Project description
powerdns-cli
PowerDNS-CLI is a cli to interact with the
PowerDNS Authoritative Nameserver.
PowerDNS itself does only offer an API to interact with remotely and
its pdns_util does only work on the PowerDNS-Host, not from another machine.
Installation
Installation is available through pypi.org:
pip install powerdns-cli
Or as an oci container:
podman run --rm -it ghcr.io/IamLunchbox/powerdns-cli:latest powerdns-cli
To work with from git, checkout the repository and run pip install ..
Configuration
powerdns-cli is built with the click framework and uses keyword-based actions. Flags may
only follow after the last action keyword. To get things going, for example, add a zone:
$ powerdns-cli zone add -a MyApiKey -u http://localhost example.com PRIMARY
All flags may alternatively be provided as environment variables. Each option must be prefixed
with POWERDNS_CLI_ and the upper case setting. For example:
$ export POWERDNS_CLI_APIKEY="MyApiKey"
$ export POWERDNS_CLI_URL="http://localhost"
$ powerdns-cli zone add example.com PRIMARY
It is also possible to set the common configuration items in ./.powerdns-cli.conf,
$HOME/.powerdns-cli.conf or $HOME/.config/powerdns-cli/configuration.toml.
The file format is toml, so string have to explicitly quoted.
This is the required structure and their defaults, the option keys are not case sensitive:
apikey = "mytestkey" # default is None
api-version = 4 # default is None
debug = false
insecure = false
json = false
server-id = "localhost"
timeout = 5
url = "http://example.com" # default is None
Only these settings can be accessed through the configuration file.
Depending on the context, for example editing records, further options may be available. Instead
of the flag, the corresponding env variable may be used. Since this cli directly accesses the
default command class from click, all options reside under
POWERDNS_CLI_*. So to set the TTL through the environment of record add, use
export POWERDNS_CLI_TTL=60.
Features
- Access to all API-Endpoints PowerDNS Auth exposes.
- CLI configuration through flags, environment variables or a configuration file.
- Exporting and importing data in JSON.
- Exporting RRSets in BIND.
- Idempotence.
- "Builtin" access to the current api-specification
Usage
Usage: powerdns-cli [OPTIONS] COMMAND [ARGS]...
Manage PowerDNS Authoritative Nameservers and their Zones/Records.
Options:
-h, --help Show this message and exit.
Commands:
autoprimary Change autoprimaries, which may modify this server.
config Show servers and their configuration
cryptokey Manage DNSSEC-Keys.
metadata Configure zone metadata.
network Set up networks views.
record Edit resource records (RRSets) of a zone.
tsigkey Set up server wide TSIGKeys, to sign transfer messages.
version Show the powerdns-cli version
view Configure views, which limit zone access based on IPs.
zone Manage zones and their configuration.
Refer to each action and its help page to find out more about each function.
Examples
# Add a zone
$ powerdns-cli zone add example.org. native
Successfully created example.org.
# Add some records
$ powerdns-cli record add www example.org A 127.0.0.1
www.example.org. A 127.0.0.1 created.
$ powerdns-cli record add @ example.org MX "10 mail.example.org."
example.org. MX 10 mail.example.org. created.
# Import example.com from integration test
$ cat ./integration/import-zone.json | powerdns-cli zone import -
Successfully added example.com..
# Delete zone, skipping confirmation
$ powerdns-cli zone delete example.com -f
Successfully deleted example.com..
If something goes wrong or does not work, the -j-switch provides more verbose output in json:
$ powerdns-cli record add @ example.org MX "10 mail.test.de" -j
[...]
{
"request": {
"method": "PATCH",
"url": "http://localhost:8082/api/v1/servers/localhost/zones/example.org."
},
"response": {
"status_code": 422,
"reason": "Unprocessable Entity",
"json": {
"error": "Record example.org./MX '10 mail.test.de': Not in expected format (parsed as '10 mail.test.de.')"
},
"text": ""
}
}
],
"data": null,
"success": false,
"message": "Failed to create example.org. MX 10 mail.test.de."
}
The integration test uses all common cli options to test for api compatibility.
Scripting
messageandsuccessare guaranteed to be set.messageis emitted on stdout. It contains human readable output, except:- If an action requests data, as do
listandexport, it resides indata. Otherwise,dataisnull. - If an action requests data,
message==data- so stdout will emitdataas well.
Caveats
- It is not possible to simply create a RRSet with several entries. Instead,
powerdns-cli record addneeds to be used repeatedly. - Use
record replaceto ensure a RRSet has only a single value. - There are no guardrails for removing records from a zone, only for removing a zone altogether.
Version Support
All the PowerDNS authoritative nameserver versions, which receive patches / security updates, are covered by integration tests. Suported versions are documented here. The integration tests cover the specified docker images here.
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file powerdns_cli-1.2.1.tar.gz.
File metadata
- Download URL: powerdns_cli-1.2.1.tar.gz
- Upload date:
- Size: 70.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ed89d8bf6d04afcc82dbf9fb2bce9e5a0ff95ab5b931819f9030e5a6174025ac
|
|
| MD5 |
263e90351ee30f382e85fd256cfbec95
|
|
| BLAKE2b-256 |
07a8216cf17c9032566c48f40c534316b137a448926aba9cb25d2401be5b0473
|
Provenance
The following attestation bundles were made for powerdns_cli-1.2.1.tar.gz:
Publisher:
release.yml on IamLunchbox/powerdns-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
powerdns_cli-1.2.1.tar.gz -
Subject digest:
ed89d8bf6d04afcc82dbf9fb2bce9e5a0ff95ab5b931819f9030e5a6174025ac - Sigstore transparency entry: 780716215
- Sigstore integration time:
-
Permalink:
IamLunchbox/powerdns-cli@98d1fc56a35207232f92cac142aacdce9ee1e099 -
Branch / Tag:
refs/tags/1.2.1 - Owner: https://github.com/IamLunchbox
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@98d1fc56a35207232f92cac142aacdce9ee1e099 -
Trigger Event:
push
-
Statement type:
File details
Details for the file powerdns_cli-1.2.1-py3-none-any.whl.
File metadata
- Download URL: powerdns_cli-1.2.1-py3-none-any.whl
- Upload date:
- Size: 84.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b39dccfddf34672ac7a3d9d47390dc0088405dd82d2eb149f63c8516a3bb3117
|
|
| MD5 |
392ffaa0492b48b8637301e2f9e77be3
|
|
| BLAKE2b-256 |
c4ffae5dd75250bafbaed444afce0febe6631f08010aad3265f422510c74b0b1
|
Provenance
The following attestation bundles were made for powerdns_cli-1.2.1-py3-none-any.whl:
Publisher:
release.yml on IamLunchbox/powerdns-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
powerdns_cli-1.2.1-py3-none-any.whl -
Subject digest:
b39dccfddf34672ac7a3d9d47390dc0088405dd82d2eb149f63c8516a3bb3117 - Sigstore transparency entry: 780716217
- Sigstore integration time:
-
Permalink:
IamLunchbox/powerdns-cli@98d1fc56a35207232f92cac142aacdce9ee1e099 -
Branch / Tag:
refs/tags/1.2.1 - Owner: https://github.com/IamLunchbox
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@98d1fc56a35207232f92cac142aacdce9ee1e099 -
Trigger Event:
push
-
Statement type: