Skip to content

Commit a180ca5

Browse files
authored
fix(clb): [121638233] tencentcloud_clb_listener support snat_enable (#3076)
* add * add
1 parent 902b9cf commit a180ca5

File tree

4 files changed

+47
-17
lines changed

4 files changed

+47
-17
lines changed

.changelog/3076.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_clb_listener: support `snat_enable`
3+
```

tencentcloud/services/clb/resource_tc_clb_listener.go

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,12 @@ func ResourceTencentCloudClbListener() *schema.Resource {
249249
Optional: true,
250250
Description: "Enable H2C switch for intranet HTTP listener.",
251251
},
252+
"snat_enable": {
253+
Type: schema.TypeBool,
254+
Computed: true,
255+
Optional: true,
256+
Description: "Whether to enable SNAT.",
257+
},
252258
//computed
253259
"listener_id": {
254260
Type: schema.TypeString,
@@ -361,6 +367,10 @@ func resourceTencentCloudClbListenerCreate(d *schema.ResourceData, meta interfac
361367
request.H2cSwitch = helper.Bool(v.(bool))
362368
}
363369

370+
if v, ok := d.GetOkExists("snat_enable"); ok {
371+
request.SnatEnable = helper.Bool(v.(bool))
372+
}
373+
364374
var response *clb.CreateListenerResponse
365375
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
366376
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().CreateListener(request)
@@ -369,20 +379,26 @@ func resourceTencentCloudClbListenerCreate(d *schema.ResourceData, meta interfac
369379
} else {
370380
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
371381
logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
382+
383+
if result == nil || result.Response == nil || result.Response.RequestId == nil {
384+
return resource.NonRetryableError(fmt.Errorf("Create CLB listener failed, Response si nil."))
385+
}
386+
372387
requestId := *result.Response.RequestId
373388
retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient())
374389
if retryErr != nil {
375390
return resource.NonRetryableError(errors.WithStack(retryErr))
376391
}
377392
}
393+
378394
response = result
379395
return nil
380396
})
381397
if err != nil {
382398
log.Printf("[CRITAL]%s create CLB listener failed, reason:%+v", logId, err)
383399
return err
384400
}
385-
if len(response.Response.ListenerIds) < 1 {
401+
if response.Response.ListenerIds == nil || len(response.Response.ListenerIds) < 1 {
386402
return fmt.Errorf("[CHECK][CLB listener][Create] check: Response error, listener id is null")
387403
}
388404
listenerId := *response.Response.ListenerIds[0]
@@ -529,26 +545,21 @@ func resourceTencentCloudClbListenerRead(d *schema.ResourceData, meta interface{
529545
_ = d.Set("end_port", instance.EndPort)
530546
}
531547

532-
var clbIns *clb.LoadBalancer
533-
err = resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
534-
result, e := clbService.DescribeLoadBalancerById(ctx, clbId)
535-
if e != nil {
536-
return tccommon.RetryError(e)
548+
if instance.AttrFlags != nil && len(instance.AttrFlags) > 0 {
549+
if tccommon.IsContains(helper.PStrings(instance.AttrFlags), "H2cSwitch") {
550+
_ = d.Set("h2c_switch", true)
551+
} else {
552+
_ = d.Set("h2c_switch", false)
537553
}
538554

539-
clbIns = result
540-
return nil
541-
})
542-
543-
if err != nil {
544-
log.Printf("[CRITAL]%s read CLB instance failed, reason:%+v", logId, err)
545-
return err
546-
}
547-
548-
if clbIns.AttributeFlags != nil && len(clbIns.AttributeFlags) != 0 {
549-
_ = d.Set("h2c_switch", true)
555+
if tccommon.IsContains(helper.PStrings(instance.AttrFlags), "SnatEnable") {
556+
_ = d.Set("snat_enable", true)
557+
} else {
558+
_ = d.Set("snat_enable", false)
559+
}
550560
} else {
551561
_ = d.Set("h2c_switch", false)
562+
_ = d.Set("snat_enable", false)
552563
}
553564

554565
return nil
@@ -644,6 +655,13 @@ func resourceTencentCloudClbListenerUpdate(d *schema.ResourceData, meta interfac
644655
request.KeepaliveEnable = helper.IntInt64(keepaliveEnable)
645656
}
646657

658+
if d.HasChange("snat_enable") {
659+
changed = true
660+
if v, ok := d.GetOkExists("snat_enable"); ok {
661+
request.SnatEnable = helper.Bool(v.(bool))
662+
}
663+
}
664+
647665
if changed {
648666
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
649667
response, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient().ModifyListener(request)
@@ -652,6 +670,11 @@ func resourceTencentCloudClbListenerUpdate(d *schema.ResourceData, meta interfac
652670
} else {
653671
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n",
654672
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
673+
674+
if response == nil || response.Response == nil || response.Response.RequestId == nil {
675+
return resource.NonRetryableError(fmt.Errorf("Modify CLB listener failed, Response si nil."))
676+
}
677+
655678
requestId := *response.Response.RequestId
656679
retryErr := waitForTaskFinish(requestId, meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseClbClient())
657680
if retryErr != nil {

tencentcloud/services/clb/resource_tc_clb_listener.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ resource "tencentcloud_clb_listener" "TCP_listener" {
3737
```
3838

3939
TCP/UDP Listener with tcp health check
40+
4041
```hcl
4142
resource "tencentcloud_clb_listener" "listener_tcp" {
4243
clb_id = tencentcloud_clb_instance.clb_basic.id
@@ -56,6 +57,7 @@ resource "tencentcloud_clb_listener" "listener_tcp" {
5657
```
5758

5859
TCP/UDP Listener with http health check
60+
5961
```hcl
6062
resource "tencentcloud_clb_listener" "listener_tcp" {
6163
clb_id = tencentcloud_clb_instance.clb_basic.id
@@ -79,6 +81,7 @@ resource "tencentcloud_clb_listener" "listener_tcp" {
7981
```
8082

8183
TCP/UDP Listener with customer health check
84+
8285
```hcl
8386
resource "tencentcloud_clb_listener" "listener_tcp"{
8487
clb_id = tencentcloud_clb_instance.clb_basic.id

website/docs/r/clb_listener.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,7 @@ The following arguments are supported:
203203
* `scheduler` - (Optional, String) Scheduling method of the CLB listener, and available values are 'WRR' and 'LEAST_CONN'. The default is 'WRR'. NOTES: The listener of `HTTP` and `HTTPS` protocol additionally supports the `IP Hash` method. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.
204204
* `session_expire_time` - (Optional, Int) Time of session persistence within the CLB listener. NOTES: Available when scheduler is specified as `WRR`, and not available when listener protocol is `TCP_SSL`. NOTES: TCP/UDP/TCP_SSL listener allows direct configuration, HTTP/HTTPS listener needs to be configured in `tencentcloud_clb_listener_rule`.
205205
* `session_type` - (Optional, String) Session persistence type. Valid values: `NORMAL`: the default session persistence type; `QUIC_CID`: session persistence by QUIC connection ID. The `QUIC_CID` value can only be configured in UDP listeners. If this field is not specified, the default session persistence type will be used.
206+
* `snat_enable` - (Optional, Bool) Whether to enable SNAT.
206207
* `sni_switch` - (Optional, Bool, ForceNew) Indicates whether SNI is enabled, and only supported with protocol `HTTPS`. If enabled, you can set a certificate for each rule in `tencentcloud_clb_listener_rule`, otherwise all rules have a certificate.
207208
* `target_type` - (Optional, String) Backend target type. Valid values: `NODE`, `TARGETGROUP`. `NODE` means to bind ordinary nodes, `TARGETGROUP` means to bind target group. NOTES: TCP/UDP/TCP_SSL listener must configuration, HTTP/HTTPS listener needs to be configured in tencentcloud_clb_listener_rule.
208209

0 commit comments

Comments
 (0)