]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: datamodel: forward render to Lua
authorAleš Mrázek <ales.mrazek@nic.cz>
Fri, 26 May 2023 09:46:15 +0000 (11:46 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 9 Jun 2023 11:54:07 +0000 (11:54 +0000)
manager/knot_resolver_manager/datamodel/templates/forward.lua.j2
manager/knot_resolver_manager/datamodel/templates/macros/forward_macros.lua.j2 [new file with mode: 0644]
manager/tests/unit/datamodel/templates/test_forward_macros.py [new file with mode: 0644]

index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..afb2c49240e8bb0ee061b2081bb96f9ac4968353 100644 (file)
@@ -0,0 +1,7 @@
+{% from 'macros/forward_macros.lua.j2' import policy_rule_forward_add %}
+
+{% if cfg.forward %}
+{% for fwd in cfg.forward %}
+{{ policy_rule_forward_add(fwd) }}
+{% endfor %}
+{% endif %}
diff --git a/manager/knot_resolver_manager/datamodel/templates/macros/forward_macros.lua.j2 b/manager/knot_resolver_manager/datamodel/templates/macros/forward_macros.lua.j2
new file mode 100644 (file)
index 0000000..4736b01
--- /dev/null
@@ -0,0 +1,39 @@
+{% from 'macros/common_macros.lua.j2' import boolean %}
+
+{% macro forward_options(options) -%}
+{dnssec={{ boolean(options.dnssec) }},auth={{ boolean(options.authoritative) }}}
+{%- endmacro %}
+
+{% macro forward_server(server) -%}
+{%- if server.address -%}
+{%- for addr in server.address -%}
+{'{{ addr }}',
+{%- if server.transport == 'tls' -%}
+tls=true,
+{%- else -%}
+tls=false,
+{%- endif -%}
+{%- if server.hostname -%}
+hostname='{{ server.hostname }}',
+{%- endif -%}
+{%- if server.ca_file -%}
+ca_file='{{ server.ca_file }}',
+{%- endif -%}
+},
+{%- endfor -%}
+{% else %}
+{'{{ server }}'},
+{%- endif -%}
+{%- endmacro %}
+
+{% macro forward_servers(servers) -%}
+{
+{%- for server in servers -%}
+{{ forward_server(server) }}
+{%- endfor -%}
+}
+{%- endmacro %}
+
+{% macro policy_rule_forward_add(forward) -%}
+policy.rule_forward_add('{{ forward.subtree }}',{{ forward_options(forward.options) }},{{ forward_servers(forward.servers) }})
+{%- endmacro %}
diff --git a/manager/tests/unit/datamodel/templates/test_forward_macros.py b/manager/tests/unit/datamodel/templates/test_forward_macros.py
new file mode 100644 (file)
index 0000000..5f80df1
--- /dev/null
@@ -0,0 +1,27 @@
+from knot_resolver_manager.datamodel.config_schema import template_from_str
+from knot_resolver_manager.datamodel.forward_schema import ForwardSchema
+from knot_resolver_manager.datamodel.types import IPAddressOptionalPort
+
+
+def test_policy_rule_forward_add():
+    tmpl_str = """{% from 'macros/forward_macros.lua.j2' import policy_rule_forward_add %}
+{{ policy_rule_forward_add(rule) }}"""
+
+    rule = ForwardSchema(
+        {
+            "subtree": ".",
+            "servers": [{"address": ["2001:148f:fffe::1", "185.43.135.1"], "hostname": "odvr.nic.cz"}],
+            "options": {
+                "authoritative": False,
+                "dnssec": True,
+            },
+        }
+    )
+    result = "policy.rule_forward_add('.',{dnssec=true,auth=false},{{'2001:148f:fffe::1',tls=false,hostname='odvr.nic.cz',},{'185.43.135.1',tls=false,hostname='odvr.nic.cz',},})"
+
+    tmpl = template_from_str(tmpl_str)
+    assert tmpl.render(rule=rule) == result
+
+    rule.servers = [IPAddressOptionalPort("2001:148f:fffe::1"), IPAddressOptionalPort("185.43.135.1")]
+    result = "policy.rule_forward_add('.',{dnssec=true,auth=false},{{'2001:148f:fffe::1'},{'185.43.135.1'},})"
+    assert tmpl.render(rule=rule) == result