[#ftl]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//  http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
//
// Generated by Brooklyn on ${.now?string.short}
//
options {
    // listen-on default is all interfaces -- but we should include with the word 'any' to get the port
    // listen-on port ${entity.dnsPort} { 127.0.0.1; ${driver.address}; ${driver.subnetAddress}; };
    // i think this will only do loopback for ipv6 so should change
    listen-on-v6 port ${entity.dnsPort} { ::1; };
    // the following is suggested instead, and @grkvlt notes it will apply to all interfaces even ipv4
    // so in theory that's all we need, but it does need testing
    // listen-on-v6 ${entity.dnsPort} { any; };
    // TODO ^^^
    directory "${driver.osSupport.configDirectory}";
    dump-file "${driver.dataDirectory}/cache_dump.db";
    statistics-file "${driver.dataDirectory}/named_stats.txt";
    memstatistics-file "${driver.dataDirectory}/named_mem_stats.txt";
    allow-query { localhost; ${entity.managementCidr}; };
    allow-transfer { localhost; ${driver.address}; ${driver.subnetAddress}; };
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    bindkeys-file "${driver.osSupport.keysFile}";
    managed-keys-directory "${driver.dynamicDirectory}";
};

logging {
    channel default_debug {
        file "${driver.dataDirectory}/named.run";
        severity dynamic;
    };
};

zone "." IN {
    type hint;
    file "${driver.osSupport.rootZonesFile}";
};

zone "${entity.reverseLookupDomain}" IN {
    type master;
    file "${driver.reverseZoneFile}";
    allow-update { none; };
};

zone "${entity.domainName}" IN {
    type master;
    file "${driver.domainZoneFile}";
    allow-update { none; };
};

include "${driver.rfc1912ZonesFile}";
