import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * This resource provides the Zone resource in Oracle Cloud Infrastructure DNS service.
 * Api doc link for the resource: https://docs.oracle.com/iaas/api/#/en/dns/latest/Zone
 *
 * Example terraform configs related to the resource : https://github.com/oracle/terraform-provider-oci/tree/master/examples/dns
 *
 * Creates a new zone in the specified compartment.
 *
 * Private zones must have a zone type of `PRIMARY`. Creating a private zone at or under `oraclevcn.com`
 * within the default protected view of a VCN-dedicated resolver is not permitted.
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as oci from "@pulumi/oci";
 *
 * const testZone = new oci.dns.Zone("test_zone", {
 *     compartmentId: compartmentId,
 *     name: zoneName,
 *     zoneType: zoneZoneType,
 *     definedTags: zoneDefinedTags,
 *     dnssecState: zoneDnssecState,
 *     externalDownstreams: [{
 *         address: zoneExternalDownstreamsAddress,
 *         port: Number(zoneExternalDownstreamsPort),
 *         tsigKeyId: testTsigKey.id,
 *     }],
 *     externalMasters: [{
 *         address: zoneExternalMastersAddress,
 *         port: Number(zoneExternalMastersPort),
 *         tsigKeyId: testTsigKey.id,
 *     }],
 *     freeformTags: zoneFreeformTags,
 *     resolutionMode: zoneResolutionMode,
 *     scope: zoneScope,
 *     viewId: testView.id,
 * });
 * ```
 *
 * ## Import
 *
 * Zones can be imported using the `id`, e.g.
 *
 * ```sh
 * $ pulumi import oci:Dns/zone:Zone test_zone "id"
 * ```
 */
export declare class Zone extends pulumi.CustomResource {
    /**
     * Get an existing Zone resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name: string, id: pulumi.Input<pulumi.ID>, state?: ZoneState, opts?: pulumi.CustomResourceOptions): Zone;
    /**
     * Returns true if the given object is an instance of Zone.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is Zone;
    /**
     * (Updatable) The OCID of the compartment containing the zone.
     */
    readonly compartmentId: pulumi.Output<string>;
    /**
     * (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
     *
     * **Example:** `{"Operations": {"CostCenter": "42"}}`
     */
    readonly definedTags: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * DNSSEC configuration data.
     */
    readonly dnssecConfigs: pulumi.Output<outputs.Dns.ZoneDnssecConfig[]>;
    /**
     * (Updatable) The state of DNSSEC on the zone.
     *
     * For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent trust anchor) must also have DNSSEC correctly set up. After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`.
     *
     * New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`.
     *
     * To remove the old DS record without causing service disruption, wait until the old DS record's TTL has expired, and the new DS record has propagated. After the DS replacement has been completed, then the `PromoteZoneDnssecKeyVersion` operation must be called.
     *
     * Metrics are emitted in the `ociDns` namespace daily for each `KskDnssecKeyVersion` indicating how many days are left until expiration. We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called.
     *
     * Enabling DNSSEC results in additional records in DNS responses which increases their size and can cause higher response latency.
     *
     * For more information, see [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm).
     */
    readonly dnssecState: pulumi.Output<string>;
    /**
     * (Updatable) External secondary servers for the zone. This field is currently not supported when `zoneType` is `SECONDARY` or `scope` is `PRIVATE`.
     */
    readonly externalDownstreams: pulumi.Output<outputs.Dns.ZoneExternalDownstream[]>;
    /**
     * (Updatable) External master servers for the zone. `externalMasters` becomes a required parameter when the `zoneType` value is `SECONDARY`.
     */
    readonly externalMasters: pulumi.Output<outputs.Dns.ZoneExternalMaster[]>;
    /**
     * (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
     *
     * **Example:** `{"Department": "Finance"}`
     */
    readonly freeformTags: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * A Boolean flag indicating whether or not parts of the resource are unable to be explicitly managed.
     */
    readonly isProtected: pulumi.Output<boolean>;
    /**
     * The name of the zone.
     */
    readonly name: pulumi.Output<string>;
    readonly nameservers: pulumi.Output<outputs.Dns.ZoneNameserver[]>;
    /**
     * (Updatable) The resolution mode of a zone defines behavior related to how query responses can be handled.
     */
    readonly resolutionMode: pulumi.Output<string>;
    /**
     * Specifies to operate only on resources that have a matching DNS scope.
     */
    readonly scope: pulumi.Output<string>;
    /**
     * The canonical absolute URL of the resource.
     */
    readonly self: pulumi.Output<string>;
    /**
     * The current serial of the zone. As seen in the zone's SOA record.
     */
    readonly serial: pulumi.Output<number>;
    /**
     * The current state of the zone resource.
     */
    readonly state: pulumi.Output<string>;
    /**
     * The date and time the resource was created in "YYYY-MM-ddThh:mm:ssZ" format with a Z offset, as defined by RFC 3339.
     */
    readonly timeCreated: pulumi.Output<string>;
    /**
     * Version is the never-repeating, totally-orderable, version of the zone, from which the serial field of the zone's SOA record is derived.
     */
    readonly version: pulumi.Output<string>;
    /**
     * The OCID of the private view containing the zone. This value will be null for zones in the global DNS, which are publicly resolvable and not part of a private view.
     */
    readonly viewId: pulumi.Output<string | undefined>;
    /**
     * The Oracle Cloud Infrastructure nameservers that transfer the zone data with external nameservers.
     */
    readonly zoneTransferServers: pulumi.Output<outputs.Dns.ZoneZoneTransferServer[]>;
    /**
     * The type of the zone. Must be either `PRIMARY` or `SECONDARY`. `SECONDARY` is only supported for GLOBAL zones.
     *
     *
     * ** IMPORTANT **
     * Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
     *
     * When the zone is re-created, all DNS records managed for this zone via Terraform will also be re-created on the new zone
     */
    readonly zoneType: pulumi.Output<string>;
    /**
     * Create a Zone resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: ZoneArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Zone resources.
 */
export interface ZoneState {
    /**
     * (Updatable) The OCID of the compartment containing the zone.
     */
    compartmentId?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
     *
     * **Example:** `{"Operations": {"CostCenter": "42"}}`
     */
    definedTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * DNSSEC configuration data.
     */
    dnssecConfigs?: pulumi.Input<pulumi.Input<inputs.Dns.ZoneDnssecConfig>[] | undefined>;
    /**
     * (Updatable) The state of DNSSEC on the zone.
     *
     * For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent trust anchor) must also have DNSSEC correctly set up. After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`.
     *
     * New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`.
     *
     * To remove the old DS record without causing service disruption, wait until the old DS record's TTL has expired, and the new DS record has propagated. After the DS replacement has been completed, then the `PromoteZoneDnssecKeyVersion` operation must be called.
     *
     * Metrics are emitted in the `ociDns` namespace daily for each `KskDnssecKeyVersion` indicating how many days are left until expiration. We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called.
     *
     * Enabling DNSSEC results in additional records in DNS responses which increases their size and can cause higher response latency.
     *
     * For more information, see [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm).
     */
    dnssecState?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) External secondary servers for the zone. This field is currently not supported when `zoneType` is `SECONDARY` or `scope` is `PRIVATE`.
     */
    externalDownstreams?: pulumi.Input<pulumi.Input<inputs.Dns.ZoneExternalDownstream>[] | undefined>;
    /**
     * (Updatable) External master servers for the zone. `externalMasters` becomes a required parameter when the `zoneType` value is `SECONDARY`.
     */
    externalMasters?: pulumi.Input<pulumi.Input<inputs.Dns.ZoneExternalMaster>[] | undefined>;
    /**
     * (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
     *
     * **Example:** `{"Department": "Finance"}`
     */
    freeformTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * A Boolean flag indicating whether or not parts of the resource are unable to be explicitly managed.
     */
    isProtected?: pulumi.Input<boolean | undefined>;
    /**
     * The name of the zone.
     */
    name?: pulumi.Input<string | undefined>;
    nameservers?: pulumi.Input<pulumi.Input<inputs.Dns.ZoneNameserver>[] | undefined>;
    /**
     * (Updatable) The resolution mode of a zone defines behavior related to how query responses can be handled.
     */
    resolutionMode?: pulumi.Input<string | undefined>;
    /**
     * Specifies to operate only on resources that have a matching DNS scope.
     */
    scope?: pulumi.Input<string | undefined>;
    /**
     * The canonical absolute URL of the resource.
     */
    self?: pulumi.Input<string | undefined>;
    /**
     * The current serial of the zone. As seen in the zone's SOA record.
     */
    serial?: pulumi.Input<number | undefined>;
    /**
     * The current state of the zone resource.
     */
    state?: pulumi.Input<string | undefined>;
    /**
     * The date and time the resource was created in "YYYY-MM-ddThh:mm:ssZ" format with a Z offset, as defined by RFC 3339.
     */
    timeCreated?: pulumi.Input<string | undefined>;
    /**
     * Version is the never-repeating, totally-orderable, version of the zone, from which the serial field of the zone's SOA record is derived.
     */
    version?: pulumi.Input<string | undefined>;
    /**
     * The OCID of the private view containing the zone. This value will be null for zones in the global DNS, which are publicly resolvable and not part of a private view.
     */
    viewId?: pulumi.Input<string | undefined>;
    /**
     * The Oracle Cloud Infrastructure nameservers that transfer the zone data with external nameservers.
     */
    zoneTransferServers?: pulumi.Input<pulumi.Input<inputs.Dns.ZoneZoneTransferServer>[] | undefined>;
    /**
     * The type of the zone. Must be either `PRIMARY` or `SECONDARY`. `SECONDARY` is only supported for GLOBAL zones.
     *
     *
     * ** IMPORTANT **
     * Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
     *
     * When the zone is re-created, all DNS records managed for this zone via Terraform will also be re-created on the new zone
     */
    zoneType?: pulumi.Input<string | undefined>;
}
/**
 * The set of arguments for constructing a Zone resource.
 */
export interface ZoneArgs {
    /**
     * (Updatable) The OCID of the compartment containing the zone.
     */
    compartmentId: pulumi.Input<string>;
    /**
     * (Updatable) Defined tags for this resource. Each key is predefined and scoped to a namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
     *
     * **Example:** `{"Operations": {"CostCenter": "42"}}`
     */
    definedTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * (Updatable) The state of DNSSEC on the zone.
     *
     * For DNSSEC to function, every parent zone in the DNS tree up to the top-level domain (or an independent trust anchor) must also have DNSSEC correctly set up. After enabling DNSSEC, you must add a DS record to the zone's parent zone containing the `KskDnssecKeyVersion` data. You can find the DS data in the `dsData` attribute of the `KskDnssecKeyVersion`. Then, use the `PromoteZoneDnssecKeyVersion` operation to promote the `KskDnssecKeyVersion`.
     *
     * New `KskDnssecKeyVersion`s are generated annually, a week before the existing `KskDnssecKeyVersion`'s expiration. To rollover a `KskDnssecKeyVersion`, you must replace the parent zone's DS record containing the old `KskDnssecKeyVersion` data with the data from the new `KskDnssecKeyVersion`.
     *
     * To remove the old DS record without causing service disruption, wait until the old DS record's TTL has expired, and the new DS record has propagated. After the DS replacement has been completed, then the `PromoteZoneDnssecKeyVersion` operation must be called.
     *
     * Metrics are emitted in the `ociDns` namespace daily for each `KskDnssecKeyVersion` indicating how many days are left until expiration. We recommend that you set up alarms and notifications for KskDnssecKeyVersion expiration so that the necessary parent zone updates can be made and the `PromoteZoneDnssecKeyVersion` operation can be called.
     *
     * Enabling DNSSEC results in additional records in DNS responses which increases their size and can cause higher response latency.
     *
     * For more information, see [DNSSEC](https://docs.cloud.oracle.com/iaas/Content/DNS/Concepts/dnssec.htm).
     */
    dnssecState?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) External secondary servers for the zone. This field is currently not supported when `zoneType` is `SECONDARY` or `scope` is `PRIVATE`.
     */
    externalDownstreams?: pulumi.Input<pulumi.Input<inputs.Dns.ZoneExternalDownstream>[] | undefined>;
    /**
     * (Updatable) External master servers for the zone. `externalMasters` becomes a required parameter when the `zoneType` value is `SECONDARY`.
     */
    externalMasters?: pulumi.Input<pulumi.Input<inputs.Dns.ZoneExternalMaster>[] | undefined>;
    /**
     * (Updatable) Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace. For more information, see [Resource Tags](https://docs.cloud.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
     *
     * **Example:** `{"Department": "Finance"}`
     */
    freeformTags?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * The name of the zone.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) The resolution mode of a zone defines behavior related to how query responses can be handled.
     */
    resolutionMode?: pulumi.Input<string | undefined>;
    /**
     * Specifies to operate only on resources that have a matching DNS scope.
     */
    scope?: pulumi.Input<string | undefined>;
    /**
     * The OCID of the private view containing the zone. This value will be null for zones in the global DNS, which are publicly resolvable and not part of a private view.
     */
    viewId?: pulumi.Input<string | undefined>;
    /**
     * The type of the zone. Must be either `PRIMARY` or `SECONDARY`. `SECONDARY` is only supported for GLOBAL zones.
     *
     *
     * ** IMPORTANT **
     * Any change to a property that does not support update will force the destruction and recreation of the resource with the new property values
     *
     * When the zone is re-created, all DNS records managed for this zone via Terraform will also be re-created on the new zone
     */
    zoneType: pulumi.Input<string>;
}
//# sourceMappingURL=zone.d.ts.map