public static Set<RecordType> recordTypesFor(IP.Version ipVersion, NodeType hostType, CloudName cloudName, boolean enclave, boolean allowReverse, boolean azureIpv6Enabled) {

        if (cloudName == CloudName.AZURE && !azureIpv6Enabled) {
            return ipVersion.is6() ? EnumSet.noneOf(RecordType.class) :
                    // Each Azure enclave and cfg host and child gets one private 10.* address and one public address.
                    // The private DNS zone resolves to the private, while the public DNS zone resolves to the public,
                    // which is why we return FORWARD and PUBLIC_FORWARD here.  The node repo only contains the private addresses.
                    enclave || hostType == confighost ? EnumSet.of(RecordType.FORWARD, RecordType.PUBLIC_FORWARD) :
                            EnumSet.of(RecordType.FORWARD);
        }

        if (cloudName == CloudName.AWS || cloudName == CloudName.GCP || cloudName == CloudName.AZURE) {
            if (enclave) {
                return ipVersion.is6() ?
                       EnumSet.of(RecordType.FORWARD, RecordType.PUBLIC_FORWARD) :
                       EnumSet.noneOf(RecordType.class);
            } else {
                Set<RecordType> types = new HashSet<>();
                types.add(RecordType.FORWARD);
                if (hostType == confighost && ipVersion.is6()) {
                    types.add(RecordType.PUBLIC_FORWARD);
                }
                if (allowReverse) {
                    types.add(RecordType.REVERSE);
                }
                return types;
            }
        }

        throw new IllegalArgumentException("Does not manage DNS for cloud " + cloudName);
    }
Returns the set of DNS record types for a host and its children and the given version (ipv6), host type, etc.
node-repository/src/main/java/com/yahoo/vespa/hosted/provision/node/Dns.java