# 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__ = ['ListenerArgs', 'Listener']

@pulumi.input_type
class ListenerArgs:
    def __init__(__self__, *,
                 load_balancer_id: pulumi.Input[builtins.str],
                 port: pulumi.Input[builtins.int],
                 protocol: pulumi.Input[builtins.str],
                 server_group_id: pulumi.Input[builtins.str],
                 acl_ids: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 acl_status: Optional[pulumi.Input[builtins.str]] = None,
                 acl_type: Optional[pulumi.Input[builtins.str]] = None,
                 bandwidth: Optional[pulumi.Input[builtins.int]] = None,
                 ca_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 ca_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 cert_center_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_source: Optional[pulumi.Input[builtins.str]] = None,
                 client_body_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 client_header_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 connection_drain_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 connection_drain_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 cookie: Optional[pulumi.Input[builtins.str]] = None,
                 cps: Optional[pulumi.Input[builtins.int]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 enabled: Optional[pulumi.Input[builtins.str]] = None,
                 end_port: Optional[pulumi.Input[builtins.int]] = None,
                 established_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 health_check: Optional[pulumi.Input['ListenerHealthCheckArgs']] = None,
                 http2_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 keepalive_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 listener_name: Optional[pulumi.Input[builtins.str]] = None,
                 max_connections: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_type: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_connect_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_protocol_type: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_read_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 scheduler: Optional[pulumi.Input[builtins.str]] = None,
                 security_policy_id: Optional[pulumi.Input[builtins.str]] = None,
                 send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 start_port: Optional[pulumi.Input[builtins.int]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ListenerTagArgs']]]] = None):
        """
        The set of arguments for constructing a Listener resource.
        :param pulumi.Input[builtins.str] load_balancer_id: CLB实例的ID。
        :param pulumi.Input[builtins.int] port: 监听器接收请求使用的端口。取值范围为 0～65535。参数Protocol为“TCP”或“UDP”时，支持传入0，表示用全端口监听。
        :param pulumi.Input[builtins.str] protocol: 监听器的协议。
        :param pulumi.Input[builtins.str] server_group_id: 监听器关联的后端服务器组 ID。
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] acl_ids: 监听器绑定的访问控制策略组ID。仅AclStatus参数为on时返回。
        :param pulumi.Input[builtins.str] acl_status: 是否开启访问控制功能。取值如下：on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] acl_type: 访问控制的方式。white：白名单。black：黑名单。仅AclStatus参数为on时，本参数有效。
        :param pulumi.Input[builtins.int] bandwidth: 监听器的带宽上限，即此监听器独占CLB实例的带宽，单位为Mbps。-1（默认值）：此监听器不独占CLB的带，与其他监听器共享CLB实例未被独占的带宽。取值范围：1～CLB实例未被独占的带宽。
        :param pulumi.Input[builtins.str] ca_certificate_id: 双向认证的CA证书。
        :param pulumi.Input[builtins.str] ca_enabled: 是否开启双向认证。on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] cert_center_certificate_id: 证书中心的证书的ID。
        :param pulumi.Input[builtins.str] certificate_id: CLB侧证书管理模块的证书的ID。
        :param pulumi.Input[builtins.str] certificate_source: 证书的来源。clb (默认)：CLB上传的证书。cert_center：证书中心上传的证书。user：用户上传的证书。
        :param pulumi.Input[builtins.int] client_body_timeout: 读取客户端请求正文的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个请求的传输过程。取值范围为 30-120秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效
        :param pulumi.Input[builtins.int] client_header_timeout: 读取客户端请求头的超时时间。取值范围为30-120秒。默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] connection_drain_enabled: 监听器是否开启连接优雅中断功能。on：开启。off：不开启。参数Protocol返回为HTTP或HTTPS时，该参数固定返回off。
        :param pulumi.Input[builtins.int] connection_drain_timeout: 连接优雅中断的超时时间，单位为秒。参数ConnectionDrainEnabled返回为off时，该参数返回0。
        :param pulumi.Input[builtins.str] cookie: 后端服务器配置的会话保持的Cookie名称。仅参数PersistenceType取server时，本参数有效且必填。只能包含字母、数字、下划线（_）和中划线（-）。长度限制在1～200字符之间。
        :param pulumi.Input[builtins.int] cps: 每秒新建连接数的上限。-1（默认值）：不限制，即CLB实例的新建连接数上限。取值范围：1～CLB实例的新连接数上限。
        :param pulumi.Input[builtins.str] description: 监听器的描述。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：英文逗号（,）、点（.）、下划线（_）、空格（ ）、等号（=）、中划线（-）、中文逗号（，）、中文句号（。）。长度限制为0 ～ 255个字符。不填则默认值为空字符串。
        :param pulumi.Input[builtins.str] enabled: 是否启用监听器。on（默认值）：开启。off：不开启。
        :param pulumi.Input[builtins.int] end_port: 全端口监听的结束端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入，且该参数取值应大于tartPort。
        :param pulumi.Input[builtins.int] established_timeout: 监听器的连接超时时间。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：TCP协议：10-900秒，默认为900秒。UDP协议：1-300秒，默认为90秒。
        :param pulumi.Input['ListenerHealthCheckArgs'] health_check: 健康检查相关信息。
        :param pulumi.Input[builtins.str] http2_enabled: 监听器是否开启前端HTTP 2.0协议。仅参数`Protocol取HTTPS时，本参数有效。取值如下：|on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.int] keepalive_timeout: 客户端与CLB之间的长连接超时时间。取值范围为 0-900秒，默认为75秒。0表示禁用长连接。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] listener_name: 监听器的名称。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：点号（.）、下划线_）和中划线（-）。长度限制在1～128字符之间。不填则默认将“协议-端口”作为监听器名称。
        :param pulumi.Input[builtins.int] max_connections: 最大并发连接数的上限。-1（默认值）：不限制，CLB实例的最大并发连接数上限。取值范围：1～CLB实例的最大并发连接数上限。
        :param pulumi.Input[builtins.int] persistence_timeout: 会话保持的超时时间，单位为秒。取值范围根据参数PersistenceType取值有所不同。PersistenceType置为source_ip时，取值范围为1～3600。PersistenceType配置为insert时，取值范围为1～86400。
        :param pulumi.Input[builtins.str] persistence_type: 会话保持的类型。取值如下：off（默认值）：不启用会话保持。source_ip：源地址IP，仅参数ProtocolTCP或UDP时，本取值有效。insert：植入Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。server：重写Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。。
        :param pulumi.Input[builtins.int] proxy_connect_timeout: CLB与后端服务器之间的连接建立超时时间。建议大于健康检查超时时间。取值范围为 4-120秒，默认为4。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] proxy_protocol_type: 是否启用Proxy-Protocol协议。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：off（默认值）：关闭。standard：开启。
        :param pulumi.Input[builtins.int] proxy_read_timeout: CLB从后端服务器读取响应的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个响应的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.int] proxy_send_timeout: CLB将请求传输到后端服务器的超时时间。此超时仅针对两个连续的写操作之间设置，而非整个请求的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] scheduler: 监听器使用的调度算法。wrr（默认值）：加权轮询。wlc：加权最小连接数。sh：源地址哈希。
        :param pulumi.Input[builtins.str] security_policy_id: HTTPS监听器的TLS安全策略。仅参数Protocol取HTTPS时，本参数有效。 取值如下：default*policy（默认值）：支持SSL v3、TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*0：支持TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*1：支持TLS v1.1、TLS v1.2。tls*cipher*policy*1*2：支持TLS v1.2。tls*cipher*policy*1*2*strict：支持TLS v1.2。
        :param pulumi.Input[builtins.int] send_timeout: CLB向客户端发送响应的超时时间。此超时仅针对两个连续的写操作之间设置，而非整响应的传输过程。取值范围为 1-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.int] start_port: 全端口监听的起始端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入。
        """
        pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        pulumi.set(__self__, "port", port)
        pulumi.set(__self__, "protocol", protocol)
        pulumi.set(__self__, "server_group_id", server_group_id)
        if acl_ids is not None:
            pulumi.set(__self__, "acl_ids", acl_ids)
        if acl_status is not None:
            pulumi.set(__self__, "acl_status", acl_status)
        if acl_type is not None:
            pulumi.set(__self__, "acl_type", acl_type)
        if bandwidth is not None:
            pulumi.set(__self__, "bandwidth", bandwidth)
        if ca_certificate_id is not None:
            pulumi.set(__self__, "ca_certificate_id", ca_certificate_id)
        if ca_enabled is not None:
            pulumi.set(__self__, "ca_enabled", ca_enabled)
        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 client_body_timeout is not None:
            pulumi.set(__self__, "client_body_timeout", client_body_timeout)
        if client_header_timeout is not None:
            pulumi.set(__self__, "client_header_timeout", client_header_timeout)
        if connection_drain_enabled is not None:
            pulumi.set(__self__, "connection_drain_enabled", connection_drain_enabled)
        if connection_drain_timeout is not None:
            pulumi.set(__self__, "connection_drain_timeout", connection_drain_timeout)
        if cookie is not None:
            pulumi.set(__self__, "cookie", cookie)
        if cps is not None:
            pulumi.set(__self__, "cps", cps)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if end_port is not None:
            pulumi.set(__self__, "end_port", end_port)
        if established_timeout is not None:
            pulumi.set(__self__, "established_timeout", established_timeout)
        if health_check is not None:
            pulumi.set(__self__, "health_check", health_check)
        if http2_enabled is not None:
            pulumi.set(__self__, "http2_enabled", http2_enabled)
        if keepalive_timeout is not None:
            pulumi.set(__self__, "keepalive_timeout", keepalive_timeout)
        if listener_name is not None:
            pulumi.set(__self__, "listener_name", listener_name)
        if max_connections is not None:
            pulumi.set(__self__, "max_connections", max_connections)
        if persistence_timeout is not None:
            pulumi.set(__self__, "persistence_timeout", persistence_timeout)
        if persistence_type is not None:
            pulumi.set(__self__, "persistence_type", persistence_type)
        if proxy_connect_timeout is not None:
            pulumi.set(__self__, "proxy_connect_timeout", proxy_connect_timeout)
        if proxy_protocol_type is not None:
            pulumi.set(__self__, "proxy_protocol_type", proxy_protocol_type)
        if proxy_read_timeout is not None:
            pulumi.set(__self__, "proxy_read_timeout", proxy_read_timeout)
        if proxy_send_timeout is not None:
            pulumi.set(__self__, "proxy_send_timeout", proxy_send_timeout)
        if scheduler is not None:
            pulumi.set(__self__, "scheduler", scheduler)
        if security_policy_id is not None:
            pulumi.set(__self__, "security_policy_id", security_policy_id)
        if send_timeout is not None:
            pulumi.set(__self__, "send_timeout", send_timeout)
        if start_port is not None:
            pulumi.set(__self__, "start_port", start_port)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> pulumi.Input[builtins.str]:
        """
        CLB实例的ID。
        """
        return pulumi.get(self, "load_balancer_id")

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

    @property
    @pulumi.getter
    def port(self) -> pulumi.Input[builtins.int]:
        """
        监听器接收请求使用的端口。取值范围为 0～65535。参数Protocol为“TCP”或“UDP”时，支持传入0，表示用全端口监听。
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Input[builtins.str]:
        """
        监听器的协议。
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="serverGroupId")
    def server_group_id(self) -> pulumi.Input[builtins.str]:
        """
        监听器关联的后端服务器组 ID。
        """
        return pulumi.get(self, "server_group_id")

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

    @property
    @pulumi.getter(name="aclIds")
    def acl_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        监听器绑定的访问控制策略组ID。仅AclStatus参数为on时返回。
        """
        return pulumi.get(self, "acl_ids")

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

    @property
    @pulumi.getter(name="aclStatus")
    def acl_status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否开启访问控制功能。取值如下：on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "acl_status")

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

    @property
    @pulumi.getter(name="aclType")
    def acl_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        访问控制的方式。white：白名单。black：黑名单。仅AclStatus参数为on时，本参数有效。
        """
        return pulumi.get(self, "acl_type")

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

    @property
    @pulumi.getter
    def bandwidth(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        监听器的带宽上限，即此监听器独占CLB实例的带宽，单位为Mbps。-1（默认值）：此监听器不独占CLB的带，与其他监听器共享CLB实例未被独占的带宽。取值范围：1～CLB实例未被独占的带宽。
        """
        return pulumi.get(self, "bandwidth")

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

    @property
    @pulumi.getter(name="caCertificateId")
    def ca_certificate_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        双向认证的CA证书。
        """
        return pulumi.get(self, "ca_certificate_id")

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

    @property
    @pulumi.getter(name="caEnabled")
    def ca_enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否开启双向认证。on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "ca_enabled")

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

    @property
    @pulumi.getter(name="certCenterCertificateId")
    def cert_center_certificate_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        证书中心的证书的ID。
        """
        return pulumi.get(self, "cert_center_certificate_id")

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

    @property
    @pulumi.getter(name="certificateId")
    def certificate_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        CLB侧证书管理模块的证书的ID。
        """
        return pulumi.get(self, "certificate_id")

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

    @property
    @pulumi.getter(name="certificateSource")
    def certificate_source(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        证书的来源。clb (默认)：CLB上传的证书。cert_center：证书中心上传的证书。user：用户上传的证书。
        """
        return pulumi.get(self, "certificate_source")

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

    @property
    @pulumi.getter(name="clientBodyTimeout")
    def client_body_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        读取客户端请求正文的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个请求的传输过程。取值范围为 30-120秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效
        """
        return pulumi.get(self, "client_body_timeout")

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

    @property
    @pulumi.getter(name="clientHeaderTimeout")
    def client_header_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        读取客户端请求头的超时时间。取值范围为30-120秒。默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "client_header_timeout")

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

    @property
    @pulumi.getter(name="connectionDrainEnabled")
    def connection_drain_enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器是否开启连接优雅中断功能。on：开启。off：不开启。参数Protocol返回为HTTP或HTTPS时，该参数固定返回off。
        """
        return pulumi.get(self, "connection_drain_enabled")

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

    @property
    @pulumi.getter(name="connectionDrainTimeout")
    def connection_drain_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        连接优雅中断的超时时间，单位为秒。参数ConnectionDrainEnabled返回为off时，该参数返回0。
        """
        return pulumi.get(self, "connection_drain_timeout")

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

    @property
    @pulumi.getter
    def cookie(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        后端服务器配置的会话保持的Cookie名称。仅参数PersistenceType取server时，本参数有效且必填。只能包含字母、数字、下划线（_）和中划线（-）。长度限制在1～200字符之间。
        """
        return pulumi.get(self, "cookie")

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

    @property
    @pulumi.getter
    def cps(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        每秒新建连接数的上限。-1（默认值）：不限制，即CLB实例的新建连接数上限。取值范围：1～CLB实例的新连接数上限。
        """
        return pulumi.get(self, "cps")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器的描述。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：英文逗号（,）、点（.）、下划线（_）、空格（ ）、等号（=）、中划线（-）、中文逗号（，）、中文句号（。）。长度限制为0 ～ 255个字符。不填则默认值为空字符串。
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否启用监听器。on（默认值）：开启。off：不开启。
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="endPort")
    def end_port(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        全端口监听的结束端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入，且该参数取值应大于tartPort。
        """
        return pulumi.get(self, "end_port")

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

    @property
    @pulumi.getter(name="establishedTimeout")
    def established_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        监听器的连接超时时间。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：TCP协议：10-900秒，默认为900秒。UDP协议：1-300秒，默认为90秒。
        """
        return pulumi.get(self, "established_timeout")

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

    @property
    @pulumi.getter(name="healthCheck")
    def health_check(self) -> Optional[pulumi.Input['ListenerHealthCheckArgs']]:
        """
        健康检查相关信息。
        """
        return pulumi.get(self, "health_check")

    @health_check.setter
    def health_check(self, value: Optional[pulumi.Input['ListenerHealthCheckArgs']]):
        pulumi.set(self, "health_check", value)

    @property
    @pulumi.getter(name="http2Enabled")
    def http2_enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器是否开启前端HTTP 2.0协议。仅参数`Protocol取HTTPS时，本参数有效。取值如下：|on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "http2_enabled")

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

    @property
    @pulumi.getter(name="keepaliveTimeout")
    def keepalive_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        客户端与CLB之间的长连接超时时间。取值范围为 0-900秒，默认为75秒。0表示禁用长连接。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "keepalive_timeout")

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

    @property
    @pulumi.getter(name="listenerName")
    def listener_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器的名称。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：点号（.）、下划线_）和中划线（-）。长度限制在1～128字符之间。不填则默认将“协议-端口”作为监听器名称。
        """
        return pulumi.get(self, "listener_name")

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

    @property
    @pulumi.getter(name="maxConnections")
    def max_connections(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        最大并发连接数的上限。-1（默认值）：不限制，CLB实例的最大并发连接数上限。取值范围：1～CLB实例的最大并发连接数上限。
        """
        return pulumi.get(self, "max_connections")

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

    @property
    @pulumi.getter(name="persistenceTimeout")
    def persistence_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        会话保持的超时时间，单位为秒。取值范围根据参数PersistenceType取值有所不同。PersistenceType置为source_ip时，取值范围为1～3600。PersistenceType配置为insert时，取值范围为1～86400。
        """
        return pulumi.get(self, "persistence_timeout")

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

    @property
    @pulumi.getter(name="persistenceType")
    def persistence_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        会话保持的类型。取值如下：off（默认值）：不启用会话保持。source_ip：源地址IP，仅参数ProtocolTCP或UDP时，本取值有效。insert：植入Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。server：重写Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。。
        """
        return pulumi.get(self, "persistence_type")

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

    @property
    @pulumi.getter(name="proxyConnectTimeout")
    def proxy_connect_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB与后端服务器之间的连接建立超时时间。建议大于健康检查超时时间。取值范围为 4-120秒，默认为4。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_connect_timeout")

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

    @property
    @pulumi.getter(name="proxyProtocolType")
    def proxy_protocol_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否启用Proxy-Protocol协议。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：off（默认值）：关闭。standard：开启。
        """
        return pulumi.get(self, "proxy_protocol_type")

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

    @property
    @pulumi.getter(name="proxyReadTimeout")
    def proxy_read_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB从后端服务器读取响应的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个响应的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_read_timeout")

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

    @property
    @pulumi.getter(name="proxySendTimeout")
    def proxy_send_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB将请求传输到后端服务器的超时时间。此超时仅针对两个连续的写操作之间设置，而非整个请求的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_send_timeout")

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

    @property
    @pulumi.getter
    def scheduler(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器使用的调度算法。wrr（默认值）：加权轮询。wlc：加权最小连接数。sh：源地址哈希。
        """
        return pulumi.get(self, "scheduler")

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

    @property
    @pulumi.getter(name="securityPolicyId")
    def security_policy_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        HTTPS监听器的TLS安全策略。仅参数Protocol取HTTPS时，本参数有效。 取值如下：default*policy（默认值）：支持SSL v3、TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*0：支持TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*1：支持TLS v1.1、TLS v1.2。tls*cipher*policy*1*2：支持TLS v1.2。tls*cipher*policy*1*2*strict：支持TLS v1.2。
        """
        return pulumi.get(self, "security_policy_id")

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

    @property
    @pulumi.getter(name="sendTimeout")
    def send_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB向客户端发送响应的超时时间。此超时仅针对两个连续的写操作之间设置，而非整响应的传输过程。取值范围为 1-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "send_timeout")

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

    @property
    @pulumi.getter(name="startPort")
    def start_port(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        全端口监听的起始端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入。
        """
        return pulumi.get(self, "start_port")

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

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

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


@pulumi.input_type
class _ListenerState:
    def __init__(__self__, *,
                 acl_ids: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 acl_status: Optional[pulumi.Input[builtins.str]] = None,
                 acl_type: Optional[pulumi.Input[builtins.str]] = None,
                 bandwidth: Optional[pulumi.Input[builtins.int]] = None,
                 ca_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 ca_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 cert_center_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_source: Optional[pulumi.Input[builtins.str]] = None,
                 client_body_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 client_header_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 connection_drain_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 connection_drain_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 cookie: Optional[pulumi.Input[builtins.str]] = None,
                 cps: Optional[pulumi.Input[builtins.int]] = None,
                 created_time: Optional[pulumi.Input[builtins.str]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 enabled: Optional[pulumi.Input[builtins.str]] = None,
                 end_port: Optional[pulumi.Input[builtins.int]] = None,
                 established_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 health_check: Optional[pulumi.Input['ListenerHealthCheckArgs']] = None,
                 http2_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 keepalive_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 listener_id: Optional[pulumi.Input[builtins.str]] = None,
                 listener_name: Optional[pulumi.Input[builtins.str]] = None,
                 load_balancer_id: Optional[pulumi.Input[builtins.str]] = None,
                 max_connections: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_type: Optional[pulumi.Input[builtins.str]] = None,
                 port: Optional[pulumi.Input[builtins.int]] = None,
                 protocol: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_connect_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_protocol_type: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_read_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 scheduler: Optional[pulumi.Input[builtins.str]] = None,
                 security_policy_id: Optional[pulumi.Input[builtins.str]] = None,
                 send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 server_group_id: Optional[pulumi.Input[builtins.str]] = None,
                 start_port: Optional[pulumi.Input[builtins.int]] = None,
                 status: Optional[pulumi.Input[builtins.str]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input['ListenerTagArgs']]]] = None,
                 updated_time: Optional[pulumi.Input[builtins.str]] = None,
                 waf_protection_enabled: Optional[pulumi.Input[builtins.str]] = None):
        """
        Input properties used for looking up and filtering Listener resources.
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] acl_ids: 监听器绑定的访问控制策略组ID。仅AclStatus参数为on时返回。
        :param pulumi.Input[builtins.str] acl_status: 是否开启访问控制功能。取值如下：on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] acl_type: 访问控制的方式。white：白名单。black：黑名单。仅AclStatus参数为on时，本参数有效。
        :param pulumi.Input[builtins.int] bandwidth: 监听器的带宽上限，即此监听器独占CLB实例的带宽，单位为Mbps。-1（默认值）：此监听器不独占CLB的带，与其他监听器共享CLB实例未被独占的带宽。取值范围：1～CLB实例未被独占的带宽。
        :param pulumi.Input[builtins.str] ca_certificate_id: 双向认证的CA证书。
        :param pulumi.Input[builtins.str] ca_enabled: 是否开启双向认证。on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] cert_center_certificate_id: 证书中心的证书的ID。
        :param pulumi.Input[builtins.str] certificate_id: CLB侧证书管理模块的证书的ID。
        :param pulumi.Input[builtins.str] certificate_source: 证书的来源。clb (默认)：CLB上传的证书。cert_center：证书中心上传的证书。user：用户上传的证书。
        :param pulumi.Input[builtins.int] client_body_timeout: 读取客户端请求正文的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个请求的传输过程。取值范围为 30-120秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效
        :param pulumi.Input[builtins.int] client_header_timeout: 读取客户端请求头的超时时间。取值范围为30-120秒。默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] connection_drain_enabled: 监听器是否开启连接优雅中断功能。on：开启。off：不开启。参数Protocol返回为HTTP或HTTPS时，该参数固定返回off。
        :param pulumi.Input[builtins.int] connection_drain_timeout: 连接优雅中断的超时时间，单位为秒。参数ConnectionDrainEnabled返回为off时，该参数返回0。
        :param pulumi.Input[builtins.str] cookie: 后端服务器配置的会话保持的Cookie名称。仅参数PersistenceType取server时，本参数有效且必填。只能包含字母、数字、下划线（_）和中划线（-）。长度限制在1～200字符之间。
        :param pulumi.Input[builtins.int] cps: 每秒新建连接数的上限。-1（默认值）：不限制，即CLB实例的新建连接数上限。取值范围：1～CLB实例的新连接数上限。
        :param pulumi.Input[builtins.str] created_time: 监听器的创建时间。
        :param pulumi.Input[builtins.str] description: 监听器的描述。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：英文逗号（,）、点（.）、下划线（_）、空格（ ）、等号（=）、中划线（-）、中文逗号（，）、中文句号（。）。长度限制为0 ～ 255个字符。不填则默认值为空字符串。
        :param pulumi.Input[builtins.str] enabled: 是否启用监听器。on（默认值）：开启。off：不开启。
        :param pulumi.Input[builtins.int] end_port: 全端口监听的结束端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入，且该参数取值应大于tartPort。
        :param pulumi.Input[builtins.int] established_timeout: 监听器的连接超时时间。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：TCP协议：10-900秒，默认为900秒。UDP协议：1-300秒，默认为90秒。
        :param pulumi.Input['ListenerHealthCheckArgs'] health_check: 健康检查相关信息。
        :param pulumi.Input[builtins.str] http2_enabled: 监听器是否开启前端HTTP 2.0协议。仅参数`Protocol取HTTPS时，本参数有效。取值如下：|on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.int] keepalive_timeout: 客户端与CLB之间的长连接超时时间。取值范围为 0-900秒，默认为75秒。0表示禁用长连接。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] listener_id: 监听器的ID。
        :param pulumi.Input[builtins.str] listener_name: 监听器的名称。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：点号（.）、下划线_）和中划线（-）。长度限制在1～128字符之间。不填则默认将“协议-端口”作为监听器名称。
        :param pulumi.Input[builtins.str] load_balancer_id: CLB实例的ID。
        :param pulumi.Input[builtins.int] max_connections: 最大并发连接数的上限。-1（默认值）：不限制，CLB实例的最大并发连接数上限。取值范围：1～CLB实例的最大并发连接数上限。
        :param pulumi.Input[builtins.int] persistence_timeout: 会话保持的超时时间，单位为秒。取值范围根据参数PersistenceType取值有所不同。PersistenceType置为source_ip时，取值范围为1～3600。PersistenceType配置为insert时，取值范围为1～86400。
        :param pulumi.Input[builtins.str] persistence_type: 会话保持的类型。取值如下：off（默认值）：不启用会话保持。source_ip：源地址IP，仅参数ProtocolTCP或UDP时，本取值有效。insert：植入Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。server：重写Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。。
        :param pulumi.Input[builtins.int] port: 监听器接收请求使用的端口。取值范围为 0～65535。参数Protocol为“TCP”或“UDP”时，支持传入0，表示用全端口监听。
        :param pulumi.Input[builtins.str] protocol: 监听器的协议。
        :param pulumi.Input[builtins.int] proxy_connect_timeout: CLB与后端服务器之间的连接建立超时时间。建议大于健康检查超时时间。取值范围为 4-120秒，默认为4。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] proxy_protocol_type: 是否启用Proxy-Protocol协议。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：off（默认值）：关闭。standard：开启。
        :param pulumi.Input[builtins.int] proxy_read_timeout: CLB从后端服务器读取响应的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个响应的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.int] proxy_send_timeout: CLB将请求传输到后端服务器的超时时间。此超时仅针对两个连续的写操作之间设置，而非整个请求的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] scheduler: 监听器使用的调度算法。wrr（默认值）：加权轮询。wlc：加权最小连接数。sh：源地址哈希。
        :param pulumi.Input[builtins.str] security_policy_id: HTTPS监听器的TLS安全策略。仅参数Protocol取HTTPS时，本参数有效。 取值如下：default*policy（默认值）：支持SSL v3、TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*0：支持TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*1：支持TLS v1.1、TLS v1.2。tls*cipher*policy*1*2：支持TLS v1.2。tls*cipher*policy*1*2*strict：支持TLS v1.2。
        :param pulumi.Input[builtins.int] send_timeout: CLB向客户端发送响应的超时时间。此超时仅针对两个连续的写操作之间设置，而非整响应的传输过程。取值范围为 1-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] server_group_id: 监听器关联的后端服务器组 ID。
        :param pulumi.Input[builtins.int] start_port: 全端口监听的起始端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入。
        :param pulumi.Input[builtins.str] status: 监听器的状态。Creating：创建中。Active：运行中。Deleting: 删除中。Disabled: 已停用。
        :param pulumi.Input[builtins.str] updated_time: 监听器最近一次的操作时间。
        :param pulumi.Input[builtins.str] waf_protection_enabled: 是否将经过七层监听器的流量送至Web应用防火墙进行检测和过滤。on：是。off：否。
        """
        if acl_ids is not None:
            pulumi.set(__self__, "acl_ids", acl_ids)
        if acl_status is not None:
            pulumi.set(__self__, "acl_status", acl_status)
        if acl_type is not None:
            pulumi.set(__self__, "acl_type", acl_type)
        if bandwidth is not None:
            pulumi.set(__self__, "bandwidth", bandwidth)
        if ca_certificate_id is not None:
            pulumi.set(__self__, "ca_certificate_id", ca_certificate_id)
        if ca_enabled is not None:
            pulumi.set(__self__, "ca_enabled", ca_enabled)
        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 client_body_timeout is not None:
            pulumi.set(__self__, "client_body_timeout", client_body_timeout)
        if client_header_timeout is not None:
            pulumi.set(__self__, "client_header_timeout", client_header_timeout)
        if connection_drain_enabled is not None:
            pulumi.set(__self__, "connection_drain_enabled", connection_drain_enabled)
        if connection_drain_timeout is not None:
            pulumi.set(__self__, "connection_drain_timeout", connection_drain_timeout)
        if cookie is not None:
            pulumi.set(__self__, "cookie", cookie)
        if cps is not None:
            pulumi.set(__self__, "cps", cps)
        if created_time is not None:
            pulumi.set(__self__, "created_time", created_time)
        if description is not None:
            pulumi.set(__self__, "description", description)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)
        if end_port is not None:
            pulumi.set(__self__, "end_port", end_port)
        if established_timeout is not None:
            pulumi.set(__self__, "established_timeout", established_timeout)
        if health_check is not None:
            pulumi.set(__self__, "health_check", health_check)
        if http2_enabled is not None:
            pulumi.set(__self__, "http2_enabled", http2_enabled)
        if keepalive_timeout is not None:
            pulumi.set(__self__, "keepalive_timeout", keepalive_timeout)
        if listener_id is not None:
            pulumi.set(__self__, "listener_id", listener_id)
        if listener_name is not None:
            pulumi.set(__self__, "listener_name", listener_name)
        if load_balancer_id is not None:
            pulumi.set(__self__, "load_balancer_id", load_balancer_id)
        if max_connections is not None:
            pulumi.set(__self__, "max_connections", max_connections)
        if persistence_timeout is not None:
            pulumi.set(__self__, "persistence_timeout", persistence_timeout)
        if persistence_type is not None:
            pulumi.set(__self__, "persistence_type", persistence_type)
        if port is not None:
            pulumi.set(__self__, "port", port)
        if protocol is not None:
            pulumi.set(__self__, "protocol", protocol)
        if proxy_connect_timeout is not None:
            pulumi.set(__self__, "proxy_connect_timeout", proxy_connect_timeout)
        if proxy_protocol_type is not None:
            pulumi.set(__self__, "proxy_protocol_type", proxy_protocol_type)
        if proxy_read_timeout is not None:
            pulumi.set(__self__, "proxy_read_timeout", proxy_read_timeout)
        if proxy_send_timeout is not None:
            pulumi.set(__self__, "proxy_send_timeout", proxy_send_timeout)
        if scheduler is not None:
            pulumi.set(__self__, "scheduler", scheduler)
        if security_policy_id is not None:
            pulumi.set(__self__, "security_policy_id", security_policy_id)
        if send_timeout is not None:
            pulumi.set(__self__, "send_timeout", send_timeout)
        if server_group_id is not None:
            pulumi.set(__self__, "server_group_id", server_group_id)
        if start_port is not None:
            pulumi.set(__self__, "start_port", start_port)
        if status is not None:
            pulumi.set(__self__, "status", status)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)
        if updated_time is not None:
            pulumi.set(__self__, "updated_time", updated_time)
        if waf_protection_enabled is not None:
            pulumi.set(__self__, "waf_protection_enabled", waf_protection_enabled)

    @property
    @pulumi.getter(name="aclIds")
    def acl_ids(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]]:
        """
        监听器绑定的访问控制策略组ID。仅AclStatus参数为on时返回。
        """
        return pulumi.get(self, "acl_ids")

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

    @property
    @pulumi.getter(name="aclStatus")
    def acl_status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否开启访问控制功能。取值如下：on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "acl_status")

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

    @property
    @pulumi.getter(name="aclType")
    def acl_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        访问控制的方式。white：白名单。black：黑名单。仅AclStatus参数为on时，本参数有效。
        """
        return pulumi.get(self, "acl_type")

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

    @property
    @pulumi.getter
    def bandwidth(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        监听器的带宽上限，即此监听器独占CLB实例的带宽，单位为Mbps。-1（默认值）：此监听器不独占CLB的带，与其他监听器共享CLB实例未被独占的带宽。取值范围：1～CLB实例未被独占的带宽。
        """
        return pulumi.get(self, "bandwidth")

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

    @property
    @pulumi.getter(name="caCertificateId")
    def ca_certificate_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        双向认证的CA证书。
        """
        return pulumi.get(self, "ca_certificate_id")

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

    @property
    @pulumi.getter(name="caEnabled")
    def ca_enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否开启双向认证。on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "ca_enabled")

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

    @property
    @pulumi.getter(name="certCenterCertificateId")
    def cert_center_certificate_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        证书中心的证书的ID。
        """
        return pulumi.get(self, "cert_center_certificate_id")

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

    @property
    @pulumi.getter(name="certificateId")
    def certificate_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        CLB侧证书管理模块的证书的ID。
        """
        return pulumi.get(self, "certificate_id")

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

    @property
    @pulumi.getter(name="certificateSource")
    def certificate_source(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        证书的来源。clb (默认)：CLB上传的证书。cert_center：证书中心上传的证书。user：用户上传的证书。
        """
        return pulumi.get(self, "certificate_source")

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

    @property
    @pulumi.getter(name="clientBodyTimeout")
    def client_body_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        读取客户端请求正文的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个请求的传输过程。取值范围为 30-120秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效
        """
        return pulumi.get(self, "client_body_timeout")

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

    @property
    @pulumi.getter(name="clientHeaderTimeout")
    def client_header_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        读取客户端请求头的超时时间。取值范围为30-120秒。默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "client_header_timeout")

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

    @property
    @pulumi.getter(name="connectionDrainEnabled")
    def connection_drain_enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器是否开启连接优雅中断功能。on：开启。off：不开启。参数Protocol返回为HTTP或HTTPS时，该参数固定返回off。
        """
        return pulumi.get(self, "connection_drain_enabled")

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

    @property
    @pulumi.getter(name="connectionDrainTimeout")
    def connection_drain_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        连接优雅中断的超时时间，单位为秒。参数ConnectionDrainEnabled返回为off时，该参数返回0。
        """
        return pulumi.get(self, "connection_drain_timeout")

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

    @property
    @pulumi.getter
    def cookie(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        后端服务器配置的会话保持的Cookie名称。仅参数PersistenceType取server时，本参数有效且必填。只能包含字母、数字、下划线（_）和中划线（-）。长度限制在1～200字符之间。
        """
        return pulumi.get(self, "cookie")

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

    @property
    @pulumi.getter
    def cps(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        每秒新建连接数的上限。-1（默认值）：不限制，即CLB实例的新建连接数上限。取值范围：1～CLB实例的新连接数上限。
        """
        return pulumi.get(self, "cps")

    @cps.setter
    def cps(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "cps", 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
    def description(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器的描述。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：英文逗号（,）、点（.）、下划线（_）、空格（ ）、等号（=）、中划线（-）、中文逗号（，）、中文句号（。）。长度限制为0 ～ 255个字符。不填则默认值为空字符串。
        """
        return pulumi.get(self, "description")

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

    @property
    @pulumi.getter
    def enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否启用监听器。on（默认值）：开启。off：不开启。
        """
        return pulumi.get(self, "enabled")

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

    @property
    @pulumi.getter(name="endPort")
    def end_port(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        全端口监听的结束端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入，且该参数取值应大于tartPort。
        """
        return pulumi.get(self, "end_port")

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

    @property
    @pulumi.getter(name="establishedTimeout")
    def established_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        监听器的连接超时时间。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：TCP协议：10-900秒，默认为900秒。UDP协议：1-300秒，默认为90秒。
        """
        return pulumi.get(self, "established_timeout")

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

    @property
    @pulumi.getter(name="healthCheck")
    def health_check(self) -> Optional[pulumi.Input['ListenerHealthCheckArgs']]:
        """
        健康检查相关信息。
        """
        return pulumi.get(self, "health_check")

    @health_check.setter
    def health_check(self, value: Optional[pulumi.Input['ListenerHealthCheckArgs']]):
        pulumi.set(self, "health_check", value)

    @property
    @pulumi.getter(name="http2Enabled")
    def http2_enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器是否开启前端HTTP 2.0协议。仅参数`Protocol取HTTPS时，本参数有效。取值如下：|on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "http2_enabled")

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

    @property
    @pulumi.getter(name="keepaliveTimeout")
    def keepalive_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        客户端与CLB之间的长连接超时时间。取值范围为 0-900秒，默认为75秒。0表示禁用长连接。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "keepalive_timeout")

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

    @property
    @pulumi.getter(name="listenerId")
    def listener_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器的ID。
        """
        return pulumi.get(self, "listener_id")

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

    @property
    @pulumi.getter(name="listenerName")
    def listener_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器的名称。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：点号（.）、下划线_）和中划线（-）。长度限制在1～128字符之间。不填则默认将“协议-端口”作为监听器名称。
        """
        return pulumi.get(self, "listener_name")

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

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        CLB实例的ID。
        """
        return pulumi.get(self, "load_balancer_id")

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

    @property
    @pulumi.getter(name="maxConnections")
    def max_connections(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        最大并发连接数的上限。-1（默认值）：不限制，CLB实例的最大并发连接数上限。取值范围：1～CLB实例的最大并发连接数上限。
        """
        return pulumi.get(self, "max_connections")

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

    @property
    @pulumi.getter(name="persistenceTimeout")
    def persistence_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        会话保持的超时时间，单位为秒。取值范围根据参数PersistenceType取值有所不同。PersistenceType置为source_ip时，取值范围为1～3600。PersistenceType配置为insert时，取值范围为1～86400。
        """
        return pulumi.get(self, "persistence_timeout")

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

    @property
    @pulumi.getter(name="persistenceType")
    def persistence_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        会话保持的类型。取值如下：off（默认值）：不启用会话保持。source_ip：源地址IP，仅参数ProtocolTCP或UDP时，本取值有效。insert：植入Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。server：重写Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。。
        """
        return pulumi.get(self, "persistence_type")

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

    @property
    @pulumi.getter
    def port(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        监听器接收请求使用的端口。取值范围为 0～65535。参数Protocol为“TCP”或“UDP”时，支持传入0，表示用全端口监听。
        """
        return pulumi.get(self, "port")

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

    @property
    @pulumi.getter
    def protocol(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器的协议。
        """
        return pulumi.get(self, "protocol")

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

    @property
    @pulumi.getter(name="proxyConnectTimeout")
    def proxy_connect_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB与后端服务器之间的连接建立超时时间。建议大于健康检查超时时间。取值范围为 4-120秒，默认为4。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_connect_timeout")

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

    @property
    @pulumi.getter(name="proxyProtocolType")
    def proxy_protocol_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否启用Proxy-Protocol协议。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：off（默认值）：关闭。standard：开启。
        """
        return pulumi.get(self, "proxy_protocol_type")

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

    @property
    @pulumi.getter(name="proxyReadTimeout")
    def proxy_read_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB从后端服务器读取响应的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个响应的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_read_timeout")

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

    @property
    @pulumi.getter(name="proxySendTimeout")
    def proxy_send_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB将请求传输到后端服务器的超时时间。此超时仅针对两个连续的写操作之间设置，而非整个请求的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_send_timeout")

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

    @property
    @pulumi.getter
    def scheduler(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器使用的调度算法。wrr（默认值）：加权轮询。wlc：加权最小连接数。sh：源地址哈希。
        """
        return pulumi.get(self, "scheduler")

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

    @property
    @pulumi.getter(name="securityPolicyId")
    def security_policy_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        HTTPS监听器的TLS安全策略。仅参数Protocol取HTTPS时，本参数有效。 取值如下：default*policy（默认值）：支持SSL v3、TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*0：支持TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*1：支持TLS v1.1、TLS v1.2。tls*cipher*policy*1*2：支持TLS v1.2。tls*cipher*policy*1*2*strict：支持TLS v1.2。
        """
        return pulumi.get(self, "security_policy_id")

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

    @property
    @pulumi.getter(name="sendTimeout")
    def send_timeout(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        CLB向客户端发送响应的超时时间。此超时仅针对两个连续的写操作之间设置，而非整响应的传输过程。取值范围为 1-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "send_timeout")

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

    @property
    @pulumi.getter(name="serverGroupId")
    def server_group_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器关联的后端服务器组 ID。
        """
        return pulumi.get(self, "server_group_id")

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

    @property
    @pulumi.getter(name="startPort")
    def start_port(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        全端口监听的起始端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入。
        """
        return pulumi.get(self, "start_port")

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

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        监听器的状态。Creating：创建中。Active：运行中。Deleting: 删除中。Disabled: 已停用。
        """
        return pulumi.get(self, "status")

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

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

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ListenerTagArgs']]]]):
        pulumi.set(self, "tags", 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(name="wafProtectionEnabled")
    def waf_protection_enabled(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        是否将经过七层监听器的流量送至Web应用防火墙进行检测和过滤。on：是。off：否。
        """
        return pulumi.get(self, "waf_protection_enabled")

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


@pulumi.type_token("bytepluscc:clb/listener:Listener")
class Listener(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 acl_ids: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 acl_status: Optional[pulumi.Input[builtins.str]] = None,
                 acl_type: Optional[pulumi.Input[builtins.str]] = None,
                 bandwidth: Optional[pulumi.Input[builtins.int]] = None,
                 ca_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 ca_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 cert_center_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_source: Optional[pulumi.Input[builtins.str]] = None,
                 client_body_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 client_header_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 connection_drain_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 connection_drain_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 cookie: Optional[pulumi.Input[builtins.str]] = None,
                 cps: Optional[pulumi.Input[builtins.int]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 enabled: Optional[pulumi.Input[builtins.str]] = None,
                 end_port: Optional[pulumi.Input[builtins.int]] = None,
                 established_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 health_check: Optional[pulumi.Input[Union['ListenerHealthCheckArgs', 'ListenerHealthCheckArgsDict']]] = None,
                 http2_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 keepalive_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 listener_name: Optional[pulumi.Input[builtins.str]] = None,
                 load_balancer_id: Optional[pulumi.Input[builtins.str]] = None,
                 max_connections: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_type: Optional[pulumi.Input[builtins.str]] = None,
                 port: Optional[pulumi.Input[builtins.int]] = None,
                 protocol: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_connect_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_protocol_type: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_read_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 scheduler: Optional[pulumi.Input[builtins.str]] = None,
                 security_policy_id: Optional[pulumi.Input[builtins.str]] = None,
                 send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 server_group_id: Optional[pulumi.Input[builtins.str]] = None,
                 start_port: Optional[pulumi.Input[builtins.int]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ListenerTagArgs', 'ListenerTagArgsDict']]]]] = None,
                 __props__=None):
        """
        监听器负责根据指定的协议和端口，监听CLB实例接收到的用户访问请求。CLB将按照该监听器配置的调度算法，将访问请求转发至该后端服务器组内健康的后端服务器。

        ## Import

        ```sh
        $ pulumi import bytepluscc:clb/listener:Listener example "listener_id"
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[Sequence[pulumi.Input[builtins.str]]] acl_ids: 监听器绑定的访问控制策略组ID。仅AclStatus参数为on时返回。
        :param pulumi.Input[builtins.str] acl_status: 是否开启访问控制功能。取值如下：on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] acl_type: 访问控制的方式。white：白名单。black：黑名单。仅AclStatus参数为on时，本参数有效。
        :param pulumi.Input[builtins.int] bandwidth: 监听器的带宽上限，即此监听器独占CLB实例的带宽，单位为Mbps。-1（默认值）：此监听器不独占CLB的带，与其他监听器共享CLB实例未被独占的带宽。取值范围：1～CLB实例未被独占的带宽。
        :param pulumi.Input[builtins.str] ca_certificate_id: 双向认证的CA证书。
        :param pulumi.Input[builtins.str] ca_enabled: 是否开启双向认证。on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] cert_center_certificate_id: 证书中心的证书的ID。
        :param pulumi.Input[builtins.str] certificate_id: CLB侧证书管理模块的证书的ID。
        :param pulumi.Input[builtins.str] certificate_source: 证书的来源。clb (默认)：CLB上传的证书。cert_center：证书中心上传的证书。user：用户上传的证书。
        :param pulumi.Input[builtins.int] client_body_timeout: 读取客户端请求正文的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个请求的传输过程。取值范围为 30-120秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效
        :param pulumi.Input[builtins.int] client_header_timeout: 读取客户端请求头的超时时间。取值范围为30-120秒。默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] connection_drain_enabled: 监听器是否开启连接优雅中断功能。on：开启。off：不开启。参数Protocol返回为HTTP或HTTPS时，该参数固定返回off。
        :param pulumi.Input[builtins.int] connection_drain_timeout: 连接优雅中断的超时时间，单位为秒。参数ConnectionDrainEnabled返回为off时，该参数返回0。
        :param pulumi.Input[builtins.str] cookie: 后端服务器配置的会话保持的Cookie名称。仅参数PersistenceType取server时，本参数有效且必填。只能包含字母、数字、下划线（_）和中划线（-）。长度限制在1～200字符之间。
        :param pulumi.Input[builtins.int] cps: 每秒新建连接数的上限。-1（默认值）：不限制，即CLB实例的新建连接数上限。取值范围：1～CLB实例的新连接数上限。
        :param pulumi.Input[builtins.str] description: 监听器的描述。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：英文逗号（,）、点（.）、下划线（_）、空格（ ）、等号（=）、中划线（-）、中文逗号（，）、中文句号（。）。长度限制为0 ～ 255个字符。不填则默认值为空字符串。
        :param pulumi.Input[builtins.str] enabled: 是否启用监听器。on（默认值）：开启。off：不开启。
        :param pulumi.Input[builtins.int] end_port: 全端口监听的结束端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入，且该参数取值应大于tartPort。
        :param pulumi.Input[builtins.int] established_timeout: 监听器的连接超时时间。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：TCP协议：10-900秒，默认为900秒。UDP协议：1-300秒，默认为90秒。
        :param pulumi.Input[Union['ListenerHealthCheckArgs', 'ListenerHealthCheckArgsDict']] health_check: 健康检查相关信息。
        :param pulumi.Input[builtins.str] http2_enabled: 监听器是否开启前端HTTP 2.0协议。仅参数`Protocol取HTTPS时，本参数有效。取值如下：|on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.int] keepalive_timeout: 客户端与CLB之间的长连接超时时间。取值范围为 0-900秒，默认为75秒。0表示禁用长连接。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] listener_name: 监听器的名称。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：点号（.）、下划线_）和中划线（-）。长度限制在1～128字符之间。不填则默认将“协议-端口”作为监听器名称。
        :param pulumi.Input[builtins.str] load_balancer_id: CLB实例的ID。
        :param pulumi.Input[builtins.int] max_connections: 最大并发连接数的上限。-1（默认值）：不限制，CLB实例的最大并发连接数上限。取值范围：1～CLB实例的最大并发连接数上限。
        :param pulumi.Input[builtins.int] persistence_timeout: 会话保持的超时时间，单位为秒。取值范围根据参数PersistenceType取值有所不同。PersistenceType置为source_ip时，取值范围为1～3600。PersistenceType配置为insert时，取值范围为1～86400。
        :param pulumi.Input[builtins.str] persistence_type: 会话保持的类型。取值如下：off（默认值）：不启用会话保持。source_ip：源地址IP，仅参数ProtocolTCP或UDP时，本取值有效。insert：植入Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。server：重写Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。。
        :param pulumi.Input[builtins.int] port: 监听器接收请求使用的端口。取值范围为 0～65535。参数Protocol为“TCP”或“UDP”时，支持传入0，表示用全端口监听。
        :param pulumi.Input[builtins.str] protocol: 监听器的协议。
        :param pulumi.Input[builtins.int] proxy_connect_timeout: CLB与后端服务器之间的连接建立超时时间。建议大于健康检查超时时间。取值范围为 4-120秒，默认为4。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] proxy_protocol_type: 是否启用Proxy-Protocol协议。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：off（默认值）：关闭。standard：开启。
        :param pulumi.Input[builtins.int] proxy_read_timeout: CLB从后端服务器读取响应的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个响应的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.int] proxy_send_timeout: CLB将请求传输到后端服务器的超时时间。此超时仅针对两个连续的写操作之间设置，而非整个请求的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] scheduler: 监听器使用的调度算法。wrr（默认值）：加权轮询。wlc：加权最小连接数。sh：源地址哈希。
        :param pulumi.Input[builtins.str] security_policy_id: HTTPS监听器的TLS安全策略。仅参数Protocol取HTTPS时，本参数有效。 取值如下：default*policy（默认值）：支持SSL v3、TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*0：支持TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*1：支持TLS v1.1、TLS v1.2。tls*cipher*policy*1*2：支持TLS v1.2。tls*cipher*policy*1*2*strict：支持TLS v1.2。
        :param pulumi.Input[builtins.int] send_timeout: CLB向客户端发送响应的超时时间。此超时仅针对两个连续的写操作之间设置，而非整响应的传输过程。取值范围为 1-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] server_group_id: 监听器关联的后端服务器组 ID。
        :param pulumi.Input[builtins.int] start_port: 全端口监听的起始端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入。
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: ListenerArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        监听器负责根据指定的协议和端口，监听CLB实例接收到的用户访问请求。CLB将按照该监听器配置的调度算法，将访问请求转发至该后端服务器组内健康的后端服务器。

        ## Import

        ```sh
        $ pulumi import bytepluscc:clb/listener:Listener example "listener_id"
        ```

        :param str resource_name: The name of the resource.
        :param ListenerArgs 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(ListenerArgs, 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,
                 acl_ids: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
                 acl_status: Optional[pulumi.Input[builtins.str]] = None,
                 acl_type: Optional[pulumi.Input[builtins.str]] = None,
                 bandwidth: Optional[pulumi.Input[builtins.int]] = None,
                 ca_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 ca_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 cert_center_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_id: Optional[pulumi.Input[builtins.str]] = None,
                 certificate_source: Optional[pulumi.Input[builtins.str]] = None,
                 client_body_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 client_header_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 connection_drain_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 connection_drain_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 cookie: Optional[pulumi.Input[builtins.str]] = None,
                 cps: Optional[pulumi.Input[builtins.int]] = None,
                 description: Optional[pulumi.Input[builtins.str]] = None,
                 enabled: Optional[pulumi.Input[builtins.str]] = None,
                 end_port: Optional[pulumi.Input[builtins.int]] = None,
                 established_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 health_check: Optional[pulumi.Input[Union['ListenerHealthCheckArgs', 'ListenerHealthCheckArgsDict']]] = None,
                 http2_enabled: Optional[pulumi.Input[builtins.str]] = None,
                 keepalive_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 listener_name: Optional[pulumi.Input[builtins.str]] = None,
                 load_balancer_id: Optional[pulumi.Input[builtins.str]] = None,
                 max_connections: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 persistence_type: Optional[pulumi.Input[builtins.str]] = None,
                 port: Optional[pulumi.Input[builtins.int]] = None,
                 protocol: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_connect_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_protocol_type: Optional[pulumi.Input[builtins.str]] = None,
                 proxy_read_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 proxy_send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 scheduler: Optional[pulumi.Input[builtins.str]] = None,
                 security_policy_id: Optional[pulumi.Input[builtins.str]] = None,
                 send_timeout: Optional[pulumi.Input[builtins.int]] = None,
                 server_group_id: Optional[pulumi.Input[builtins.str]] = None,
                 start_port: Optional[pulumi.Input[builtins.int]] = None,
                 tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ListenerTagArgs', 'ListenerTagArgsDict']]]]] = 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__ = ListenerArgs.__new__(ListenerArgs)

            __props__.__dict__["acl_ids"] = acl_ids
            __props__.__dict__["acl_status"] = acl_status
            __props__.__dict__["acl_type"] = acl_type
            __props__.__dict__["bandwidth"] = bandwidth
            __props__.__dict__["ca_certificate_id"] = ca_certificate_id
            __props__.__dict__["ca_enabled"] = ca_enabled
            __props__.__dict__["cert_center_certificate_id"] = cert_center_certificate_id
            __props__.__dict__["certificate_id"] = certificate_id
            __props__.__dict__["certificate_source"] = certificate_source
            __props__.__dict__["client_body_timeout"] = client_body_timeout
            __props__.__dict__["client_header_timeout"] = client_header_timeout
            __props__.__dict__["connection_drain_enabled"] = connection_drain_enabled
            __props__.__dict__["connection_drain_timeout"] = connection_drain_timeout
            __props__.__dict__["cookie"] = cookie
            __props__.__dict__["cps"] = cps
            __props__.__dict__["description"] = description
            __props__.__dict__["enabled"] = enabled
            __props__.__dict__["end_port"] = end_port
            __props__.__dict__["established_timeout"] = established_timeout
            __props__.__dict__["health_check"] = health_check
            __props__.__dict__["http2_enabled"] = http2_enabled
            __props__.__dict__["keepalive_timeout"] = keepalive_timeout
            __props__.__dict__["listener_name"] = listener_name
            if load_balancer_id is None and not opts.urn:
                raise TypeError("Missing required property 'load_balancer_id'")
            __props__.__dict__["load_balancer_id"] = load_balancer_id
            __props__.__dict__["max_connections"] = max_connections
            __props__.__dict__["persistence_timeout"] = persistence_timeout
            __props__.__dict__["persistence_type"] = persistence_type
            if port is None and not opts.urn:
                raise TypeError("Missing required property 'port'")
            __props__.__dict__["port"] = port
            if protocol is None and not opts.urn:
                raise TypeError("Missing required property 'protocol'")
            __props__.__dict__["protocol"] = protocol
            __props__.__dict__["proxy_connect_timeout"] = proxy_connect_timeout
            __props__.__dict__["proxy_protocol_type"] = proxy_protocol_type
            __props__.__dict__["proxy_read_timeout"] = proxy_read_timeout
            __props__.__dict__["proxy_send_timeout"] = proxy_send_timeout
            __props__.__dict__["scheduler"] = scheduler
            __props__.__dict__["security_policy_id"] = security_policy_id
            __props__.__dict__["send_timeout"] = send_timeout
            if server_group_id is None and not opts.urn:
                raise TypeError("Missing required property 'server_group_id'")
            __props__.__dict__["server_group_id"] = server_group_id
            __props__.__dict__["start_port"] = start_port
            __props__.__dict__["tags"] = tags
            __props__.__dict__["created_time"] = None
            __props__.__dict__["listener_id"] = None
            __props__.__dict__["status"] = None
            __props__.__dict__["updated_time"] = None
            __props__.__dict__["waf_protection_enabled"] = None
        super(Listener, __self__).__init__(
            'bytepluscc:clb/listener:Listener',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            acl_ids: Optional[pulumi.Input[Sequence[pulumi.Input[builtins.str]]]] = None,
            acl_status: Optional[pulumi.Input[builtins.str]] = None,
            acl_type: Optional[pulumi.Input[builtins.str]] = None,
            bandwidth: Optional[pulumi.Input[builtins.int]] = None,
            ca_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
            ca_enabled: Optional[pulumi.Input[builtins.str]] = None,
            cert_center_certificate_id: Optional[pulumi.Input[builtins.str]] = None,
            certificate_id: Optional[pulumi.Input[builtins.str]] = None,
            certificate_source: Optional[pulumi.Input[builtins.str]] = None,
            client_body_timeout: Optional[pulumi.Input[builtins.int]] = None,
            client_header_timeout: Optional[pulumi.Input[builtins.int]] = None,
            connection_drain_enabled: Optional[pulumi.Input[builtins.str]] = None,
            connection_drain_timeout: Optional[pulumi.Input[builtins.int]] = None,
            cookie: Optional[pulumi.Input[builtins.str]] = None,
            cps: Optional[pulumi.Input[builtins.int]] = None,
            created_time: Optional[pulumi.Input[builtins.str]] = None,
            description: Optional[pulumi.Input[builtins.str]] = None,
            enabled: Optional[pulumi.Input[builtins.str]] = None,
            end_port: Optional[pulumi.Input[builtins.int]] = None,
            established_timeout: Optional[pulumi.Input[builtins.int]] = None,
            health_check: Optional[pulumi.Input[Union['ListenerHealthCheckArgs', 'ListenerHealthCheckArgsDict']]] = None,
            http2_enabled: Optional[pulumi.Input[builtins.str]] = None,
            keepalive_timeout: Optional[pulumi.Input[builtins.int]] = None,
            listener_id: Optional[pulumi.Input[builtins.str]] = None,
            listener_name: Optional[pulumi.Input[builtins.str]] = None,
            load_balancer_id: Optional[pulumi.Input[builtins.str]] = None,
            max_connections: Optional[pulumi.Input[builtins.int]] = None,
            persistence_timeout: Optional[pulumi.Input[builtins.int]] = None,
            persistence_type: Optional[pulumi.Input[builtins.str]] = None,
            port: Optional[pulumi.Input[builtins.int]] = None,
            protocol: Optional[pulumi.Input[builtins.str]] = None,
            proxy_connect_timeout: Optional[pulumi.Input[builtins.int]] = None,
            proxy_protocol_type: Optional[pulumi.Input[builtins.str]] = None,
            proxy_read_timeout: Optional[pulumi.Input[builtins.int]] = None,
            proxy_send_timeout: Optional[pulumi.Input[builtins.int]] = None,
            scheduler: Optional[pulumi.Input[builtins.str]] = None,
            security_policy_id: Optional[pulumi.Input[builtins.str]] = None,
            send_timeout: Optional[pulumi.Input[builtins.int]] = None,
            server_group_id: Optional[pulumi.Input[builtins.str]] = None,
            start_port: Optional[pulumi.Input[builtins.int]] = None,
            status: Optional[pulumi.Input[builtins.str]] = None,
            tags: Optional[pulumi.Input[Sequence[pulumi.Input[Union['ListenerTagArgs', 'ListenerTagArgsDict']]]]] = None,
            updated_time: Optional[pulumi.Input[builtins.str]] = None,
            waf_protection_enabled: Optional[pulumi.Input[builtins.str]] = None) -> 'Listener':
        """
        Get an existing Listener 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]]] acl_ids: 监听器绑定的访问控制策略组ID。仅AclStatus参数为on时返回。
        :param pulumi.Input[builtins.str] acl_status: 是否开启访问控制功能。取值如下：on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] acl_type: 访问控制的方式。white：白名单。black：黑名单。仅AclStatus参数为on时，本参数有效。
        :param pulumi.Input[builtins.int] bandwidth: 监听器的带宽上限，即此监听器独占CLB实例的带宽，单位为Mbps。-1（默认值）：此监听器不独占CLB的带，与其他监听器共享CLB实例未被独占的带宽。取值范围：1～CLB实例未被独占的带宽。
        :param pulumi.Input[builtins.str] ca_certificate_id: 双向认证的CA证书。
        :param pulumi.Input[builtins.str] ca_enabled: 是否开启双向认证。on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.str] cert_center_certificate_id: 证书中心的证书的ID。
        :param pulumi.Input[builtins.str] certificate_id: CLB侧证书管理模块的证书的ID。
        :param pulumi.Input[builtins.str] certificate_source: 证书的来源。clb (默认)：CLB上传的证书。cert_center：证书中心上传的证书。user：用户上传的证书。
        :param pulumi.Input[builtins.int] client_body_timeout: 读取客户端请求正文的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个请求的传输过程。取值范围为 30-120秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效
        :param pulumi.Input[builtins.int] client_header_timeout: 读取客户端请求头的超时时间。取值范围为30-120秒。默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] connection_drain_enabled: 监听器是否开启连接优雅中断功能。on：开启。off：不开启。参数Protocol返回为HTTP或HTTPS时，该参数固定返回off。
        :param pulumi.Input[builtins.int] connection_drain_timeout: 连接优雅中断的超时时间，单位为秒。参数ConnectionDrainEnabled返回为off时，该参数返回0。
        :param pulumi.Input[builtins.str] cookie: 后端服务器配置的会话保持的Cookie名称。仅参数PersistenceType取server时，本参数有效且必填。只能包含字母、数字、下划线（_）和中划线（-）。长度限制在1～200字符之间。
        :param pulumi.Input[builtins.int] cps: 每秒新建连接数的上限。-1（默认值）：不限制，即CLB实例的新建连接数上限。取值范围：1～CLB实例的新连接数上限。
        :param pulumi.Input[builtins.str] created_time: 监听器的创建时间。
        :param pulumi.Input[builtins.str] description: 监听器的描述。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：英文逗号（,）、点（.）、下划线（_）、空格（ ）、等号（=）、中划线（-）、中文逗号（，）、中文句号（。）。长度限制为0 ～ 255个字符。不填则默认值为空字符串。
        :param pulumi.Input[builtins.str] enabled: 是否启用监听器。on（默认值）：开启。off：不开启。
        :param pulumi.Input[builtins.int] end_port: 全端口监听的结束端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入，且该参数取值应大于tartPort。
        :param pulumi.Input[builtins.int] established_timeout: 监听器的连接超时时间。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：TCP协议：10-900秒，默认为900秒。UDP协议：1-300秒，默认为90秒。
        :param pulumi.Input[Union['ListenerHealthCheckArgs', 'ListenerHealthCheckArgsDict']] health_check: 健康检查相关信息。
        :param pulumi.Input[builtins.str] http2_enabled: 监听器是否开启前端HTTP 2.0协议。仅参数`Protocol取HTTPS时，本参数有效。取值如下：|on：开启。off（默认值）：不开启。
        :param pulumi.Input[builtins.int] keepalive_timeout: 客户端与CLB之间的长连接超时时间。取值范围为 0-900秒，默认为75秒。0表示禁用长连接。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] listener_id: 监听器的ID。
        :param pulumi.Input[builtins.str] listener_name: 监听器的名称。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：点号（.）、下划线_）和中划线（-）。长度限制在1～128字符之间。不填则默认将“协议-端口”作为监听器名称。
        :param pulumi.Input[builtins.str] load_balancer_id: CLB实例的ID。
        :param pulumi.Input[builtins.int] max_connections: 最大并发连接数的上限。-1（默认值）：不限制，CLB实例的最大并发连接数上限。取值范围：1～CLB实例的最大并发连接数上限。
        :param pulumi.Input[builtins.int] persistence_timeout: 会话保持的超时时间，单位为秒。取值范围根据参数PersistenceType取值有所不同。PersistenceType置为source_ip时，取值范围为1～3600。PersistenceType配置为insert时，取值范围为1～86400。
        :param pulumi.Input[builtins.str] persistence_type: 会话保持的类型。取值如下：off（默认值）：不启用会话保持。source_ip：源地址IP，仅参数ProtocolTCP或UDP时，本取值有效。insert：植入Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。server：重写Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。。
        :param pulumi.Input[builtins.int] port: 监听器接收请求使用的端口。取值范围为 0～65535。参数Protocol为“TCP”或“UDP”时，支持传入0，表示用全端口监听。
        :param pulumi.Input[builtins.str] protocol: 监听器的协议。
        :param pulumi.Input[builtins.int] proxy_connect_timeout: CLB与后端服务器之间的连接建立超时时间。建议大于健康检查超时时间。取值范围为 4-120秒，默认为4。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] proxy_protocol_type: 是否启用Proxy-Protocol协议。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：off（默认值）：关闭。standard：开启。
        :param pulumi.Input[builtins.int] proxy_read_timeout: CLB从后端服务器读取响应的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个响应的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.int] proxy_send_timeout: CLB将请求传输到后端服务器的超时时间。此超时仅针对两个连续的写操作之间设置，而非整个请求的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] scheduler: 监听器使用的调度算法。wrr（默认值）：加权轮询。wlc：加权最小连接数。sh：源地址哈希。
        :param pulumi.Input[builtins.str] security_policy_id: HTTPS监听器的TLS安全策略。仅参数Protocol取HTTPS时，本参数有效。 取值如下：default*policy（默认值）：支持SSL v3、TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*0：支持TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*1：支持TLS v1.1、TLS v1.2。tls*cipher*policy*1*2：支持TLS v1.2。tls*cipher*policy*1*2*strict：支持TLS v1.2。
        :param pulumi.Input[builtins.int] send_timeout: CLB向客户端发送响应的超时时间。此超时仅针对两个连续的写操作之间设置，而非整响应的传输过程。取值范围为 1-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        :param pulumi.Input[builtins.str] server_group_id: 监听器关联的后端服务器组 ID。
        :param pulumi.Input[builtins.int] start_port: 全端口监听的起始端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入。
        :param pulumi.Input[builtins.str] status: 监听器的状态。Creating：创建中。Active：运行中。Deleting: 删除中。Disabled: 已停用。
        :param pulumi.Input[builtins.str] updated_time: 监听器最近一次的操作时间。
        :param pulumi.Input[builtins.str] waf_protection_enabled: 是否将经过七层监听器的流量送至Web应用防火墙进行检测和过滤。on：是。off：否。
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _ListenerState.__new__(_ListenerState)

        __props__.__dict__["acl_ids"] = acl_ids
        __props__.__dict__["acl_status"] = acl_status
        __props__.__dict__["acl_type"] = acl_type
        __props__.__dict__["bandwidth"] = bandwidth
        __props__.__dict__["ca_certificate_id"] = ca_certificate_id
        __props__.__dict__["ca_enabled"] = ca_enabled
        __props__.__dict__["cert_center_certificate_id"] = cert_center_certificate_id
        __props__.__dict__["certificate_id"] = certificate_id
        __props__.__dict__["certificate_source"] = certificate_source
        __props__.__dict__["client_body_timeout"] = client_body_timeout
        __props__.__dict__["client_header_timeout"] = client_header_timeout
        __props__.__dict__["connection_drain_enabled"] = connection_drain_enabled
        __props__.__dict__["connection_drain_timeout"] = connection_drain_timeout
        __props__.__dict__["cookie"] = cookie
        __props__.__dict__["cps"] = cps
        __props__.__dict__["created_time"] = created_time
        __props__.__dict__["description"] = description
        __props__.__dict__["enabled"] = enabled
        __props__.__dict__["end_port"] = end_port
        __props__.__dict__["established_timeout"] = established_timeout
        __props__.__dict__["health_check"] = health_check
        __props__.__dict__["http2_enabled"] = http2_enabled
        __props__.__dict__["keepalive_timeout"] = keepalive_timeout
        __props__.__dict__["listener_id"] = listener_id
        __props__.__dict__["listener_name"] = listener_name
        __props__.__dict__["load_balancer_id"] = load_balancer_id
        __props__.__dict__["max_connections"] = max_connections
        __props__.__dict__["persistence_timeout"] = persistence_timeout
        __props__.__dict__["persistence_type"] = persistence_type
        __props__.__dict__["port"] = port
        __props__.__dict__["protocol"] = protocol
        __props__.__dict__["proxy_connect_timeout"] = proxy_connect_timeout
        __props__.__dict__["proxy_protocol_type"] = proxy_protocol_type
        __props__.__dict__["proxy_read_timeout"] = proxy_read_timeout
        __props__.__dict__["proxy_send_timeout"] = proxy_send_timeout
        __props__.__dict__["scheduler"] = scheduler
        __props__.__dict__["security_policy_id"] = security_policy_id
        __props__.__dict__["send_timeout"] = send_timeout
        __props__.__dict__["server_group_id"] = server_group_id
        __props__.__dict__["start_port"] = start_port
        __props__.__dict__["status"] = status
        __props__.__dict__["tags"] = tags
        __props__.__dict__["updated_time"] = updated_time
        __props__.__dict__["waf_protection_enabled"] = waf_protection_enabled
        return Listener(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="aclIds")
    def acl_ids(self) -> pulumi.Output[Sequence[builtins.str]]:
        """
        监听器绑定的访问控制策略组ID。仅AclStatus参数为on时返回。
        """
        return pulumi.get(self, "acl_ids")

    @property
    @pulumi.getter(name="aclStatus")
    def acl_status(self) -> pulumi.Output[builtins.str]:
        """
        是否开启访问控制功能。取值如下：on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "acl_status")

    @property
    @pulumi.getter(name="aclType")
    def acl_type(self) -> pulumi.Output[builtins.str]:
        """
        访问控制的方式。white：白名单。black：黑名单。仅AclStatus参数为on时，本参数有效。
        """
        return pulumi.get(self, "acl_type")

    @property
    @pulumi.getter
    def bandwidth(self) -> pulumi.Output[builtins.int]:
        """
        监听器的带宽上限，即此监听器独占CLB实例的带宽，单位为Mbps。-1（默认值）：此监听器不独占CLB的带，与其他监听器共享CLB实例未被独占的带宽。取值范围：1～CLB实例未被独占的带宽。
        """
        return pulumi.get(self, "bandwidth")

    @property
    @pulumi.getter(name="caCertificateId")
    def ca_certificate_id(self) -> pulumi.Output[builtins.str]:
        """
        双向认证的CA证书。
        """
        return pulumi.get(self, "ca_certificate_id")

    @property
    @pulumi.getter(name="caEnabled")
    def ca_enabled(self) -> pulumi.Output[builtins.str]:
        """
        是否开启双向认证。on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "ca_enabled")

    @property
    @pulumi.getter(name="certCenterCertificateId")
    def cert_center_certificate_id(self) -> pulumi.Output[builtins.str]:
        """
        证书中心的证书的ID。
        """
        return pulumi.get(self, "cert_center_certificate_id")

    @property
    @pulumi.getter(name="certificateId")
    def certificate_id(self) -> pulumi.Output[builtins.str]:
        """
        CLB侧证书管理模块的证书的ID。
        """
        return pulumi.get(self, "certificate_id")

    @property
    @pulumi.getter(name="certificateSource")
    def certificate_source(self) -> pulumi.Output[builtins.str]:
        """
        证书的来源。clb (默认)：CLB上传的证书。cert_center：证书中心上传的证书。user：用户上传的证书。
        """
        return pulumi.get(self, "certificate_source")

    @property
    @pulumi.getter(name="clientBodyTimeout")
    def client_body_timeout(self) -> pulumi.Output[builtins.int]:
        """
        读取客户端请求正文的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个请求的传输过程。取值范围为 30-120秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效
        """
        return pulumi.get(self, "client_body_timeout")

    @property
    @pulumi.getter(name="clientHeaderTimeout")
    def client_header_timeout(self) -> pulumi.Output[builtins.int]:
        """
        读取客户端请求头的超时时间。取值范围为30-120秒。默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "client_header_timeout")

    @property
    @pulumi.getter(name="connectionDrainEnabled")
    def connection_drain_enabled(self) -> pulumi.Output[builtins.str]:
        """
        监听器是否开启连接优雅中断功能。on：开启。off：不开启。参数Protocol返回为HTTP或HTTPS时，该参数固定返回off。
        """
        return pulumi.get(self, "connection_drain_enabled")

    @property
    @pulumi.getter(name="connectionDrainTimeout")
    def connection_drain_timeout(self) -> pulumi.Output[builtins.int]:
        """
        连接优雅中断的超时时间，单位为秒。参数ConnectionDrainEnabled返回为off时，该参数返回0。
        """
        return pulumi.get(self, "connection_drain_timeout")

    @property
    @pulumi.getter
    def cookie(self) -> pulumi.Output[builtins.str]:
        """
        后端服务器配置的会话保持的Cookie名称。仅参数PersistenceType取server时，本参数有效且必填。只能包含字母、数字、下划线（_）和中划线（-）。长度限制在1～200字符之间。
        """
        return pulumi.get(self, "cookie")

    @property
    @pulumi.getter
    def cps(self) -> pulumi.Output[builtins.int]:
        """
        每秒新建连接数的上限。-1（默认值）：不限制，即CLB实例的新建连接数上限。取值范围：1～CLB实例的新连接数上限。
        """
        return pulumi.get(self, "cps")

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

    @property
    @pulumi.getter
    def description(self) -> pulumi.Output[builtins.str]:
        """
        监听器的描述。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：英文逗号（,）、点（.）、下划线（_）、空格（ ）、等号（=）、中划线（-）、中文逗号（，）、中文句号（。）。长度限制为0 ～ 255个字符。不填则默认值为空字符串。
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter
    def enabled(self) -> pulumi.Output[builtins.str]:
        """
        是否启用监听器。on（默认值）：开启。off：不开启。
        """
        return pulumi.get(self, "enabled")

    @property
    @pulumi.getter(name="endPort")
    def end_port(self) -> pulumi.Output[builtins.int]:
        """
        全端口监听的结束端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入，且该参数取值应大于tartPort。
        """
        return pulumi.get(self, "end_port")

    @property
    @pulumi.getter(name="establishedTimeout")
    def established_timeout(self) -> pulumi.Output[builtins.int]:
        """
        监听器的连接超时时间。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：TCP协议：10-900秒，默认为900秒。UDP协议：1-300秒，默认为90秒。
        """
        return pulumi.get(self, "established_timeout")

    @property
    @pulumi.getter(name="healthCheck")
    def health_check(self) -> pulumi.Output['outputs.ListenerHealthCheck']:
        """
        健康检查相关信息。
        """
        return pulumi.get(self, "health_check")

    @property
    @pulumi.getter(name="http2Enabled")
    def http2_enabled(self) -> pulumi.Output[builtins.str]:
        """
        监听器是否开启前端HTTP 2.0协议。仅参数`Protocol取HTTPS时，本参数有效。取值如下：|on：开启。off（默认值）：不开启。
        """
        return pulumi.get(self, "http2_enabled")

    @property
    @pulumi.getter(name="keepaliveTimeout")
    def keepalive_timeout(self) -> pulumi.Output[builtins.int]:
        """
        客户端与CLB之间的长连接超时时间。取值范围为 0-900秒，默认为75秒。0表示禁用长连接。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "keepalive_timeout")

    @property
    @pulumi.getter(name="listenerId")
    def listener_id(self) -> pulumi.Output[builtins.str]:
        """
        监听器的ID。
        """
        return pulumi.get(self, "listener_id")

    @property
    @pulumi.getter(name="listenerName")
    def listener_name(self) -> pulumi.Output[builtins.str]:
        """
        监听器的名称。必须以字母、数字或中文开头，可包含字母、数字、中文及以下特殊字符：点号（.）、下划线_）和中划线（-）。长度限制在1～128字符之间。不填则默认将“协议-端口”作为监听器名称。
        """
        return pulumi.get(self, "listener_name")

    @property
    @pulumi.getter(name="loadBalancerId")
    def load_balancer_id(self) -> pulumi.Output[builtins.str]:
        """
        CLB实例的ID。
        """
        return pulumi.get(self, "load_balancer_id")

    @property
    @pulumi.getter(name="maxConnections")
    def max_connections(self) -> pulumi.Output[builtins.int]:
        """
        最大并发连接数的上限。-1（默认值）：不限制，CLB实例的最大并发连接数上限。取值范围：1～CLB实例的最大并发连接数上限。
        """
        return pulumi.get(self, "max_connections")

    @property
    @pulumi.getter(name="persistenceTimeout")
    def persistence_timeout(self) -> pulumi.Output[builtins.int]:
        """
        会话保持的超时时间，单位为秒。取值范围根据参数PersistenceType取值有所不同。PersistenceType置为source_ip时，取值范围为1～3600。PersistenceType配置为insert时，取值范围为1～86400。
        """
        return pulumi.get(self, "persistence_timeout")

    @property
    @pulumi.getter(name="persistenceType")
    def persistence_type(self) -> pulumi.Output[builtins.str]:
        """
        会话保持的类型。取值如下：off（默认值）：不启用会话保持。source_ip：源地址IP，仅参数ProtocolTCP或UDP时，本取值有效。insert：植入Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。server：重写Cookie，仅参数Protocol取HTTP或HTTPS且Scheduler取wrr时，本取值生效。。
        """
        return pulumi.get(self, "persistence_type")

    @property
    @pulumi.getter
    def port(self) -> pulumi.Output[builtins.int]:
        """
        监听器接收请求使用的端口。取值范围为 0～65535。参数Protocol为“TCP”或“UDP”时，支持传入0，表示用全端口监听。
        """
        return pulumi.get(self, "port")

    @property
    @pulumi.getter
    def protocol(self) -> pulumi.Output[builtins.str]:
        """
        监听器的协议。
        """
        return pulumi.get(self, "protocol")

    @property
    @pulumi.getter(name="proxyConnectTimeout")
    def proxy_connect_timeout(self) -> pulumi.Output[builtins.int]:
        """
        CLB与后端服务器之间的连接建立超时时间。建议大于健康检查超时时间。取值范围为 4-120秒，默认为4。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_connect_timeout")

    @property
    @pulumi.getter(name="proxyProtocolType")
    def proxy_protocol_type(self) -> pulumi.Output[builtins.str]:
        """
        是否启用Proxy-Protocol协议。仅参数Protocol取TCP或UDP时，本参数有效。取值如下：off（默认值）：关闭。standard：开启。
        """
        return pulumi.get(self, "proxy_protocol_type")

    @property
    @pulumi.getter(name="proxyReadTimeout")
    def proxy_read_timeout(self) -> pulumi.Output[builtins.int]:
        """
        CLB从后端服务器读取响应的超时时间。此超时时间仅针对两个连续的读操作之间设置，而非整个响应的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_read_timeout")

    @property
    @pulumi.getter(name="proxySendTimeout")
    def proxy_send_timeout(self) -> pulumi.Output[builtins.int]:
        """
        CLB将请求传输到后端服务器的超时时间。此超时仅针对两个连续的写操作之间设置，而非整个请求的传输过程。取值范围为30-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "proxy_send_timeout")

    @property
    @pulumi.getter
    def scheduler(self) -> pulumi.Output[builtins.str]:
        """
        监听器使用的调度算法。wrr（默认值）：加权轮询。wlc：加权最小连接数。sh：源地址哈希。
        """
        return pulumi.get(self, "scheduler")

    @property
    @pulumi.getter(name="securityPolicyId")
    def security_policy_id(self) -> pulumi.Output[builtins.str]:
        """
        HTTPS监听器的TLS安全策略。仅参数Protocol取HTTPS时，本参数有效。 取值如下：default*policy（默认值）：支持SSL v3、TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*0：支持TLS v1.0、TLS v1.1、TLS v1.2。tls*cipher*policy*1*1：支持TLS v1.1、TLS v1.2。tls*cipher*policy*1*2：支持TLS v1.2。tls*cipher*policy*1*2*strict：支持TLS v1.2。
        """
        return pulumi.get(self, "security_policy_id")

    @property
    @pulumi.getter(name="sendTimeout")
    def send_timeout(self) -> pulumi.Output[builtins.int]:
        """
        CLB向客户端发送响应的超时时间。此超时仅针对两个连续的写操作之间设置，而非整响应的传输过程。取值范围为 1-3600秒，默认为60秒。仅参数Protocol取HTTP或HTTPS时，本参数有效。
        """
        return pulumi.get(self, "send_timeout")

    @property
    @pulumi.getter(name="serverGroupId")
    def server_group_id(self) -> pulumi.Output[builtins.str]:
        """
        监听器关联的后端服务器组 ID。
        """
        return pulumi.get(self, "server_group_id")

    @property
    @pulumi.getter(name="startPort")
    def start_port(self) -> pulumi.Output[builtins.int]:
        """
        全端口监听的起始端口，取值范围为1-65535。参数Port为“0”时，该参数必须传入。
        """
        return pulumi.get(self, "start_port")

    @property
    @pulumi.getter
    def status(self) -> pulumi.Output[builtins.str]:
        """
        监听器的状态。Creating：创建中。Active：运行中。Deleting: 删除中。Disabled: 已停用。
        """
        return pulumi.get(self, "status")

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

    @property
    @pulumi.getter(name="updatedTime")
    def updated_time(self) -> pulumi.Output[builtins.str]:
        """
        监听器最近一次的操作时间。
        """
        return pulumi.get(self, "updated_time")

    @property
    @pulumi.getter(name="wafProtectionEnabled")
    def waf_protection_enabled(self) -> pulumi.Output[builtins.str]:
        """
        是否将经过七层监听器的流量送至Web应用防火墙进行检测和过滤。on：是。off：否。
        """
        return pulumi.get(self, "waf_protection_enabled")

