from shlex import quote

def generate_sysctl_key_value_pairs_from_json(json_data, parents=[]):
    if isinstance(json_data, dict):
        for key, value in json_data.items():
            yield from generate_sysctl_key_value_pairs_from_json(value, [*parents, key])
    elif isinstance(json_data, list):
        raise ValueError(f"List not supported: '{json_data}'")
    else:
        # If it's a leaf node, yield the path
        yield (parents, json_data)

key_value_pairs = generate_sysctl_key_value_pairs_from_json(node.metadata.get('sysctl'))


files= {
    '/etc/sysctl.conf': {
        'content': '\n'.join(
            sorted(
                f"{'.'.join(path)}={value}"
                    for path, value in key_value_pairs
            ),
        ),
        'triggers': [
            'svc_systemd:systemd-sysctl.service:restart',
        ],
    },
}

svc_systemd = {
    'systemd-sysctl.service': {},
}

for path, value in key_value_pairs:
    actions[f'reload_sysctl.conf_{path}'] = {
        'command': f"sysctl --values {'.'.join(path)}  | grep -q {quote('^'+value+'$')}",
        'needs': [
            f'action:systemd-sysctl.service',
            f'action:systemd-sysctl.service:restart',
        ],
    }