# 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

__all__ = [
    'CertificateTag',
    'ListenerDomainExtension',
    'ListenerServerGroup',
    'ListenerTag',
    'GetCertificateTagResult',
    'GetListenerDomainExtensionResult',
    'GetListenerServerGroupResult',
    'GetListenerTagResult',
]

@pulumi.output_type
class CertificateTag(dict):
    def __init__(__self__, *,
                 key: Optional[builtins.str] = None,
                 value: Optional[builtins.str] = None):
        """
        :param builtins.str key: 用户标签的标签键。
        :param builtins.str value: 用户标签的标签值。
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[builtins.str]:
        """
        用户标签的标签键。
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> Optional[builtins.str]:
        """
        用户标签的标签值。
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class ListenerDomainExtension(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "certCenterCertificateId":
            suggest = "cert_center_certificate_id"
        elif key == "certificateId":
            suggest = "certificate_id"
        elif key == "certificateSource":
            suggest = "certificate_source"
        elif key == "pcaLeafCertificateId":
            suggest = "pca_leaf_certificate_id"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ListenerDomainExtension. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ListenerDomainExtension.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ListenerDomainExtension.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 cert_center_certificate_id: Optional[builtins.str] = None,
                 certificate_id: Optional[builtins.str] = None,
                 certificate_source: Optional[builtins.str] = None,
                 domain: Optional[builtins.str] = None,
                 pca_leaf_certificate_id: Optional[builtins.str] = None,
                 san: Optional[builtins.str] = None):
        """
        :param builtins.str cert_center_certificate_id: 域名使用的服务器证书 ID 。当证书来源为 cert_center 时生效。
        :param builtins.str certificate_id: 域名使用的服务器证书 ID。当证书来源为 alb 时生效。
        :param builtins.str certificate_source: 域名使用的服务器证书的来源，取值：alb：表示通过 ALB 上传的证书。cert_center：表示通过火山引擎证书中心购买或上传的 SSL 证书。
        :param builtins.str domain: 域名。通常不能为空，若实例支持自动选择扩展证书，即SniAutoMatch为on，则Domain需传入空字符串。需至少包含一个‘.’，且不允许以‘.’开头或结尾。仅允许包含小写字、字、‘.’、‘-‘、‘*’。长度限制为1 ～ 128个字符。泛域名：使用“*”代替1个或多个字符。“*”必须在域名开头或结尾。同一条域名中“*”不能出现两次。“*”前后不能有除了.以外的字符。精确域名：符合域名规范的精确域名。同一HTTPS监听器下的域名不能重复。匹配域名时，对域名的大小写不敏感。
        :param builtins.str pca_leaf_certificate_id: HTTPS监听器关联的私有叶子证书 ID。创建 HTTPS 监听器且证书来源为 pca_leaf 时必传。
        :param builtins.str san: 若实例支持自动选择扩展证书，即SniAutoMatch为on时，则Domain是空字符串。San为证书的扩展域名，用英文,分隔多个域名。
        """
        if cert_center_certificate_id is not None:
            pulumi.set(__self__, "cert_center_certificate_id", cert_center_certificate_id)
        if certificate_id is not None:
            pulumi.set(__self__, "certificate_id", certificate_id)
        if certificate_source is not None:
            pulumi.set(__self__, "certificate_source", certificate_source)
        if domain is not None:
            pulumi.set(__self__, "domain", domain)
        if pca_leaf_certificate_id is not None:
            pulumi.set(__self__, "pca_leaf_certificate_id", pca_leaf_certificate_id)
        if san is not None:
            pulumi.set(__self__, "san", san)

    @property
    @pulumi.getter(name="certCenterCertificateId")
    def cert_center_certificate_id(self) -> Optional[builtins.str]:
        """
        域名使用的服务器证书 ID 。当证书来源为 cert_center 时生效。
        """
        return pulumi.get(self, "cert_center_certificate_id")

    @property
    @pulumi.getter(name="certificateId")
    def certificate_id(self) -> Optional[builtins.str]:
        """
        域名使用的服务器证书 ID。当证书来源为 alb 时生效。
        """
        return pulumi.get(self, "certificate_id")

    @property
    @pulumi.getter(name="certificateSource")
    def certificate_source(self) -> Optional[builtins.str]:
        """
        域名使用的服务器证书的来源，取值：alb：表示通过 ALB 上传的证书。cert_center：表示通过火山引擎证书中心购买或上传的 SSL 证书。
        """
        return pulumi.get(self, "certificate_source")

    @property
    @pulumi.getter
    def domain(self) -> Optional[builtins.str]:
        """
        域名。通常不能为空，若实例支持自动选择扩展证书，即SniAutoMatch为on，则Domain需传入空字符串。需至少包含一个‘.’，且不允许以‘.’开头或结尾。仅允许包含小写字、字、‘.’、‘-‘、‘*’。长度限制为1 ～ 128个字符。泛域名：使用“*”代替1个或多个字符。“*”必须在域名开头或结尾。同一条域名中“*”不能出现两次。“*”前后不能有除了.以外的字符。精确域名：符合域名规范的精确域名。同一HTTPS监听器下的域名不能重复。匹配域名时，对域名的大小写不敏感。
        """
        return pulumi.get(self, "domain")

    @property
    @pulumi.getter(name="pcaLeafCertificateId")
    def pca_leaf_certificate_id(self) -> Optional[builtins.str]:
        """
        HTTPS监听器关联的私有叶子证书 ID。创建 HTTPS 监听器且证书来源为 pca_leaf 时必传。
        """
        return pulumi.get(self, "pca_leaf_certificate_id")

    @property
    @pulumi.getter
    def san(self) -> Optional[builtins.str]:
        """
        若实例支持自动选择扩展证书，即SniAutoMatch为on时，则Domain是空字符串。San为证书的扩展域名，用英文,分隔多个域名。
        """
        return pulumi.get(self, "san")


@pulumi.output_type
class ListenerServerGroup(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "serverGroupId":
            suggest = "server_group_id"
        elif key == "serverGroupName":
            suggest = "server_group_name"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in ListenerServerGroup. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        ListenerServerGroup.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        ListenerServerGroup.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 server_group_id: Optional[builtins.str] = None,
                 server_group_name: Optional[builtins.str] = None):
        """
        :param builtins.str server_group_id: 服务器组 ID 。
        :param builtins.str server_group_name: 服务器组名称。
        """
        if server_group_id is not None:
            pulumi.set(__self__, "server_group_id", server_group_id)
        if server_group_name is not None:
            pulumi.set(__self__, "server_group_name", server_group_name)

    @property
    @pulumi.getter(name="serverGroupId")
    def server_group_id(self) -> Optional[builtins.str]:
        """
        服务器组 ID 。
        """
        return pulumi.get(self, "server_group_id")

    @property
    @pulumi.getter(name="serverGroupName")
    def server_group_name(self) -> Optional[builtins.str]:
        """
        服务器组名称。
        """
        return pulumi.get(self, "server_group_name")


@pulumi.output_type
class ListenerTag(dict):
    def __init__(__self__, *,
                 key: Optional[builtins.str] = None,
                 value: Optional[builtins.str] = None):
        """
        :param builtins.str key: 用户标签的标签键。具体规则如下：长度限制为1～128个字符。大小写敏感。不能以volc:的任意大小写组合开头。不能以空格开头或结尾。允许包含各国语言文字、数字、空格）、下划线（_）、点号（.）、半角冒号（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。同一资源的标签键不允许重复。
        :param builtins.str value: 用户标签的标签值。具体规则如下：长度限制为0～256个字符。大小写敏感。不能以空格开头或结尾。允许包含各国语言文字、数字、空格（）、下划线（_）、点号（.）、半角冒（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。
        """
        if key is not None:
            pulumi.set(__self__, "key", key)
        if value is not None:
            pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> Optional[builtins.str]:
        """
        用户标签的标签键。具体规则如下：长度限制为1～128个字符。大小写敏感。不能以volc:的任意大小写组合开头。不能以空格开头或结尾。允许包含各国语言文字、数字、空格）、下划线（_）、点号（.）、半角冒号（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。同一资源的标签键不允许重复。
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> Optional[builtins.str]:
        """
        用户标签的标签值。具体规则如下：长度限制为0～256个字符。大小写敏感。不能以空格开头或结尾。允许包含各国语言文字、数字、空格（）、下划线（_）、点号（.）、半角冒（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetCertificateTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: 用户标签的标签键。
        :param builtins.str value: 用户标签的标签值。
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        用户标签的标签键。
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        用户标签的标签值。
        """
        return pulumi.get(self, "value")


