# coding=utf-8
"""
This is some of the code behind 'cobbler sync'.
"""
from builtins import object
import os
import subprocess
import cobbler.clogger as clogger
import cobbler.templar as templar
[docs]def register():
return "manage"
[docs]def get_manager(config, logger):
return NDjbDnsManager(config, logger)
[docs]class NDjbDnsManager(object):
def __init__(self, config, logger):
self.logger = logger
if self.logger is None:
self.logger = clogger.Logger()
self.config = config
self.systems = config.systems()
self.templar = templar.Templar(config)
[docs] def what(self):
return "ndjbdns"
[docs] def regen_hosts(self):
pass
[docs] def write_dns_files(self):
template_file = '/etc/cobbler/ndjbdns.template'
data_file = '/etc/ndjbdns/data'
data_dir = os.path.dirname(data_file)
a_records = {}
with open(template_file, 'r') as f:
template_content = f.read()
for system in self.systems:
for (name, interface) in list(system.interfaces.items()):
host = interface['dns_name']
ip = interface['ip_address']
if host:
if host in a_records:
raise Exception('Duplicate DNS name: %s' % host)
a_records[host] = ip
template_vars = {'forward': []}
for host, ip in list(a_records.items()):
template_vars['forward'].append((host, ip))
self.templar.render(template_content, template_vars, data_file)
p = subprocess.Popen(['/usr/bin/tinydns-data'], cwd=data_dir)
p.communicate()
if p.returncode != 0:
raise Exception('Could not regenerate tinydns data file.')