{%- from "bind/map.jinja" import server with context -%}
{%- for name, zone in server.zone.iteritems() if name == zone_name %}
$ORIGIN {{ name }}
$TTL {{ zone.get('ttl', '86400') }}

{{ name }}              IN SOA  {{ name }}. {{ zone.get('root', 'hostmaster.'+name)|replace('@', '.') }}. (
                                {{ zone.get('serial', 1) }}
                                {{ zone.get('refresh', 604800) }}
                                {{ zone.get('retry', 86400) }}
                                {{ zone.get('expire', 2419200) }}
                                {{ zone.get('minimum', 86400) }}
                                )

{%- for record in zone.get('records', []) %}
{{ record.get('name', '@') }} {{ record.get('ttl', '') }} 
{%- for type in record.get('type', []) %}
{{ type }} {% if type in ['TXT', 'SPF'] %}"{{ record.get('value', []) }}"{% else %}{{ record.get('value', []) }}{% endif %}
{%- endfor %}
{%- endfor %}
{%- endfor %}

{#-
  vim: syntax=jinja
#}