in alibabacloudstack/resource_apsarastack_slb_listener.go [21:315]
func resourceAlibabacloudStackSlbListener() *schema.Resource {
return &schema.Resource{
Create: resourceAlibabacloudStackSlbListenerCreate,
Read: resourceAlibabacloudStackSlbListenerRead,
Update: resourceAlibabacloudStackSlbListenerUpdate,
Delete: resourceAlibabacloudStackSlbListenerDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"load_balancer_id": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"description": {
Type: schema.TypeString,
Optional: true,
Computed: true,
},
"frontend_port": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 65535),
Required: true,
ForceNew: true,
},
"backend_port": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 65535),
Required: true,
ForceNew: true,
},
"protocol": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"http", "https", "tcp", "udp"}, false),
Optional: true,
ForceNew: true,
},
"bandwidth": {
Type: schema.TypeInt,
ValidateFunc: validation.Any(validation.IntBetween(1, 5000), validation.IntInSlice([]int{-1})),
Required: true,
},
"scheduler": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"wrr", "wlc", "rr", "sch", "tch"}, false),
Optional: true,
Default: WRRScheduler,
},
"server_group_id": {
Type: schema.TypeString,
Optional: true,
},
"master_slave_server_group_id": {
Type: schema.TypeString,
Optional: true,
},
"acl_status": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"on", "off"}, false),
Optional: true,
Default: OffFlag,
},
"acl_type": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"black", "white"}, false),
Optional: true,
DiffSuppressFunc: slbAclDiffSuppressFunc,
},
"acl_id": {
Type: schema.TypeString,
Optional: true,
DiffSuppressFunc: slbAclDiffSuppressFunc,
},
"sticky_session": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"on", "off"}, false),
Required: true,
DiffSuppressFunc: httpHttpsDiffSuppressFunc,
},
"sticky_session_type": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{string(InsertStickySessionType), string(ServerStickySessionType)}, false),
Optional: true,
DiffSuppressFunc: stickySessionTypeDiffSuppressFunc,
},
"cookie_timeout": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 86400),
Optional: true,
DiffSuppressFunc: cookieTimeoutDiffSuppressFunc,
},
"cookie": {
Type: schema.TypeString,
ValidateFunc: validation.StringLenBetween(1, 200),
Optional: true,
DiffSuppressFunc: cookieDiffSuppressFunc,
},
"persistence_timeout": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 3600),
Optional: true,
Default: 0,
DiffSuppressFunc: tcpUdpDiffSuppressFunc,
},
"health_check": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"on", "off"}, false),
Required: true,
DiffSuppressFunc: httpHttpsDiffSuppressFunc,
},
"health_check_method": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"head", "get"}, false),
Optional: true,
Computed: true,
},
"health_check_type": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{string(TCPHealthCheckType), string(HTTPHealthCheckType)}, false),
Optional: true,
Default: TCPHealthCheckType,
DiffSuppressFunc: healthCheckTypeDiffSuppressFunc,
},
"health_check_domain": {
Type: schema.TypeString,
ValidateFunc: validation.StringDoesNotMatch(regexp.MustCompile(`^\$_ip$`), "value '$_ip' has been deprecated, and empty string will replace it"),
Optional: true,
DiffSuppressFunc: httpHttpsTcpDiffSuppressFunc,
},
"health_check_uri": {
Type: schema.TypeString,
ValidateFunc: validation.StringLenBetween(1, 80),
Optional: true,
Default: "/",
DiffSuppressFunc: httpHttpsTcpDiffSuppressFunc,
},
"health_check_connect_port": {
Type: schema.TypeInt,
ValidateFunc: validation.Any(validation.IntBetween(1, 65535), validation.IntInSlice([]int{-520})),
Optional: true,
Computed: true,
DiffSuppressFunc: healthCheckDiffSuppressFunc,
},
"healthy_threshold": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 10),
Optional: true,
Default: 3,
DiffSuppressFunc: healthCheckDiffSuppressFunc,
},
"unhealthy_threshold": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 10),
Optional: true,
Default: 3,
DiffSuppressFunc: healthCheckDiffSuppressFunc,
},
"health_check_timeout": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 300),
Optional: true,
Default: 5,
DiffSuppressFunc: healthCheckDiffSuppressFunc,
},
"health_check_interval": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 50),
Optional: true,
Default: 2,
DiffSuppressFunc: healthCheckDiffSuppressFunc,
},
"health_check_http_code": {
Type: schema.TypeString,
ValidateFunc: validateAllowedSplitStringValue([]string{string(HTTP_2XX), string(HTTP_3XX), string(HTTP_4XX), string(HTTP_5XX)}, ","),
Optional: true,
Default: HTTP_2XX,
DiffSuppressFunc: httpHttpsTcpDiffSuppressFunc,
},
"ssl_certificate_id": {
Type: schema.TypeString,
Optional: true,
Computed: true,
DiffSuppressFunc: sslCertificateIdDiffSuppressFunc,
Deprecated: "Field 'ssl_certificate_id' has been deprecated from 1.59.0 and using 'server_certificate_id' instead.",
},
"server_certificate_id": {
Type: schema.TypeString,
Optional: true,
DiffSuppressFunc: sslCertificateIdDiffSuppressFunc,
},
"ca_certificate_id": {
Type: schema.TypeString,
Optional: true,
DiffSuppressFunc: sslCertificateIdDiffSuppressFunc,
},
"gzip": {
Type: schema.TypeBool,
Optional: true,
Default: true,
DiffSuppressFunc: httpHttpsDiffSuppressFunc,
},
"x_forwarded_for": {
Type: schema.TypeList,
Optional: true,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"retrive_client_ip": {
Type: schema.TypeBool,
Computed: true,
},
"retrive_slb_ip": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"retrive_slb_id": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"retrive_slb_proto": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
},
},
MaxItems: 1,
},
"established_timeout": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(10, 900),
Optional: true,
Default: 900,
DiffSuppressFunc: establishedTimeoutDiffSuppressFunc,
},
"enable_http2": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"on", "off"}, false),
Optional: true,
Default: OnFlag,
DiffSuppressFunc: httpsDiffSuppressFunc,
},
"tls_cipher_policy": {
Type: schema.TypeString,
Default: "tls_cipher_policy_1_0",
ValidateFunc: validation.StringInSlice([]string{"tls_cipher_policy_1_0", "tls_cipher_policy_1_1", "tls_cipher_policy_1_2", "tls_cipher_policy_1_2_strict"}, false),
Optional: true,
DiffSuppressFunc: httpsDiffSuppressFunc,
},
"forward_port": {
Type: schema.TypeInt,
ValidateFunc: validation.IntBetween(1, 65535),
Optional: true,
ForceNew: true,
DiffSuppressFunc: forwardPortDiffSuppressFunc,
},
"listener_forward": {
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"on", "off"}, false),
Optional: true,
ForceNew: true,
Computed: true,
DiffSuppressFunc: httpDiffSuppressFunc,
},
"delete_protection_validation": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"logs_download_attributes": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"log_project": {
Type: schema.TypeString,
Required: true,
},
"log_store": {
Type: schema.TypeString,
Required: true,
},
},
},
},
},
}
// XXX: 逻辑特殊,不建议合并
//setResourceFunc(resource, resourceAlibabacloudStackSlbListenerCreate, resourceAlibabacloudStackSlbListenerRead, resourceAlibabacloudStackSlbListenerUpdate, resourceAlibabacloudStackSlbListenerDelete)
//return resource
}