# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['ZoneArgs', 'Zone']

@pulumi.input_type
class ZoneArgs:
    def __init__(__self__, *,
                 zone_name: pulumi.Input[builtins.str],
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 remark: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ZoneTagArgs']]]] = None):
        """
        The set of arguments for constructing a Zone resource.
        :param pulumi.Input[builtins.str] zone_name: 域名。
        :param pulumi.Input[builtins.str] project_name: 域名的项目。
        :param pulumi.Input[builtins.str] remark: 域名的备注。
        """
        pulumi.set(__self__, "zone_name", zone_name)
        if project_name is not None:
            pulumi.set(__self__, "project_name", project_name)
        if remark is not None:
            pulumi.set(__self__, "remark", remark)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="zoneName")
    def zone_name(self) -> pulumi.Input[builtins.str]:
        """
        域名。
        """
        return pulumi.get(self, "zone_name")

    @zone_name.setter
    def zone_name(self, value: pulumi.Input[builtins.str]):
        pulumi.set(self, "zone_name", value)

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名的项目。
        """
        return pulumi.get(self, "project_name")

    @project_name.setter
    def project_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "project_name", value)

    @property
    @pulumi.getter
    def remark(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名的备注。
        """
        return pulumi.get(self, "remark")

    @remark.setter
    def remark(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "remark", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ZoneTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ZoneTagArgs']]]]):
        pulumi.set(self, "tags", value)


@pulumi.input_type
class _ZoneState:
    def __init__(__self__, *,
                 allocate_dns_server_lists: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 auto_renew: Optional[pulumi.Input[builtins.bool]] = None,
                 cache_stage: Optional[pulumi.Input[builtins.int]] = None,
                 created_time: Optional[pulumi.Input[builtins.str]] = None,
                 dns_security: Optional[pulumi.Input[builtins.str]] = None,
                 expired_time: Optional[pulumi.Input[builtins.int]] = None,
                 instance_id: Optional[pulumi.Input[builtins.str]] = None,
                 instance_no: Optional[pulumi.Input[builtins.str]] = None,
                 is_ns_correct: Optional[pulumi.Input[builtins.bool]] = None,
                 is_sub_domain: Optional[pulumi.Input[builtins.bool]] = None,
                 last_operator: Optional[pulumi.Input[builtins.str]] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 real_dns_server_lists: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 record_count: Optional[pulumi.Input[builtins.int]] = None,
                 remark: Optional[pulumi.Input[builtins.str]] = None,
                 stage: Optional[pulumi.Input[builtins.int]] = None,
                 sub_domain_host: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ZoneTagArgs']]]] = None,
                 trade_code: Optional[pulumi.Input[builtins.str]] = None,
                 updated_time: Optional[pulumi.Input[builtins.str]] = None,
                 zid: Optional[pulumi.Input[builtins.str]] = None,
                 zone_name: Optional[pulumi.Input[builtins.str]] = None):
        """
        Input properties used for looking up and filtering Zone resources.
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] allocate_dns_server_lists: 云解析 DNS 分配给域名的 DNS 服务器列表。
        :param pulumi.Input[builtins.bool] auto_renew: 是否开启域名自动续费。true：开启域名自动续费。false：关闭域名自动续费。
        :param pulumi.Input[builtins.int] cache_stage: 域名所有权的状态。该参数有以下取值：0：表示您是域名的所有者。您添加此域名后，就可以管理该域名的 DNS 解析。1：表示您不是域名的所有者。您添加此域名后，该域名的状态是 域名待找回。如果您要管理该域名的 DNS 解析，您需要在控制台根据提示验证您的域名所有权。
        :param pulumi.Input[builtins.str] created_time: 域名的创建时间。
        :param pulumi.Input[builtins.str] dns_security: DNS DDoS 防护服务的版本。dns*security*standard_inner：安全防护标准版。""：无安全防护版。
        :param pulumi.Input[builtins.int] expired_time: 实例的过期时间。格式是 Unix 时间戳。对于云解析 DNS 免费版，该字段的值为 null。
        :param pulumi.Input[builtins.str] instance_id: 实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        :param pulumi.Input[builtins.str] instance_no: 实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        :param pulumi.Input[builtins.bool] is_ns_correct: DNS 服务器的配置是否正确。如果配置正确，该域名在云解析 DNS 中的状态是 正常。该参数有以下取值：true： RealDNSServerList的 DNS 服务器列表包含所有 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是正确的。false： RealDNSServerList的 DNS 服务器列表包含部分或者未包含 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是不正确的。
        :param pulumi.Input[builtins.bool] is_sub_domain: 是否是子域名。true：子域名。false：主域名。
        :param pulumi.Input[builtins.str] last_operator: 创建该域名的用户的账号的 ID。
        :param pulumi.Input[builtins.str] project_name: 域名的项目。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] real_dns_server_lists: 域名实际使用的 DNS 服务器列表。
        :param pulumi.Input[builtins.int] record_count: 域名所包含的解析记录的总数。
        :param pulumi.Input[builtins.str] remark: 域名的备注。
        :param pulumi.Input[builtins.int] stage: 域名的状态。该参数有以下取值：0：正常。在该状态下，该域名的解析记录处于生效状态。1：域名待找回。在该状态下，该域名的解析记录不生效。该状态表示您不是该域名的所有者。如果您需要管理域名解析，您需要验证您的域名所有权。2：未使用TrafficRoute解析。在该状态下，该域名的解析记录不生效。该状态表示分配给该域名的 DNS 服务器不是云解析 DNS 的 DNS 服务器。3：异常。在该状态下，该域名的解析记录不生效。引起该状态的常见原因如下：域名未实名认证导致域名被注册局或注册商停用。域名未配置 DNS 服务器。域名未注册。API 在查询域名时超时。超时原因可能是网络问题。5：请变更DNS服务器。该状态表示由于云解析 DNS 的服务升级或变更，您需要把域名的 DNS 服务器更新为云解析 DNS 新分配的 DNS 服务器。
        :param pulumi.Input[builtins.str] sub_domain_host: 子域名的域名前缀。如果该域名不是子域名，那么该参数为 null。
        :param pulumi.Input[builtins.str] trade_code: 域名的功能版本。该参数有以下取值：free*inner：免费版。professional*inner：专业版。enterprise*inner：企业版。ultimate*inner：旗舰版。ultimate*exclusive*inner：尊享版。
        :param pulumi.Input[builtins.str] updated_time: 域名最近一次的更新时间。更新操作包括：更新域名备注在域名下创建解析记录。
        :param pulumi.Input[builtins.str] zid: 域名的 ID。
        :param pulumi.Input[builtins.str] zone_name: 域名。
        """
        if allocate_dns_server_lists is not None:
            pulumi.set(__self__, "allocate_dns_server_lists", allocate_dns_server_lists)
        if auto_renew is not None:
            pulumi.set(__self__, "auto_renew", auto_renew)
        if cache_stage is not None:
            pulumi.set(__self__, "cache_stage", cache_stage)
        if created_time is not None:
            pulumi.set(__self__, "created_time", created_time)
        if dns_security is not None:
            pulumi.set(__self__, "dns_security", dns_security)
        if expired_time is not None:
            pulumi.set(__self__, "expired_time", expired_time)
        if instance_id is not None:
            pulumi.set(__self__, "instance_id", instance_id)
        if instance_no is not None:
            pulumi.set(__self__, "instance_no", instance_no)
        if is_ns_correct is not None:
            pulumi.set(__self__, "is_ns_correct", is_ns_correct)
        if is_sub_domain is not None:
            pulumi.set(__self__, "is_sub_domain", is_sub_domain)
        if last_operator is not None:
            pulumi.set(__self__, "last_operator", last_operator)
        if project_name is not None:
            pulumi.set(__self__, "project_name", project_name)
        if real_dns_server_lists is not None:
            pulumi.set(__self__, "real_dns_server_lists", real_dns_server_lists)
        if record_count is not None:
            pulumi.set(__self__, "record_count", record_count)
        if remark is not None:
            pulumi.set(__self__, "remark", remark)
        if stage is not None:
            pulumi.set(__self__, "stage", stage)
        if sub_domain_host is not None:
            pulumi.set(__self__, "sub_domain_host", sub_domain_host)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if trade_code is not None:
            pulumi.set(__self__, "trade_code", trade_code)
        if updated_time is not None:
            pulumi.set(__self__, "updated_time", updated_time)
        if zid is not None:
            pulumi.set(__self__, "zid", zid)
        if zone_name is not None:
            pulumi.set(__self__, "zone_name", zone_name)

    @property
    @pulumi.getter(name="allocateDnsServerLists")
    def allocate_dns_server_lists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        云解析 DNS 分配给域名的 DNS 服务器列表。
        """
        return pulumi.get(self, "allocate_dns_server_lists")

    @allocate_dns_server_lists.setter
    def allocate_dns_server_lists(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]):
        pulumi.set(self, "allocate_dns_server_lists", value)

    @property
    @pulumi.getter(name="autoRenew")
    def auto_renew(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        是否开启域名自动续费。true：开启域名自动续费。false：关闭域名自动续费。
        """
        return pulumi.get(self, "auto_renew")

    @auto_renew.setter
    def auto_renew(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "auto_renew", value)

    @property
    @pulumi.getter(name="cacheStage")
    def cache_stage(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        域名所有权的状态。该参数有以下取值：0：表示您是域名的所有者。您添加此域名后，就可以管理该域名的 DNS 解析。1：表示您不是域名的所有者。您添加此域名后，该域名的状态是 域名待找回。如果您要管理该域名的 DNS 解析，您需要在控制台根据提示验证您的域名所有权。
        """
        return pulumi.get(self, "cache_stage")

    @cache_stage.setter
    def cache_stage(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "cache_stage", value)

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名的创建时间。
        """
        return pulumi.get(self, "created_time")

    @created_time.setter
    def created_time(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "created_time", value)

    @property
    @pulumi.getter(name="dnsSecurity")
    def dns_security(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        DNS DDoS 防护服务的版本。dns*security*standard_inner：安全防护标准版。""：无安全防护版。
        """
        return pulumi.get(self, "dns_security")

    @dns_security.setter
    def dns_security(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "dns_security", value)

    @property
    @pulumi.getter(name="expiredTime")
    def expired_time(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        实例的过期时间。格式是 Unix 时间戳。对于云解析 DNS 免费版，该字段的值为 null。
        """
        return pulumi.get(self, "expired_time")

    @expired_time.setter
    def expired_time(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "expired_time", value)

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        """
        return pulumi.get(self, "instance_id")

    @instance_id.setter
    def instance_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "instance_id", value)

    @property
    @pulumi.getter(name="instanceNo")
    def instance_no(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        """
        return pulumi.get(self, "instance_no")

    @instance_no.setter
    def instance_no(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "instance_no", value)

    @property
    @pulumi.getter(name="isNsCorrect")
    def is_ns_correct(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        DNS 服务器的配置是否正确。如果配置正确，该域名在云解析 DNS 中的状态是 正常。该参数有以下取值：true： RealDNSServerList的 DNS 服务器列表包含所有 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是正确的。false： RealDNSServerList的 DNS 服务器列表包含部分或者未包含 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是不正确的。
        """
        return pulumi.get(self, "is_ns_correct")

    @is_ns_correct.setter
    def is_ns_correct(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "is_ns_correct", value)

    @property
    @pulumi.getter(name="isSubDomain")
    def is_sub_domain(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        是否是子域名。true：子域名。false：主域名。
        """
        return pulumi.get(self, "is_sub_domain")

    @is_sub_domain.setter
    def is_sub_domain(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "is_sub_domain", value)

    @property
    @pulumi.getter(name="lastOperator")
    def last_operator(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        创建该域名的用户的账号的 ID。
        """
        return pulumi.get(self, "last_operator")

    @last_operator.setter
    def last_operator(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "last_operator", value)

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名的项目。
        """
        return pulumi.get(self, "project_name")

    @project_name.setter
    def project_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "project_name", value)

    @property
    @pulumi.getter(name="realDnsServerLists")
    def real_dns_server_lists(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        域名实际使用的 DNS 服务器列表。
        """
        return pulumi.get(self, "real_dns_server_lists")

    @real_dns_server_lists.setter
    def real_dns_server_lists(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]):
        pulumi.set(self, "real_dns_server_lists", value)

    @property
    @pulumi.getter(name="recordCount")
    def record_count(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        域名所包含的解析记录的总数。
        """
        return pulumi.get(self, "record_count")

    @record_count.setter
    def record_count(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "record_count", value)

    @property
    @pulumi.getter
    def remark(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名的备注。
        """
        return pulumi.get(self, "remark")

    @remark.setter
    def remark(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "remark", value)

    @property
    @pulumi.getter
    def stage(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        域名的状态。该参数有以下取值：0：正常。在该状态下，该域名的解析记录处于生效状态。1：域名待找回。在该状态下，该域名的解析记录不生效。该状态表示您不是该域名的所有者。如果您需要管理域名解析，您需要验证您的域名所有权。2：未使用TrafficRoute解析。在该状态下，该域名的解析记录不生效。该状态表示分配给该域名的 DNS 服务器不是云解析 DNS 的 DNS 服务器。3：异常。在该状态下，该域名的解析记录不生效。引起该状态的常见原因如下：域名未实名认证导致域名被注册局或注册商停用。域名未配置 DNS 服务器。域名未注册。API 在查询域名时超时。超时原因可能是网络问题。5：请变更DNS服务器。该状态表示由于云解析 DNS 的服务升级或变更，您需要把域名的 DNS 服务器更新为云解析 DNS 新分配的 DNS 服务器。
        """
        return pulumi.get(self, "stage")

    @stage.setter
    def stage(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "stage", value)

    @property
    @pulumi.getter(name="subDomainHost")
    def sub_domain_host(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        子域名的域名前缀。如果该域名不是子域名，那么该参数为 null。
        """
        return pulumi.get(self, "sub_domain_host")

    @sub_domain_host.setter
    def sub_domain_host(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "sub_domain_host", value)

    @property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ZoneTagArgs']]]]:
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ZoneTagArgs']]]]):
        pulumi.set(self, "tags", value)

    @property
    @pulumi.getter(name="tradeCode")
    def trade_code(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名的功能版本。该参数有以下取值：free*inner：免费版。professional*inner：专业版。enterprise*inner：企业版。ultimate*inner：旗舰版。ultimate*exclusive*inner：尊享版。
        """
        return pulumi.get(self, "trade_code")

    @trade_code.setter
    def trade_code(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "trade_code", value)

    @property
    @pulumi.getter(name="updatedTime")
    def updated_time(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名最近一次的更新时间。更新操作包括：更新域名备注在域名下创建解析记录。
        """
        return pulumi.get(self, "updated_time")

    @updated_time.setter
    def updated_time(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "updated_time", value)

    @property
    @pulumi.getter
    def zid(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名的 ID。
        """
        return pulumi.get(self, "zid")

    @zid.setter
    def zid(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "zid", value)

    @property
    @pulumi.getter(name="zoneName")
    def zone_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        域名。
        """
        return pulumi.get(self, "zone_name")

    @zone_name.setter
    def zone_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "zone_name", value)


@pulumi.type_token("bytepluscc:dns/zone:Zone")
class Zone(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 remark: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ZoneTagArgs', 'ZoneTagArgsDict']]]]] = None,
                 zone_name: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        """
        资源里的zone就是域名，可以是主域名 例如 example.com，也可以是子域名 例如 abc.example.com

        ## Example Usage

        ```python
        import pulumi
        import pulumi_bytepluscc as bytepluscc

        dns_zone_demo = bytepluscc.dns.Zone("DnsZoneDemo",
            zone_name="DnsZoneDemo",
            remark="test",
            project_name="default",
            tags=[{
                "key": "env",
                "value": "test",
            }])
        ```

        ## Import

        ```sh
        $ pulumi import bytepluscc:dns/zone:Zone example "zid"
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[builtins.str] project_name: 域名的项目。
        :param pulumi.Input[builtins.str] remark: 域名的备注。
        :param pulumi.Input[builtins.str] zone_name: 域名。
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: ZoneArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        资源里的zone就是域名，可以是主域名 例如 example.com，也可以是子域名 例如 abc.example.com

        ## Example Usage

        ```python
        import pulumi
        import pulumi_bytepluscc as bytepluscc

        dns_zone_demo = bytepluscc.dns.Zone("DnsZoneDemo",
            zone_name="DnsZoneDemo",
            remark="test",
            project_name="default",
            tags=[{
                "key": "env",
                "value": "test",
            }])
        ```

        ## Import

        ```sh
        $ pulumi import bytepluscc:dns/zone:Zone example "zid"
        ```

        :param str resource_name: The name of the resource.
        :param ZoneArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(ZoneArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 project_name: Optional[pulumi.Input[builtins.str]] = None,
                 remark: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ZoneTagArgs', 'ZoneTagArgsDict']]]]] = None,
                 zone_name: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = ZoneArgs.__new__(ZoneArgs)

            __props__.__dict__["project_name"] = project_name
            __props__.__dict__["remark"] = remark
            __props__.__dict__["tags"] = tags
            if zone_name is None and not opts.urn:
                raise TypeError("Missing required property 'zone_name'")
            __props__.__dict__["zone_name"] = zone_name
            __props__.__dict__["allocate_dns_server_lists"] = None
            __props__.__dict__["auto_renew"] = None
            __props__.__dict__["cache_stage"] = None
            __props__.__dict__["created_time"] = None
            __props__.__dict__["dns_security"] = None
            __props__.__dict__["expired_time"] = None
            __props__.__dict__["instance_id"] = None
            __props__.__dict__["instance_no"] = None
            __props__.__dict__["is_ns_correct"] = None
            __props__.__dict__["is_sub_domain"] = None
            __props__.__dict__["last_operator"] = None
            __props__.__dict__["real_dns_server_lists"] = None
            __props__.__dict__["record_count"] = None
            __props__.__dict__["stage"] = None
            __props__.__dict__["sub_domain_host"] = None
            __props__.__dict__["trade_code"] = None
            __props__.__dict__["updated_time"] = None
            __props__.__dict__["zid"] = None
        super(Zone, __self__).__init__(
            'bytepluscc:dns/zone:Zone',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            allocate_dns_server_lists: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
            auto_renew: Optional[pulumi.Input[builtins.bool]] = None,
            cache_stage: Optional[pulumi.Input[builtins.int]] = None,
            created_time: Optional[pulumi.Input[builtins.str]] = None,
            dns_security: Optional[pulumi.Input[builtins.str]] = None,
            expired_time: Optional[pulumi.Input[builtins.int]] = None,
            instance_id: Optional[pulumi.Input[builtins.str]] = None,
            instance_no: Optional[pulumi.Input[builtins.str]] = None,
            is_ns_correct: Optional[pulumi.Input[builtins.bool]] = None,
            is_sub_domain: Optional[pulumi.Input[builtins.bool]] = None,
            last_operator: Optional[pulumi.Input[builtins.str]] = None,
            project_name: Optional[pulumi.Input[builtins.str]] = None,
            real_dns_server_lists: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
            record_count: Optional[pulumi.Input[builtins.int]] = None,
            remark: Optional[pulumi.Input[builtins.str]] = None,
            stage: Optional[pulumi.Input[builtins.int]] = None,
            sub_domain_host: Optional[pulumi.Input[builtins.str]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ZoneTagArgs', 'ZoneTagArgsDict']]]]] = None,
            trade_code: Optional[pulumi.Input[builtins.str]] = None,
            updated_time: Optional[pulumi.Input[builtins.str]] = None,
            zid: Optional[pulumi.Input[builtins.str]] = None,
            zone_name: Optional[pulumi.Input[builtins.str]] = None) -> 'Zone':
        """
        Get an existing Zone resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] allocate_dns_server_lists: 云解析 DNS 分配给域名的 DNS 服务器列表。
        :param pulumi.Input[builtins.bool] auto_renew: 是否开启域名自动续费。true：开启域名自动续费。false：关闭域名自动续费。
        :param pulumi.Input[builtins.int] cache_stage: 域名所有权的状态。该参数有以下取值：0：表示您是域名的所有者。您添加此域名后，就可以管理该域名的 DNS 解析。1：表示您不是域名的所有者。您添加此域名后，该域名的状态是 域名待找回。如果您要管理该域名的 DNS 解析，您需要在控制台根据提示验证您的域名所有权。
        :param pulumi.Input[builtins.str] created_time: 域名的创建时间。
        :param pulumi.Input[builtins.str] dns_security: DNS DDoS 防护服务的版本。dns*security*standard_inner：安全防护标准版。""：无安全防护版。
        :param pulumi.Input[builtins.int] expired_time: 实例的过期时间。格式是 Unix 时间戳。对于云解析 DNS 免费版，该字段的值为 null。
        :param pulumi.Input[builtins.str] instance_id: 实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        :param pulumi.Input[builtins.str] instance_no: 实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        :param pulumi.Input[builtins.bool] is_ns_correct: DNS 服务器的配置是否正确。如果配置正确，该域名在云解析 DNS 中的状态是 正常。该参数有以下取值：true： RealDNSServerList的 DNS 服务器列表包含所有 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是正确的。false： RealDNSServerList的 DNS 服务器列表包含部分或者未包含 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是不正确的。
        :param pulumi.Input[builtins.bool] is_sub_domain: 是否是子域名。true：子域名。false：主域名。
        :param pulumi.Input[builtins.str] last_operator: 创建该域名的用户的账号的 ID。
        :param pulumi.Input[builtins.str] project_name: 域名的项目。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] real_dns_server_lists: 域名实际使用的 DNS 服务器列表。
        :param pulumi.Input[builtins.int] record_count: 域名所包含的解析记录的总数。
        :param pulumi.Input[builtins.str] remark: 域名的备注。
        :param pulumi.Input[builtins.int] stage: 域名的状态。该参数有以下取值：0：正常。在该状态下，该域名的解析记录处于生效状态。1：域名待找回。在该状态下，该域名的解析记录不生效。该状态表示您不是该域名的所有者。如果您需要管理域名解析，您需要验证您的域名所有权。2：未使用TrafficRoute解析。在该状态下，该域名的解析记录不生效。该状态表示分配给该域名的 DNS 服务器不是云解析 DNS 的 DNS 服务器。3：异常。在该状态下，该域名的解析记录不生效。引起该状态的常见原因如下：域名未实名认证导致域名被注册局或注册商停用。域名未配置 DNS 服务器。域名未注册。API 在查询域名时超时。超时原因可能是网络问题。5：请变更DNS服务器。该状态表示由于云解析 DNS 的服务升级或变更，您需要把域名的 DNS 服务器更新为云解析 DNS 新分配的 DNS 服务器。
        :param pulumi.Input[builtins.str] sub_domain_host: 子域名的域名前缀。如果该域名不是子域名，那么该参数为 null。
        :param pulumi.Input[builtins.str] trade_code: 域名的功能版本。该参数有以下取值：free*inner：免费版。professional*inner：专业版。enterprise*inner：企业版。ultimate*inner：旗舰版。ultimate*exclusive*inner：尊享版。
        :param pulumi.Input[builtins.str] updated_time: 域名最近一次的更新时间。更新操作包括：更新域名备注在域名下创建解析记录。
        :param pulumi.Input[builtins.str] zid: 域名的 ID。
        :param pulumi.Input[builtins.str] zone_name: 域名。
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _ZoneState.__new__(_ZoneState)

        __props__.__dict__["allocate_dns_server_lists"] = allocate_dns_server_lists
        __props__.__dict__["auto_renew"] = auto_renew
        __props__.__dict__["cache_stage"] = cache_stage
        __props__.__dict__["created_time"] = created_time
        __props__.__dict__["dns_security"] = dns_security
        __props__.__dict__["expired_time"] = expired_time
        __props__.__dict__["instance_id"] = instance_id
        __props__.__dict__["instance_no"] = instance_no
        __props__.__dict__["is_ns_correct"] = is_ns_correct
        __props__.__dict__["is_sub_domain"] = is_sub_domain
        __props__.__dict__["last_operator"] = last_operator
        __props__.__dict__["project_name"] = project_name
        __props__.__dict__["real_dns_server_lists"] = real_dns_server_lists
        __props__.__dict__["record_count"] = record_count
        __props__.__dict__["remark"] = remark
        __props__.__dict__["stage"] = stage
        __props__.__dict__["sub_domain_host"] = sub_domain_host
        __props__.__dict__["tags"] = tags
        __props__.__dict__["trade_code"] = trade_code
        __props__.__dict__["updated_time"] = updated_time
        __props__.__dict__["zid"] = zid
        __props__.__dict__["zone_name"] = zone_name
        return Zone(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="allocateDnsServerLists")
    def allocate_dns_server_lists(self) -> pulumi.Output[Sequence[builtins.str]]:
        """
        云解析 DNS 分配给域名的 DNS 服务器列表。
        """
        return pulumi.get(self, "allocate_dns_server_lists")

    @property
    @pulumi.getter(name="autoRenew")
    def auto_renew(self) -> pulumi.Output[builtins.bool]:
        """
        是否开启域名自动续费。true：开启域名自动续费。false：关闭域名自动续费。
        """
        return pulumi.get(self, "auto_renew")

    @property
    @pulumi.getter(name="cacheStage")
    def cache_stage(self) -> pulumi.Output[builtins.int]:
        """
        域名所有权的状态。该参数有以下取值：0：表示您是域名的所有者。您添加此域名后，就可以管理该域名的 DNS 解析。1：表示您不是域名的所有者。您添加此域名后，该域名的状态是 域名待找回。如果您要管理该域名的 DNS 解析，您需要在控制台根据提示验证您的域名所有权。
        """
        return pulumi.get(self, "cache_stage")

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> pulumi.Output[builtins.str]:
        """
        域名的创建时间。
        """
        return pulumi.get(self, "created_time")

    @property
    @pulumi.getter(name="dnsSecurity")
    def dns_security(self) -> pulumi.Output[builtins.str]:
        """
        DNS DDoS 防护服务的版本。dns*security*standard_inner：安全防护标准版。""：无安全防护版。
        """
        return pulumi.get(self, "dns_security")

    @property
    @pulumi.getter(name="expiredTime")
    def expired_time(self) -> pulumi.Output[builtins.int]:
        """
        实例的过期时间。格式是 Unix 时间戳。对于云解析 DNS 免费版，该字段的值为 null。
        """
        return pulumi.get(self, "expired_time")

    @property
    @pulumi.getter(name="instanceId")
    def instance_id(self) -> pulumi.Output[builtins.str]:
        """
        实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        """
        return pulumi.get(self, "instance_id")

    @property
    @pulumi.getter(name="instanceNo")
    def instance_no(self) -> pulumi.Output[builtins.str]:
        """
        实例的 ID。对于云解析 DNS 免费版，该字段的值为 null。
        """
        return pulumi.get(self, "instance_no")

    @property
    @pulumi.getter(name="isNsCorrect")
    def is_ns_correct(self) -> pulumi.Output[builtins.bool]:
        """
        DNS 服务器的配置是否正确。如果配置正确，该域名在云解析 DNS 中的状态是 正常。该参数有以下取值：true： RealDNSServerList的 DNS 服务器列表包含所有 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是正确的。false： RealDNSServerList的 DNS 服务器列表包含部分或者未包含 AllocateDNSServerList中的 DNS 服务器。此时，DNS 服务器的配置是不正确的。
        """
        return pulumi.get(self, "is_ns_correct")

    @property
    @pulumi.getter(name="isSubDomain")
    def is_sub_domain(self) -> pulumi.Output[builtins.bool]:
        """
        是否是子域名。true：子域名。false：主域名。
        """
        return pulumi.get(self, "is_sub_domain")

    @property
    @pulumi.getter(name="lastOperator")
    def last_operator(self) -> pulumi.Output[builtins.str]:
        """
        创建该域名的用户的账号的 ID。
        """
        return pulumi.get(self, "last_operator")

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> pulumi.Output[builtins.str]:
        """
        域名的项目。
        """
        return pulumi.get(self, "project_name")

    @property
    @pulumi.getter(name="realDnsServerLists")
    def real_dns_server_lists(self) -> pulumi.Output[Sequence[builtins.str]]:
        """
        域名实际使用的 DNS 服务器列表。
        """
        return pulumi.get(self, "real_dns_server_lists")

    @property
    @pulumi.getter(name="recordCount")
    def record_count(self) -> pulumi.Output[builtins.int]:
        """
        域名所包含的解析记录的总数。
        """
        return pulumi.get(self, "record_count")

    @property
    @pulumi.getter
    def remark(self) -> pulumi.Output[builtins.str]:
        """
        域名的备注。
        """
        return pulumi.get(self, "remark")

    @property
    @pulumi.getter
    def stage(self) -> pulumi.Output[builtins.int]:
        """
        域名的状态。该参数有以下取值：0：正常。在该状态下，该域名的解析记录处于生效状态。1：域名待找回。在该状态下，该域名的解析记录不生效。该状态表示您不是该域名的所有者。如果您需要管理域名解析，您需要验证您的域名所有权。2：未使用TrafficRoute解析。在该状态下，该域名的解析记录不生效。该状态表示分配给该域名的 DNS 服务器不是云解析 DNS 的 DNS 服务器。3：异常。在该状态下，该域名的解析记录不生效。引起该状态的常见原因如下：域名未实名认证导致域名被注册局或注册商停用。域名未配置 DNS 服务器。域名未注册。API 在查询域名时超时。超时原因可能是网络问题。5：请变更DNS服务器。该状态表示由于云解析 DNS 的服务升级或变更，您需要把域名的 DNS 服务器更新为云解析 DNS 新分配的 DNS 服务器。
        """
        return pulumi.get(self, "stage")

    @property
    @pulumi.getter(name="subDomainHost")
    def sub_domain_host(self) -> pulumi.Output[builtins.str]:
        """
        子域名的域名前缀。如果该域名不是子域名，那么该参数为 null。
        """
        return pulumi.get(self, "sub_domain_host")

    @property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Sequence['outputs.ZoneTag']]:
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="tradeCode")
    def trade_code(self) -> pulumi.Output[builtins.str]:
        """
        域名的功能版本。该参数有以下取值：free*inner：免费版。professional*inner：专业版。enterprise*inner：企业版。ultimate*inner：旗舰版。ultimate*exclusive*inner：尊享版。
        """
        return pulumi.get(self, "trade_code")

    @property
    @pulumi.getter(name="updatedTime")
    def updated_time(self) -> pulumi.Output[builtins.str]:
        """
        域名最近一次的更新时间。更新操作包括：更新域名备注在域名下创建解析记录。
        """
        return pulumi.get(self, "updated_time")

    @property
    @pulumi.getter
    def zid(self) -> pulumi.Output[builtins.str]:
        """
        域名的 ID。
        """
        return pulumi.get(self, "zid")

    @property
    @pulumi.getter(name="zoneName")
    def zone_name(self) -> pulumi.Output[builtins.str]:
        """
        域名。
        """
        return pulumi.get(self, "zone_name")

