--- /dev/null
+{% if cfg.forward_zones %}
+
+{% for name, zone in cfg.forward_zones.items() %}
+-- forward-zone: {{ name }}
+{% if zone.views %}
+{% for view_id in zone.views %}
+-- forward-zone: {{ name }} view: {{ view_id }}
+{% set view = cfg.views[view_id] %}
+
+{% set options = none %}
+{% if zone.options and view.options %}
+{% set options = zone.options|list + view.options|list %}
+{% elif zone.options %}
+{% set options = zone.options|list %}
+{% elif view.options %}
+{% set options = view.options|list %}
+{% endif %}
+
+{% if view.tsig %}
+{% for sig in view.tsig %}
+
+{% if options %}
+-- forward-zone: {{ name }} view: {{ view_id }} options
+view:tsig('{{ sig }}', policy.suffix(policy.FLAGS({
+{%- for flag in options -%}
+'{{ flag.upper().replace("-", "_") }}',
+{%- endfor -%}
+}), {todname('{{ name }}')}))
+{% endif %}
+
+-- forward-zone: {{ name }} view: {{ view_id }} servers
+{% for server in zone.servers %}
+view:tsig('{{ sig }}', policy.suffix(
+
+{%- if zone.tls -%}
+policy.TLS_FORWARD({{ '{{' }}'{{ server.address if server.address else server}}',
+
+{%- if server.pin_sha256 -%}
+pin_sha256=
+{%- if server.pin_sha256 is string -%}
+'{{ server.pin_sha256 }}',
+{%- else -%}
+{
+{%- for pin in server.pin_sha256 -%}
+'{{ pin }}',
+{%- endfor -%}
+},
+{%- endif -%}
+{%- endif -%}
+
+{%- if server.hostname -%}
+hostname='{{ server.hostname }}',
+{%- endif -%}
+
+{%- if server.ca_file -%}
+ca_file='{{ server.ca_file }}',
+{%- endif -%}
+
+{{ '}}' }})
+
+{%- else -%}
+policy.FORWARD('{{ server.address if server.address else server}}')
+{%- endif -%}
+, {todname('{{ name }}')}))
+
+{% endfor %}
+
+{% endfor %}
+{% endif %}
+
+{% if view.subnets %}
+{% for addr in view.subnets %}
+
+{% if options %}
+-- forward-zone: {{ name }} view: {{ view_id }} options
+view:addr('{{ addr }}', policy.suffix(policy.FLAGS({
+{%- for flag in options -%}
+'{{ flag.upper().replace("-", "_") }}',
+{%- endfor -%}
+}), {todname('{{ name }}')}))
+{% endif %}
+
+-- forward-zone: {{ name }} view: {{ view_id }} servers
+{% for server in zone.servers %}
+view:addr('{{ addr }}', policy.suffix(
+
+{%- if zone.tls -%}
+policy.TLS_FORWARD({{ '{{' }}'{{ server.address if server.address else server}}',
+
+{%- if server.pin_sha256 -%}
+pin_sha256=
+{%- if server.pin_sha256 is string -%}
+'{{ server.pin_sha256 }}',
+{%- else -%}
+{
+{%- for pin in server.pin_sha256 -%}
+'{{ pin }}',
+{%- endfor -%}
+},
+{%- endif -%}
+{%- endif -%}
+
+{%- if server.hostname -%}
+hostname='{{ server.hostname }}',
+{%- endif -%}
+
+{%- if server.ca_file -%}
+ca_file='{{ server.ca_file }}',
+{%- endif -%}
+
+{{ '}}' }})
+
+{%- else -%}
+policy.FORWARD('{{ server.address if server.address else server}}')
+{%- endif -%}
+, {todname('{{ name }}')}))
+
+{% endfor %}
+
+{% endfor %}
+{% endif %}
+
+{% endfor %}
+{% else %}
+
+{% if zone.options %}
+-- forward-zone: {{ name }} options
+policy.add(policy.suffix(policy.FLAGS({
+{%- for flag in zone.options -%}
+'{{ flag.upper().replace("-", "_") }}',
+{%- endfor -%}
+}), {todname('{{ name }}')}))
+{% endif %}
+
+-- forward-zone: {{ name }} servers
+{% for server in zone.servers %}
+policy.add(policy.suffix(
+{%- if zone.tls -%}
+policy.TLS_FORWARD({{ '{{' }}'{{ server.address if server.address else server}}',
+
+{%- if server.pin_sha256 -%}
+pin_sha256=
+{%- if server.pin_sha256 is string -%}
+'{{ server.pin_sha256 }}',
+{%- else -%}
+{
+{%- for pin in server.pin_sha256 -%}
+'{{ pin }}',
+{%- endfor -%}
+},
+{%- endif -%}
+{%- endif -%}
+
+{%- if server.hostname -%}
+hostname='{{ server.hostname }}',
+{%- endif -%}
+
+{%- if server.ca_file -%}
+ca_file='{{ server.ca_file }}',
+{%- endif -%}
+
+{{ '}}' }})
+
+{%- else -%}
+policy.FORWARD('{{ server.address if server.address else server}}')
+{%- endif -%}
+, {todname('{{ name }}')}))
+{% endfor %}
+
+{% endif %}
+
+{% endfor %}
+{% endif %}
{% if cfg.stub_zones %}
-{% for name, stub in cfg.stub_zones.items() %}
+{% for name, zone in cfg.stub_zones.items() %}
-- stub-zone: {{ name }}
-{% if stub.views %}
-{% for view_id in stub.views %}
+{% if zone.views %}
+{% for view_id in zone.views %}
-- stub-zone: {{ name }} view: {{ view_id }}
{% set view = cfg.views[view_id] %}
{% set options = none %}
-{% if stub.options and view.options %}
-{% set options = stub.options|list + view.options |list%}
-{% elif stub.options %}
-{% set options = stub.options|list %}
+{% if zone.options and view.options %}
+{% set options = zone.options|list + view.options |list%}
+{% elif zone.options %}
+{% set options = zone.options|list %}
{% elif view.options %}
{% set options = view.options|list %}
{% endif %}
{% endif %}
-- stub-zone: {{ name }} view: {{ view_id }} servers
-{% for server in stub.servers %}
+{% for server in zone.servers %}
view:tsig('{{ sig }}', policy.suffix(policy.STUB('{{ server }}'), {todname('{{ name }}')}))
{% endfor %}
{% endif %}
-- stub-zone: {{ name }} view: {{ view_id }} servers
-{% for server in stub.servers %}
+{% for server in zone.servers %}
view:addr('{{ addr }}', policy.suffix(policy.STUB('{{ server }}'), {todname('{{ name }}')}))
{% endfor %}
{% endfor %}
{% else %}
-{% if stub.options %}
+{% if zone.options %}
-- stub-zone: {{ name }} options
policy.add(policy.suffix(policy.FLAGS({
-{%- for flag in stub.options -%}
+{%- for flag in zone.options -%}
'{{ flag.upper().replace("-", "_") }}',
{%- endfor -%}
}), {todname('{{ name }}')}))
{% endif %}
-- stub-zone: {{ name }} servers
-{% for server in stub.servers %}
+{% for server in zone.servers %}
policy.add(policy.suffix(policy.STUB('{{ server }}'), {todname('{{ name }}')}))
{% endfor %}