# KEYS

% for view_name, view_conf in views.items():
% for key_name, key_conf in sorted(view_conf['keys'].items()):
key "${key_name}" {
  algorithm hmac-sha512;
  secret "${key_conf['token']}";
};
% endfor
% endfor

# ACLS

% for acl_name, acl_content in acls.items():
acl "${acl_name}" {
  % for ac in sorted(acl_content, key=lambda e: (not e.startswith('!'), not e.startswith('key'), e)):
  ${ac};
  % endfor
};
% endfor

# VIEWS

% for view_name, view_conf in views.items():
view "${view_name}" {
  match-clients {
    ${view_name};
  };

  % if view_conf['is_internal']:
  recursion yes;
  % else:
  recursion no;
  rate-limit {
     responses-per-second 2;
     window 25;
  };
  % endif

  forward only;
  forwarders {
    1.1.1.1;
    9.9.9.9;
    8.8.8.8;
  };

  % for zone_name, zone_conf in sorted(view_conf['zones'].items()):
  zone "${zone_name}" {
    % if type == 'slave' and zone_conf.get('allow_update', []):
    type slave;
    masters { ${master_ip}; };
    % else:
    type master;
    % if zone_conf.get('allow_update', []):
    allow-update {
    % for allow_update in zone_conf['allow_update']:
      ${allow_update};
    % endfor
    };
    % endif
    % endif
    file "/var/lib/bind/${view_name}/${zone_name}";
  };
  % endfor

  include "/etc/bind/named.conf.default-zones";
  include "/etc/bind/zones.rfc1918";
};

% endfor