@pulumi.output_type
class GetListenerDomainExtensionResult(dict):
    def __init__(__self__, *,
                 cert_center_certificate_id: builtins.str,
                 certificate_id: builtins.str,
                 certificate_source: builtins.str,
                 domain: builtins.str,
                 domain_extension_id: builtins.str,
                 listener_id: builtins.str,
                 pca_leaf_certificate_id: builtins.str,
                 san: builtins.str):
        """
        :param builtins.str cert_center_certificate_id: 域名使用的服务器证书 ID 。当证书来源为 cert_center 时生效。
        :param builtins.str certificate_id: 域名使用的服务器证书 ID。当证书来源为 alb 时生效。
        :param builtins.str certificate_source: 域名使用的服务器证书的来源，取值：alb：表示通过 ALB 上传的证书。cert_center：表示通过火山引擎证书中心购买或上传的 SSL 证书。
        :param builtins.str domain: 域名。通常不能为空，若实例支持自动选择扩展证书，即SniAutoMatch为on，则Domain需传入空字符串。需至少包含一个‘.’，且不允许以‘.’开头或结尾。仅允许包含小写字、字、‘.’、‘-‘、‘*’。长度限制为1 ～ 128个字符。泛域名：使用“*”代替1个或多个字符。“*”必须在域名开头或结尾。同一条域名中“*”不能出现两次。“*”前后不能有除了.以外的字符。精确域名：符合域名规范的精确域名。同一HTTPS监听器下的域名不能重复。匹配域名时，对域名的大小写不敏感。
        :param builtins.str domain_extension_id: 扩展域名 ID 。
        :param builtins.str listener_id: 扩展域名所属的监听器 ID。
        :param builtins.str pca_leaf_certificate_id: HTTPS监听器关联的私有叶子证书 ID。创建 HTTPS 监听器且证书来源为 pca_leaf 时必传。
        :param builtins.str san: 若实例支持自动选择扩展证书，即SniAutoMatch为on时，则Domain是空字符串。San为证书的扩展域名，用英文,分隔多个域名。
        """
        pulumi.set(__self__, "cert_center_certificate_id", cert_center_certificate_id)
        pulumi.set(__self__, "certificate_id", certificate_id)
        pulumi.set(__self__, "certificate_source", certificate_source)
        pulumi.set(__self__, "domain", domain)
        pulumi.set(__self__, "domain_extension_id", domain_extension_id)
        pulumi.set(__self__, "listener_id", listener_id)
        pulumi.set(__self__, "pca_leaf_certificate_id", pca_leaf_certificate_id)
        pulumi.set(__self__, "san", san)

    @property
    @pulumi.getter(name="certCenterCertificateId")
    def cert_center_certificate_id(self) -> builtins.str:
        """
        域名使用的服务器证书 ID 。当证书来源为 cert_center 时生效。
        """
        return pulumi.get(self, "cert_center_certificate_id")

    @property
    @pulumi.getter(name="certificateId")
    def certificate_id(self) -> builtins.str:
        """
        域名使用的服务器证书 ID。当证书来源为 alb 时生效。
        """
        return pulumi.get(self, "certificate_id")

    @property
    @pulumi.getter(name="certificateSource")
    def certificate_source(self) -> builtins.str:
        """
        域名使用的服务器证书的来源，取值：alb：表示通过 ALB 上传的证书。cert_center：表示通过火山引擎证书中心购买或上传的 SSL 证书。
        """
        return pulumi.get(self, "certificate_source")

    @property
    @pulumi.getter
    def domain(self) -> builtins.str:
        """
        域名。通常不能为空，若实例支持自动选择扩展证书，即SniAutoMatch为on，则Domain需传入空字符串。需至少包含一个‘.’，且不允许以‘.’开头或结尾。仅允许包含小写字、字、‘.’、‘-‘、‘*’。长度限制为1 ～ 128个字符。泛域名：使用“*”代替1个或多个字符。“*”必须在域名开头或结尾。同一条域名中“*”不能出现两次。“*”前后不能有除了.以外的字符。精确域名：符合域名规范的精确域名。同一HTTPS监听器下的域名不能重复。匹配域名时，对域名的大小写不敏感。
        """
        return pulumi.get(self, "domain")

    @property
    @pulumi.getter(name="domainExtensionId")
    def domain_extension_id(self) -> builtins.str:
        """
        扩展域名 ID 。
        """
        return pulumi.get(self, "domain_extension_id")

    @property
    @pulumi.getter(name="listenerId")
    def listener_id(self) -> builtins.str:
        """
        扩展域名所属的监听器 ID。
        """
        return pulumi.get(self, "listener_id")

    @property
    @pulumi.getter(name="pcaLeafCertificateId")
    def pca_leaf_certificate_id(self) -> builtins.str:
        """
        HTTPS监听器关联的私有叶子证书 ID。创建 HTTPS 监听器且证书来源为 pca_leaf 时必传。
        """
        return pulumi.get(self, "pca_leaf_certificate_id")

    @property
    @pulumi.getter
    def san(self) -> builtins.str:
        """
        若实例支持自动选择扩展证书，即SniAutoMatch为on时，则Domain是空字符串。San为证书的扩展域名，用英文,分隔多个域名。
        """
        return pulumi.get(self, "san")


