Contact: Denis 'jawa' Pompilio denis.pompilio@gmail.com
Sources:https://github.com/outini/python-powerdns
This package provides intuitive and easy to use python client and interface for the PowerDNS web API.
python setup.py installor
pip install python-powerdnsusage: pdns-create-zone [-h] -A API -K APIKEY -z ZONE -o ORIGIN -c ZONE -d DNS
[-t TIMERS]
PowerDNS zone creator
optional arguments:
-h, --help show this help message and exit
-A API, --api API PowerDNS api (eg. https://api.domain.tld/api/v1
-K APIKEY, --key APIKEY
PowerDNS api key
-z ZONE, --zone ZONE Zone name (canonical)
-o ORIGIN, --origin ORIGIN
Zone origin (for SOA)
-c ZONE, --contact ZONE
Zone contact (for SOA)
-d DNS, --dns DNS Zone nameservers comma separated
-t TIMERS, --timers TIMERS
Zone timers (eg. '28800 7200 604800 86400')./bin/pdns-create-zone -A "https://api.domain.tld/api/v1" -K "xxxxxxxxx" \
-z "myzone.domain.tld." \
-o "ns01.domain.tld." -c "admin.domain.tld." \
-d "nsd01.domain.tld.,nsd02.domain.tld."
powerdns.interface INFO: listing available PowerDNS servers
powerdns.interface INFO: getting available servers from API
powerdns.client INFO: request: GET https://api.domain.tld/api/v1/servers
powerdns.client INFO: request response code: 200
powerdns.interface INFO: 1 server(s) listed
powerdns.interface INFO: creation of zone: myzone.domain.tld.
powerdns.client INFO: request: POST https://api.domain.tld/api/v1/servers/localhost/zones
powerdns.client INFO: request response code: 201
powerdns.interface INFO: zone myzone.domain.tld. successfully createdimportpowerdnsPDNS_API="https://my.pdns.api.domain.tld/api/v1"PDNS_KEY="mysupersecretbase64key"api_client=powerdns.PDNSApiClient(api_endpoint=PDNS_API, api_key=PDNS_KEY)
api=powerdns.PDNSEndpoint(api_client)fromdatetimeimportdate# Creating new zone on first PowerDNS serverserial=date.today().strftime("%Y%m%d00")
soa="ns0.domain.tld. admin.domain.tld. %s 28800 7200 604800 86400"%serialsoa_r=powerdns.RRSet(name='test.python-powerdns.domain.tld.',
rtype="SOA",
records=[(soa, False)],
ttl=86400)
zone=api.servers[0].create_zone(name="test.python-powerdns.domain.tld.",
kind="Native",
rrsets=[soa_r],
nameservers=["ns1.domain.tld.",
"ns2.domain.tld."])
# Getting new zone infoprint(zone)
print(zone.details)
# Deleting newly created zoneapi.servers[0].delete_zone(zone.name)zone=api.servers[0].get_zone("test.python-powerdns.domain.tld.")
comments= [powerdns.Comment("test comment", "admin")]
zone.create_records([
powerdns.RRSet('a', 'A', [('1.1.1.1', False)], comments=comments),
powerdns.RRSet('b', 'A', ['1.1.1.2', '1.1.1.3']),
powerdns.RRSet('c', 'A', [('1.1.1.4', False)]),
powerdns.RRSet('d', 'CNAME', ['a'])
])
zone.delete_records([
powerdns.RRSet('a', 'A', [('1.1.1.1', False)]),
powerdns.RRSet('d', 'CNAME', ['a'])
])Where (for the first RRSet):
ais the NAME of the recordAis the TYPE of the record[('1.1.1.1', False)]is a list of RDATA entries (tuples or just strings), where:'1.1.1.1'is the RDATAFalsetells that this RDATA entry is NOT disabled
# Backup every zone of every PowerDNS serverforserverinapi.servers:
backup_dir="backups/%s"%server.idforzoneinserver.zones:
zone.backup(backup_dir)
# Restore a single zone on first PowerDNS serverzone_file="backups/pdns-server-01/my.domain.tld.json"api.servers[0].restore_zone(zone_file)A simple Dockerfile is provided to spawn a basic powerdns service for tests purposes. The container is built using:
docker build --tag pdns .And started using:
docker run --rm -it pdnsPython unit-tests are available in the tests directory. Based on unittests,
those are run using coverage run -m unittest discover or integrated in your
IDE for development purposes. Those tests require a PDNS service to connect to
(see PowerDNS service section above).
Those tests are very limited at the moment and will be improved in the future.
MIT LICENSE (see LICENSE file)
╚⊙ ⊙╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝
╚═(███)═╝