# 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

__all__ = [
    'GetZoneResult',
    'AwaitableGetZoneResult',
    'get_zone',
    'get_zone_output',
]

@pulumi.output_type
class GetZoneResult:
    """
    A collection of values returned by getZone.
    """
    def __init__(__self__, allocate_dns_server_lists=None, auto_renew=None, cache_stage=None, created_time=None, dns_security=None, expired_time=None, id=None, instance_id=None, instance_no=None, is_ns_correct=None, is_sub_domain=None, last_operator=None, project_name=None, real_dns_server_lists=None, record_count=None, remark=None, stage=None, sub_domain_host=None, tags=None, trade_code=None, updated_time=None, zid=None, zone_name=None):
        if allocate_dns_server_lists and not isinstance(allocate_dns_server_lists, list):
            raise TypeError("Expected argument 'allocate_dns_server_lists' to be a list")
        pulumi.set(__self__, "allocate_dns_server_lists", allocate_dns_server_lists)
        if auto_renew and not isinstance(auto_renew, bool):
            raise TypeError("Expected argument 'auto_renew' to be a bool")
        pulumi.set(__self__, "auto_renew", auto_renew)
        if cache_stage and not isinstance(cache_stage, int):
            raise TypeError("Expected argument 'cache_stage' to be a int")
        pulumi.set(__self__, "cache_stage", cache_stage)
        if created_time and not isinstance(created_time, str):
            raise TypeError("Expected argument 'created_time' to be a str")
        pulumi.set(__self__, "created_time", created_time)
        if dns_security and not isinstance(dns_security, str):
            raise TypeError("Expected argument 'dns_security' to be a str")
        pulumi.set(__self__, "dns_security", dns_security)
        if expired_time and not isinstance(expired_time, int):
            raise TypeError("Expected argument 'expired_time' to be a int")
        pulumi.set(__self__, "expired_time", expired_time)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if instance_id and not isinstance(instance_id, str):
            raise TypeError("Expected argument 'instance_id' to be a str")
        pulumi.set(__self__, "instance_id", instance_id)
        if instance_no and not isinstance(instance_no, str):
            raise TypeError("Expected argument 'instance_no' to be a str")
        pulumi.set(__self__, "instance_no", instance_no)
        if is_ns_correct and not isinstance(is_ns_correct, bool):
            raise TypeError("Expected argument 'is_ns_correct' to be a bool")
        pulumi.set(__self__, "is_ns_correct", is_ns_correct)
        if is_sub_domain and not isinstance(is_sub_domain, bool):
            raise TypeError("Expected argument 'is_sub_domain' to be a bool")
        pulumi.set(__self__, "is_sub_domain", is_sub_domain)
        if last_operator and not isinstance(last_operator, str):
            raise TypeError("Expected argument 'last_operator' to be a str")
        pulumi.set(__self__, "last_operator", last_operator)
        if project_name and not isinstance(project_name, str):
            raise TypeError("Expected argument 'project_name' to be a str")
        pulumi.set(__self__, "project_name", project_name)
        if real_dns_server_lists and not isinstance(real_dns_server_lists, list):
            raise TypeError("Expected argument 'real_dns_server_lists' to be a list")
        pulumi.set(__self__, "real_dns_server_lists", real_dns_server_lists)
        if record_count and not isinstance(record_count, int):
            raise TypeError("Expected argument 'record_count' to be a int")
        pulumi.set(__self__, "record_count", record_count)
        if remark and not isinstance(remark, str):
            raise TypeError("Expected argument 'remark' to be a str")
        pulumi.set(__self__, "remark", remark)
        if stage and not isinstance(stage, int):
            raise TypeError("Expected argument 'stage' to be a int")
        pulumi.set(__self__, "stage", stage)
        if sub_domain_host and not isinstance(sub_domain_host, str):
            raise TypeError("Expected argument 'sub_domain_host' to be a str")
        pulumi.set(__self__, "sub_domain_host", sub_domain_host)
        if tags and not isinstance(tags, list):
            raise TypeError("Expected argument 'tags' to be a list")
        pulumi.set(__self__, "tags", tags)
        if trade_code and not isinstance(trade_code, str):
            raise TypeError("Expected argument 'trade_code' to be a str")
        pulumi.set(__self__, "trade_code", trade_code)
        if updated_time and not isinstance(updated_time, str):
            raise TypeError("Expected argument 'updated_time' to be a str")
        pulumi.set(__self__, "updated_time", updated_time)
        if zid and not isinstance(zid, str):
            raise TypeError("Expected argument 'zid' to be a str")
        pulumi.set(__self__, "zid", zid)
        if zone_name and not isinstance(zone_name, str):
            raise TypeError("Expected argument 'zone_name' to be a str")
        pulumi.set(__self__, "zone_name", zone_name)

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

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

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

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

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

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

    @property
    @pulumi.getter
    def id(self) -> builtins.str:
        """
        Uniquely identifies the resource.
        """
        return pulumi.get(self, "id")

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

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

    @property
    @pulumi.getter(name="isNsCorrect")
    def is_ns_correct(self) -> 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) -> builtins.bool:
        """
        是否是子域名。true：子域名。false：主域名。
        """
        return pulumi.get(self, "is_sub_domain")

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

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

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

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

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

    @property
    @pulumi.getter
    def stage(self) -> 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) -> builtins.str:
        """
        子域名的域名前缀。如果该域名不是子域名，那么该参数为 null。
        """
        return pulumi.get(self, "sub_domain_host")

    @property
    @pulumi.getter
    def tags(self) -> Sequence['outputs.GetZoneTagResult']:
        """
        该域名的标签。默认为空。
        """
        return pulumi.get(self, "tags")

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

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

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


