162 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			162 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from ipaddress import ip_address, ip_interface
 | |
| from datetime import datetime
 | |
| from hashlib import sha3_512
 | |
| 
 | |
| 
 | |
| if node.metadata.get('bind/type') == 'master':
 | |
|     master_node = node
 | |
| else:
 | |
|     master_node = repo.get_node(node.metadata.get('bind/master_node'))
 | |
| 
 | |
| directories[f'/var/lib/bind'] = {
 | |
|     'owner': 'bind',
 | |
|     'group': 'bind',
 | |
|     'purge': True,
 | |
|     'needs': [
 | |
|         'pkg_apt:bind9',
 | |
|     ],
 | |
|     'needed_by': [
 | |
|         'svc_systemd:bind9',
 | |
|     ],
 | |
|     'triggers': [
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ],
 | |
| }
 | |
| 
 | |
| files['/etc/default/bind9'] = {
 | |
|     'source': 'defaults',
 | |
|     'needed_by': [
 | |
|         'svc_systemd:bind9',
 | |
|     ],
 | |
|     'triggers': [
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ],
 | |
| }
 | |
| 
 | |
| files['/etc/bind/named.conf'] = {
 | |
|     'owner': 'root',
 | |
|     'group': 'bind',
 | |
|     'needs': [
 | |
|         'pkg_apt:bind9',
 | |
|     ],
 | |
|     'needed_by': [
 | |
|         'svc_systemd:bind9',
 | |
|     ],
 | |
|     'triggers': [
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ],
 | |
| }
 | |
| 
 | |
| files['/etc/bind/named.conf.options'] = {
 | |
|     'content_type': 'mako',
 | |
|     'context': {
 | |
|         'type': node.metadata.get('bind/type'),
 | |
|         'slave_ips': node.metadata.get('bind/slave_ips', []),
 | |
|         'master_ip': node.metadata.get('bind/master_ip', None),
 | |
|     },
 | |
|     'owner': 'root',
 | |
|     'group': 'bind',
 | |
|     'needs': [
 | |
|         'pkg_apt:bind9',
 | |
|     ],
 | |
|     'needed_by': [
 | |
|         'svc_systemd:bind9',
 | |
|     ],
 | |
|     'triggers': [
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ],
 | |
| }
 | |
| 
 | |
| files['/etc/bind/named.conf.local'] = {
 | |
|     'content_type': 'mako',
 | |
|     'context': {
 | |
|         'type': node.metadata.get('bind/type'),
 | |
|         'master_ip': node.metadata.get('bind/master_ip', None),
 | |
|         'acls': {
 | |
|             **master_node.metadata.get('bind/acls'),
 | |
|             **{
 | |
|                 view_name: view_conf['match_clients']
 | |
|                     for view_name, view_conf in master_node.metadata.get('bind/views').items()
 | |
|             },
 | |
|         },
 | |
|         'views': dict(sorted(
 | |
|             master_node.metadata.get('bind/views').items(),
 | |
|             key=lambda e: (e[1].get('default', False), e[0]),
 | |
|         )),
 | |
|     },
 | |
|     'owner': 'root',
 | |
|     'group': 'bind',
 | |
|     'needs': [
 | |
|         'pkg_apt:bind9',
 | |
|     ],
 | |
|     'needed_by': [
 | |
|         'svc_systemd:bind9',
 | |
|     ],
 | |
|     'triggers': [
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ],
 | |
| }
 | |
| 
 | |
| for view_name, view_conf in master_node.metadata.get('bind/views').items():
 | |
|     directories[f"/var/lib/bind/{view_name}"] = {
 | |
|         'owner': 'bind',
 | |
|         'group': 'bind',
 | |
|         'purge': True,
 | |
|         'needed_by': [
 | |
|             'svc_systemd:bind9',
 | |
|         ],
 | |
|         'triggers': [
 | |
|             'svc_systemd:bind9:reload',
 | |
|         ],
 | |
|     }
 | |
| 
 | |
|     for zone_name, zone_conf in view_conf['zones'].items():
 | |
|         files[f"/var/lib/bind/{view_name}/{zone_name}"] = {
 | |
|             'source': 'db',
 | |
|             'content_type': 'mako',
 | |
|             'unless': f"test -f /var/lib/bind/{view_name}/{zone_name}" if zone_conf.get('allow_update', False) else 'false',
 | |
|             'context': {
 | |
|                 'serial': datetime.now().strftime('%Y%m%d%H'),
 | |
|                 'records': zone_conf['records'],
 | |
|                 'hostname': node.metadata.get('bind/hostname'),
 | |
|                 'type': node.metadata.get('bind/type'),
 | |
|             },
 | |
|             'owner': 'bind',
 | |
|             'group': 'bind',
 | |
|             'needed_by': [
 | |
|                 'svc_systemd:bind9',
 | |
|             ],
 | |
|             'triggers': [
 | |
|                 'svc_systemd:bind9:reload',
 | |
|             ],
 | |
|         }
 | |
| 
 | |
| 
 | |
| svc_systemd['bind9'] = {}
 | |
| 
 | |
| actions['named-checkconf'] = {
 | |
|     'command': 'named-checkconf -z',
 | |
|     'unless': 'named-checkconf -z',
 | |
|     'needs': [
 | |
|         'svc_systemd:bind9',
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ]
 | |
| }
 | |
| 
 | |
| # beantwortet Anfragen nach privaten IP-Adressen mit NXDOMAIN, statt sie ins Internet weiterzuleiten
 | |
| files['/etc/bind/zones.rfc1918'] = {
 | |
|     'needed_by': [
 | |
|         'svc_systemd:bind9',
 | |
|     ],
 | |
|     'triggers': [
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ],
 | |
| }
 | |
| files['/etc/bind/db.empty'] = {
 | |
|     'needed_by': [
 | |
|         'svc_systemd:bind9',
 | |
|     ],
 | |
|     'triggers': [
 | |
|         'svc_systemd:bind9:reload',
 | |
|     ],
 | |
| }
 |