kea_config = {
    'Dhcp4': {
        **node.metadata.get('kea-dhcp-server/config'),
        'interfaces-config': {
            'interfaces': sorted(node.metadata.get('kea-dhcp-server/subnets', {}).keys()),
        },
        'subnet4': [],
        'loggers': [{
            'name': 'kea-dhcp4',
            'output_options': [{
                # -> journal
                'output': 'stdout',
            }],
            'severity': 'WARN',
        }],
    },
}

for iface, config in sorted(node.metadata.get('kea-dhcp-server/subnets', {}).items()):
    kea_config['Dhcp4']['subnet4'].append({
        'subnet': config['subnet'],
        'pools': [{
            'pool': f'{config["lower"]} - {config["higher"]}',
        }],
        'option-data': [
            {
                'name': k,
                'data': v,
            } for k, v in sorted(config.get('options', {}).items())
        ],
        'reservations': [
            {
                'ip-address': v['ip'],
                'hw-address': v['mac'],
                'hostname': k,
            } for k, v in sorted(node.metadata.get(f'kea-dhcp-server/fixed_allocations/{iface}', {}).items())
        ]
    })

files['/etc/kea/kea-dhcp4.conf'] = {
    'content': repo.libs.faults.dict_as_json(kea_config),
    'triggers': {
        'svc_systemd:kea-dhcp4-server:restart',
    },
}

svc_systemd['kea-dhcp4-server'] = {
    'needs': {
        'file:/etc/kea/kea-dhcp4.conf',
        'pkg_apt:kea-dhcp4-server',
    },
}