@pulumi.output_type
class GetListenerServerGroupResult(dict):
    def __init__(__self__, *,
                 server_group_id: builtins.str,
                 server_group_name: builtins.str):
        """
        :param builtins.str server_group_id: 服务器组 ID 。
        :param builtins.str server_group_name: 服务器组名称。
        """
        pulumi.set(__self__, "server_group_id", server_group_id)
        pulumi.set(__self__, "server_group_name", server_group_name)

    @property
    @pulumi.getter(name="serverGroupId")
    def server_group_id(self) -> builtins.str:
        """
        服务器组 ID 。
        """
        return pulumi.get(self, "server_group_id")

    @property
    @pulumi.getter(name="serverGroupName")
    def server_group_name(self) -> builtins.str:
        """
        服务器组名称。
        """
        return pulumi.get(self, "server_group_name")


@pulumi.output_type
class GetListenerTagResult(dict):
    def __init__(__self__, *,
                 key: builtins.str,
                 value: builtins.str):
        """
        :param builtins.str key: 用户标签的标签键。具体规则如下：长度限制为1～128个字符。大小写敏感。不能以volc:的任意大小写组合开头。不能以空格开头或结尾。允许包含各国语言文字、数字、空格）、下划线（_）、点号（.）、半角冒号（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。同一资源的标签键不允许重复。
        :param builtins.str value: 用户标签的标签值。具体规则如下：长度限制为0～256个字符。大小写敏感。不能以空格开头或结尾。允许包含各国语言文字、数字、空格（）、下划线（_）、点号（.）、半角冒（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。
        """
        pulumi.set(__self__, "key", key)
        pulumi.set(__self__, "value", value)

    @property
    @pulumi.getter
    def key(self) -> builtins.str:
        """
        用户标签的标签键。具体规则如下：长度限制为1～128个字符。大小写敏感。不能以volc:的任意大小写组合开头。不能以空格开头或结尾。允许包含各国语言文字、数字、空格）、下划线（_）、点号（.）、半角冒号（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。同一资源的标签键不允许重复。
        """
        return pulumi.get(self, "key")

    @property
    @pulumi.getter
    def value(self) -> builtins.str:
        """
        用户标签的标签值。具体规则如下：长度限制为0～256个字符。大小写敏感。不能以空格开头或结尾。允许包含各国语言文字、数字、空格（）、下划线（_）、点号（.）、半角冒（:）、斜杠（/）、等号（=）、加号（+）、减号（-）和@。
        """
        return pulumi.get(self, "value")


