No description
Find a file
2026-02-09 14:54:09 +01:00
defaults Merge branch 'master' of https://git.notandy.de/ansible/roles/powerdns 2025-09-16 02:37:49 +02:00
handlers rename master/slave to primary/secondary 2025-09-15 16:41:00 +02:00
tasks Merge remote-tracking branch 'cccv/master' 2026-02-09 14:54:09 +01:00
templates Merge branch 'master' of https://git.notandy.de/ansible/roles/powerdns 2025-09-16 02:37:49 +02:00
README.md rename master/slave to primary/secondary 2025-09-15 16:41:00 +02:00

PowerDNS

All configuration is to be placed inside the powerdns dict. To only update zonefiles in an existing setup (and skip the setup procedure and everything else) use the "updatedns" tag.

# key:value of config values
config:
	"allow-axfr-ips":
		- ::1
		- 127.0.0.0/8
	"bind-config": /etc/powerdns/backends/bind.conf
	"config-dir": /etc/powerdns
	"daemon": "yes"
	"default-ttl": 3600
	"guardian": "yes"
	"include-dir": "/etc/powerdns/pdns.d"
	"launch":
		bind: {}
	"primary": "no"
	"reuseport": "yes"
	"setgid": pdns
	"setuid": pdns
	"secondary": "no"
	"soa-minimum-ttl": 300
	"tcp-control-secret": "{{ lookup('password', '/dev/null length=64') }}"
	"version-string": "1"
# name: *zonemeta*, define meta data for zones. See below for definition
zonemeta: {}

# defaults for zone metadata, See **zonemeta** for definition.
zonemeta_defaults: 
	type: native
	"allow-query":
	- any
	"allow-update":
	- none
	"allow-transfer":
	- none
	"secondaries":
	- none

# name: **zone**, define all dns zones. See below for definition.
zones: {}

zonemeta

# Can be primary/secondary/native
# See https://doc.powerdns.com/authoritative/backends/bind.html#primary-secondary-native-configuration
type: native

"allow-query":
- any
"allow-update":
- none
"allow-transfer":
- none
"secondaries":
- none

zone

The basic format is <dns path>: { <record type>: [<value>, <value>] } It is possible to do short hand notations:

  • If there is only a single value for an entry, you can omit the array and use ``: { : }`
  • YAML anchors and merges are recommend for situations where a CNAME is not possible
  • You can use hierachy to shorten paths. If you have foo.example.com and bar.example.com you could write
"example.com.":
	foo:
		A: 1.1.1.1
	bar:
		A: 1.1.1.1

For the SOA record, ##sequence## is replaced by a generated sqeuence number.

Example for a zone:

"example.de":
	SOA: "ns.example.de zonefile.example.de ##sequence## 1d 2h 4w 1h"
	CAA: 0 issue "letsencrypt.org"

	NS:
		- ns0.example.de
		- ns1.example.de

	ns:
		CNAME: ns0.example.de.

	ns0:
		A: 1.1.1.1
		AAAA: ::5

	git:
		A:
			- 2.2.2.2
			- 3.3.3.3
		AAAA: ::6