class AwaitableGetZoneResult(GetZoneResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetZoneResult(
            allocate_dns_server_lists=self.allocate_dns_server_lists,
            auto_renew=self.auto_renew,
            cache_stage=self.cache_stage,
            created_time=self.created_time,
            dns_security=self.dns_security,
            expired_time=self.expired_time,
            id=self.id,
            instance_id=self.instance_id,
            instance_no=self.instance_no,
            is_ns_correct=self.is_ns_correct,
            is_sub_domain=self.is_sub_domain,
            last_operator=self.last_operator,
            project_name=self.project_name,
            real_dns_server_lists=self.real_dns_server_lists,
            record_count=self.record_count,
            remark=self.remark,
            stage=self.stage,
            sub_domain_host=self.sub_domain_host,
            tags=self.tags,
            trade_code=self.trade_code,
            updated_time=self.updated_time,
            zid=self.zid,
            zone_name=self.zone_name)


def get_zone(id: Optional[builtins.str] = None,
             opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetZoneResult:
    """
    Data Source schema for Byteplus::DNS::Zone


    :param builtins.str id: Uniquely identifies the resource.
    """
    __args__ = dict()
    __args__['id'] = id
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('bytepluscc:dns/getZone:getZone', __args__, opts=opts, typ=GetZoneResult).value

    return AwaitableGetZoneResult(
        allocate_dns_server_lists=pulumi.get(__ret__, 'allocate_dns_server_lists'),
        auto_renew=pulumi.get(__ret__, 'auto_renew'),
        cache_stage=pulumi.get(__ret__, 'cache_stage'),
        created_time=pulumi.get(__ret__, 'created_time'),
        dns_security=pulumi.get(__ret__, 'dns_security'),
        expired_time=pulumi.get(__ret__, 'expired_time'),
        id=pulumi.get(__ret__, 'id'),
        instance_id=pulumi.get(__ret__, 'instance_id'),
        instance_no=pulumi.get(__ret__, 'instance_no'),
        is_ns_correct=pulumi.get(__ret__, 'is_ns_correct'),
        is_sub_domain=pulumi.get(__ret__, 'is_sub_domain'),
        last_operator=pulumi.get(__ret__, 'last_operator'),
        project_name=pulumi.get(__ret__, 'project_name'),
        real_dns_server_lists=pulumi.get(__ret__, 'real_dns_server_lists'),
        record_count=pulumi.get(__ret__, 'record_count'),
        remark=pulumi.get(__ret__, 'remark'),
        stage=pulumi.get(__ret__, 'stage'),
        sub_domain_host=pulumi.get(__ret__, 'sub_domain_host'),
        tags=pulumi.get(__ret__, 'tags'),
        trade_code=pulumi.get(__ret__, 'trade_code'),
        updated_time=pulumi.get(__ret__, 'updated_time'),
        zid=pulumi.get(__ret__, 'zid'),
        zone_name=pulumi.get(__ret__, 'zone_name'))
def get_zone_output(id: Optional[pulumi.Input[builtins.str]] = None,
                    opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetZoneResult]:
    """
    Data Source schema for Byteplus::DNS::Zone


    :param builtins.str id: Uniquely identifies the resource.
    """
    __args__ = dict()
    __args__['id'] = id
    opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke_output('bytepluscc:dns/getZone:getZone', __args__, opts=opts, typ=GetZoneResult)
    return __ret__.apply(lambda __response__: GetZoneResult(
        allocate_dns_server_lists=pulumi.get(__response__, 'allocate_dns_server_lists'),
        auto_renew=pulumi.get(__response__, 'auto_renew'),
        cache_stage=pulumi.get(__response__, 'cache_stage'),
        created_time=pulumi.get(__response__, 'created_time'),
        dns_security=pulumi.get(__response__, 'dns_security'),
        expired_time=pulumi.get(__response__, 'expired_time'),
        id=pulumi.get(__response__, 'id'),
        instance_id=pulumi.get(__response__, 'instance_id'),
        instance_no=pulumi.get(__response__, 'instance_no'),
        is_ns_correct=pulumi.get(__response__, 'is_ns_correct'),
        is_sub_domain=pulumi.get(__response__, 'is_sub_domain'),
        last_operator=pulumi.get(__response__, 'last_operator'),
        project_name=pulumi.get(__response__, 'project_name'),
        real_dns_server_lists=pulumi.get(__response__, 'real_dns_server_lists'),
        record_count=pulumi.get(__response__, 'record_count'),
        remark=pulumi.get(__response__, 'remark'),
        stage=pulumi.get(__response__, 'stage'),
        sub_domain_host=pulumi.get(__response__, 'sub_domain_host'),
        tags=pulumi.get(__response__, 'tags'),
        trade_code=pulumi.get(__response__, 'trade_code'),
        updated_time=pulumi.get(__response__, 'updated_time'),
        zid=pulumi.get(__response__, 'zid'),
        zone_name=pulumi.get(__response__, 'zone_name')))
