]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
manager: datamodel: local-data template and macros
authorAleš Mrázek <ales.mrazek@nic.cz>
Wed, 3 May 2023 12:53:36 +0000 (14:53 +0200)
committerAleš Mrázek <ales.mrazek@nic.cz>
Fri, 9 Jun 2023 11:54:07 +0000 (11:54 +0000)
manager/etc/knot-resolver/config.policy.dev.yml
manager/knot_resolver_manager/datamodel/templates/config.lua.j2
manager/knot_resolver_manager/datamodel/templates/local_data.lua.j2
manager/knot_resolver_manager/datamodel/templates/macros/local_data_macros.lua.j2

index 5f5a7429d0214dfffee4ad215aaef59d152fb2ca..8557ad58916beb00f5e1402431a5c436f62a7fad 100644 (file)
@@ -24,6 +24,13 @@ views:
     answer: allow
 
 local-data:
+  ttl: 60m
+  nodata: false
+  records: |
+    example.net. TXT "foo bar"
+     A 192.168.2.3
+     A 192.168.2.4
+    local.example.org AAAA ::1
   subtrees:
     - type: empty
       tags: [ t2 ]
index ee4a2ed68c366b40ab2f13c45358505a22f47916..442354abfebefec3feae000b21c48e621685ab44 100644 (file)
@@ -1,7 +1,8 @@
 {% if not cfg.lua.script_only %}
 
 -- FFI library
-local C = require('ffi').C
+ffi = require('ffi')
+local C = ffi.C
 
 -- hostname
 hostname('{{ cfg.hostname }}')
index 519671051993ca53e694d27d628621c6c6f9a2bf..ebd5fd7556248650c64d1e3441eec27fdf40b25a 100644 (file)
@@ -1,6 +1,13 @@
-{% from 'macros/local_data_macros.lua.j2' import local_data_subtree_root %}
+{% from 'macros/local_data_macros.lua.j2' import local_data_subtree_root, local_data_records %}
 
 {# TODO: implemented all other options/features from local_data_schema #}
+
+{# records #}
+{% if cfg.local_data.records -%}
+{{ local_data_records(cfg.local_data.records, false, cfg.local_data.ttl, cfg.local_data.nodata) }}
+{%- endif %}
+
+{# subtrees #}
 {% if cfg.local_data.subtrees -%}
 {% for subtree in cfg.local_data.subtrees %}
 
index 43f10f359d43b5629fdb21cfe0f2f08821f325b9..3d91a7f234c4cb7a4b498f736326b6cb5f4263a3 100644 (file)
@@ -1,6 +1,23 @@
-{% from 'macros/common_macros.lua.j2' import string_table %}
+{% from 'macros/common_macros.lua.j2' import string_table, boolean %}
 {% from 'macros/policy_macros.lua.j2' import policy_get_tagset, policy_todname %}
 
+
+{% macro local_data_records(input_str, is_rpz, ttl, nodata) -%}
+rrs = ffi.new('struct kr_rule_zonefile_config')
+{% if ttl %}
+rrs.ttl = {{ ttl.millis() }}
+{% endif %}
+rrs.nodata = {{ boolean(nodata) }}
+rrs.is_rpz = {{ boolean(is_rpz) }}
+{% if is_rpz -%}
+rrs.filename = '{{ input_str }}'
+{% else %}
+rrs.input_str = [[
+{{ input_str }}]]
+{% endif %}
+assert(C.kr_rule_zonefile(rrs)==0)
+{%- endmacro %}
+
 {% macro local_data_emptyzone(dname, tags) -%}
 assert(C.kr_rule_local_data_emptyzone({{ dname }},{{ tags }})==0)
 {%- endmacro %}