Franzi
ca1646d394
Some checks failed
bundlewrap/pipeline/head There was a failure building this commit
81 lines
2.1 KiB
Python
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 {}
|