bundlewrap/bundles/powerdns/metadata.py
Franzi ca1646d394
Some checks failed
bundlewrap/pipeline/head There was a failure building this commit
bundles/powerdns: add support for zone transfers
2020-10-16 23:02:47 +02:00

81 lines
2.1 KiB
Python

from bundlewrap.exceptions import NoSuchGroup
defaults = {
'apt': {
'packages': {
'pdns-server': {},
'pdns-tools': {},
'pdns-backend-bind': {},
'pdns-backend-pgsql': {},
},
},
'powerdns': {
'api_key': repo.vault.password_for('{} powerdns api'.format(node.name)),
},
'postgresql': {
'users': {
'powerdns': {
'password': repo.vault.password_for('{} postgresql powerdns'.format(node.name)),
},
},
'databases': {
'powerdns': {
'owner': 'powerdns',
},
},
},
}
@metadata_reactor
def get_ips_of_secondary_nameservers(metadata):
# Secondary Nameservers can't be a primary nameserver at the same
# time. Return early if this is a secondary server.
if metadata.get('powerdns/is_secondary', False):
return {}
try:
nameservers = repo.nodes_in_group(metadata.get('powerdns/secondary_nameservers', ''))
except NoSuchGroup:
# This probably is no primary nameserver, either. Should be fine.
return {}
nodes = set()
for rnode in nameservers:
if rnode.name == node.name:
# We can't be primary and secondary at the same time
continue
nodes.add(rnode.name)
return {
'powerdns': {
'my_secondary_servers': nodes,
},
}
@metadata_reactor
def get_ips_of_primary_nameserver(metadata):
if not metadata.get('powerdns/is_secondary', False):
return {}
ips = set()
for rnode in repo.nodes:
if not node.has_bundle('powerdns'):
continue
if node.name in rnode.metadata.get('powerdns/my_secondary_servers', set()):
return {
'powerdns': {
'my_primary_server': {
'ips': {
str(ip) for ip in repo.libs.tools.resolve_identifier(repo, rnode.name)
},
'node': rnode.name,
},
},
}
return {}