from bundlewrap.metadata import atomic


@metadata_processor
def backups(metadata):
    if metadata.get('bind', {}).get('zones_primary_dynamic', {}):
        metadata.setdefault('backups', {}).setdefault('paths', set()).add(
            '/var/lib/bind/primary.dynamic',
        )
    return metadata, RUN_ME_AGAIN


@metadata_processor
def monitoring(metadata):
    icinga2_api = metadata.setdefault('icinga2_api', {})
    node_metadata = icinga2_api.setdefault('bind', {})

    services = node_metadata.setdefault('services', {})
    services.setdefault('BIND PROCESS', {}).update({
        'check_command': 'nrpe',
        'vars.nrpe_command': 'check_bind_procs',
    })
    for interface in metadata.get('bind', {}).get('listen', []):
        services.setdefault('BIND PORT {}'.format(interface), {}).update({
            'check_command': 'tcp',
            'vars.tcp_address': metadata['interfaces'][interface]['ip_addresses'][0],
            'vars.tcp_port': 53,
        })

    nrpe_checks = metadata.setdefault('nrpe', {}).setdefault('custom_nrpe_checks', {})
    nrpe_checks['check_bind_procs'] = '/usr/lib/nagios/plugins/check_procs -C named -c 1:1'

    return metadata, DONE


@metadata_processor
def sperrfix(metadata):
    per_bundle = metadata.get('bind', {}).get('sperrfix', {})

    if per_bundle.get('ignore'):
        return metadata, DONE

    sources = per_bundle.get('sources', {'*'})

    return {
        'sperrfix': {
            'bundle_rules': {
                '53': atomic({'sources': sources}),
                '53/udp': atomic({'sources': sources}),
            },
        },
    }, OVERWRITE, RUN_ME_AGAIN