Skip to content

Commit e8530de

Browse files
authored
feat/waf (#2234)
* feat/waf * feat/waf * feat/waf
1 parent a81bc0a commit e8530de

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+3972
-657
lines changed

.changelog/2234.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_waf_clb_instance: support set `qps_limit`
3+
```
4+
5+
```release-note:enhancement
6+
resource/tencentcloud_waf_saas_instance: support set `qps_limit`
7+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ require (
9696
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
9797
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199
9898
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.755
99-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.759
99+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.770
100100
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.725
101101
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
102102
github.com/tencentyun/cos-go-sdk-v5 v0.7.42-0.20230629101357-7edd77448a0f

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,6 +986,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.755 h1:3u79chv
986986
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.755/go.mod h1:sOWUQj3GQHdkTqZc1b+mAFqWmhUv2Pg4EZoOjqDprzY=
987987
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.759 h1:elaQECRbdePWEJXh3EMRWUkd5GIu5C+u9HrQZRML/3A=
988988
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.759/go.mod h1:MDjcWvTd6A+6JFVbyw1jsLfq2tNDTkbiVKvgb7wb5uE=
989+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.770 h1:6CrSnLhg6rEO+4nmwD7fVixn5zzB4IeCO2TuzYyrkEU=
990+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.770/go.mod h1:XT2vvXZwjKyxaS2ahRs+Pxss5IbjKnqbqd/NE5B2XHw=
989991
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.725 h1:ETqP+erlPnDK1zafCmyDYNkZLcY+dAG3143Ihk5vFHk=
990992
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.725/go.mod h1:YPB08jHrJ3GJJ09ZTEBLnMvI+lqQEtu17jJjyfq8+sU=
991993
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199 h1:hMBLtiJPnZ9GvA677cTB6ELBR6B68wCR2QY1sNoGQc4=

tencentcloud/provider.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,7 +1842,7 @@ WeData
18421842
Resource
18431843
tencentcloud_wedata_rule_template
18441844
1845-
Waf
1845+
Web Application Firewall(WAF)
18461846
Data Source
18471847
tencentcloud_waf_ciphers
18481848
tencentcloud_waf_tls_versions
@@ -1867,7 +1867,7 @@ Waf
18671867
tencentcloud_waf_anti_fake
18681868
tencentcloud_waf_anti_info_leak
18691869
1870-
Cfw
1870+
Cloud Firewall(CFW)
18711871
Data Source
18721872
tencentcloud_cfw_nat_fw_switches
18731873
tencentcloud_cfw_vpc_fw_switches

tencentcloud/resource_tc_waf_clb_instance.go

Lines changed: 93 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,26 @@ Create a complete waf ultimate_clb instance
1818
1919
```hcl
2020
resource "tencentcloud_waf_clb_instance" "example" {
21-
goods_category = "ultimate_clb"
22-
instance_name = "tf-example-clb-waf"
23-
time_span = 1
24-
time_unit = "m"
25-
auto_renew_flag = 1
26-
elastic_mode = 1
21+
goods_category = "ultimate_clb"
22+
instance_name = "tf-example-clb-waf"
23+
time_span = 1
24+
time_unit = "m"
25+
auto_renew_flag = 1
26+
elastic_mode = 1
27+
}
28+
```
29+
30+
Set waf ultimate_clb instance qps limit
31+
32+
```hcl
33+
resource "tencentcloud_waf_clb_instance" "example" {
34+
goods_category = "ultimate_clb"
35+
instance_name = "tf-example-clb-waf"
36+
time_span = 1
37+
time_unit = "m"
38+
auto_renew_flag = 1
39+
elastic_mode = 1
40+
qps_limit = 200000
2741
}
2842
```
2943
*/
@@ -88,6 +102,13 @@ func resourceTencentCloudWafClbInstance() *schema.Resource {
88102
ValidateFunc: validateAllowedIntValue(ELASTIC_MODE),
89103
Description: "Is elastic billing enabled, 1: enable, 0: disable.",
90104
},
105+
"qps_limit": {
106+
Optional: true,
107+
Computed: true,
108+
Type: schema.TypeInt,
109+
ValidateFunc: validateIntegerMin(10000),
110+
Description: "QPS Limit, Minimum setting 10000. Only `elastic_mode` is 1, can be set.",
111+
},
91112
//"domain_pkg_count": {
92113
// Optional: true,
93114
// Type: schema.TypeInt,
@@ -304,6 +325,33 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter
304325
log.Printf("[CRITAL]%s update waf clb instance elastic mode failed, reason:%+v", logId, err)
305326
return err
306327
}
328+
329+
// set qpsLimit
330+
if v, ok = d.GetOkExists("qps_limit"); ok {
331+
qpsLimit := v.(int)
332+
modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest()
333+
modifyInstanceQpsLimitRequest.InstanceId = &instanceId
334+
modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit)
335+
err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
336+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest)
337+
if e != nil {
338+
return retryError(e)
339+
} else {
340+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString())
341+
}
342+
343+
return nil
344+
})
345+
346+
if err != nil {
347+
log.Printf("[CRITAL]%s update waf clb instance qpsLimit failed, reason:%+v", logId, err)
348+
return err
349+
}
350+
}
351+
} else {
352+
if _, ok = d.GetOkExists("qps_limit"); ok {
353+
return fmt.Errorf("If `elastic_mode` is 0, not support set `qps_limit`.")
354+
}
307355
}
308356
}
309357

@@ -348,6 +396,10 @@ func resourceTencentCloudWafClbInstanceRead(d *schema.ResourceData, meta interfa
348396
_ = d.Set("elastic_mode", instanceInfo.Mode)
349397
}
350398

399+
if instanceInfo.ElasticBilling != nil {
400+
_ = d.Set("qps_limit", instanceInfo.ElasticBilling)
401+
}
402+
351403
//if instanceInfo.DomainPkg != nil {
352404
// _ = d.Set("domain_pkg_count", instanceInfo.DomainPkg.Count)
353405
//}
@@ -390,6 +442,7 @@ func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta inter
390442
modifyInstanceRenewFlagRequest = waf.NewModifyInstanceRenewFlagRequest()
391443
newSwitchElasticModeRequest = waf.NewSwitchElasticModeRequest()
392444
instanceId = d.Id()
445+
elasticMode int
393446
)
394447

395448
immutableArgs := []string{"goods_category", "time_span", "time_unit", "domain_pkg_count", "qps_pkg_count"}
@@ -468,6 +521,40 @@ func resourceTencentCloudWafClbInstanceUpdate(d *schema.ResourceData, meta inter
468521
}
469522
}
470523

524+
if v, ok := d.GetOkExists("elastic_mode"); ok {
525+
elasticMode = v.(int)
526+
}
527+
528+
if elasticMode == ELASTIC_MODE_1 {
529+
if d.HasChange("qps_limit") {
530+
if v, ok := d.GetOkExists("qps_limit"); ok {
531+
qpsLimit := v.(int)
532+
modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest()
533+
modifyInstanceQpsLimitRequest.InstanceId = &instanceId
534+
modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit)
535+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
536+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest)
537+
if e != nil {
538+
return retryError(e)
539+
} else {
540+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString())
541+
}
542+
543+
return nil
544+
})
545+
546+
if err != nil {
547+
log.Printf("[CRITAL]%s update waf clb instance qpsLimit failed, reason:%+v", logId, err)
548+
return err
549+
}
550+
}
551+
}
552+
} else {
553+
if _, ok := d.GetOkExists("qps_limit"); ok {
554+
return fmt.Errorf("If `elastic_mode` is 0, not support set `qps_limit`.")
555+
}
556+
}
557+
471558
return resourceTencentCloudWafClbInstanceRead(d, meta)
472559
}
473560

tencentcloud/resource_tc_waf_saas_instance.go

Lines changed: 97 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,37 @@ Create a basic waf premium saas instance
99
1010
```hcl
1111
resource "tencentcloud_waf_saas_instance" "example" {
12-
goods_category = "premium_saas"
13-
instance_name = "tf-example-saas-waf"
12+
goods_category = "premium_saas"
13+
instance_name = "tf-example-saas-waf"
1414
}
1515
```
1616
1717
Create a complete waf ultimate_saas instance
1818
1919
```hcl
2020
resource "tencentcloud_waf_saas_instance" "example" {
21-
goods_category = "ultimate_saas"
22-
instance_name = "tf-example-saas-waf"
23-
time_span = 1
24-
time_unit = "m"
25-
auto_renew_flag = 1
26-
elastic_mode = 1
27-
real_region = "gz"
21+
goods_category = "ultimate_saas"
22+
instance_name = "tf-example-saas-waf"
23+
time_span = 1
24+
time_unit = "m"
25+
auto_renew_flag = 1
26+
elastic_mode = 1
27+
real_region = "gz"
28+
}
29+
```
30+
31+
Set waf ultimate_saas instance qps limit
32+
33+
```hcl
34+
resource "tencentcloud_waf_saas_instance" "example" {
35+
goods_category = "ultimate_saas"
36+
instance_name = "tf-example-saas-waf"
37+
time_span = 1
38+
time_unit = "m"
39+
auto_renew_flag = 1
40+
elastic_mode = 1
41+
real_region = "gz"
42+
qps_limit = 200000
2843
}
2944
```
3045
*/
@@ -89,6 +104,13 @@ func resourceTencentCloudWafSaasInstance() *schema.Resource {
89104
ValidateFunc: validateAllowedIntValue(ELASTIC_MODE),
90105
Description: "Is elastic billing enabled, 1: enable, 0: disable.",
91106
},
107+
"qps_limit": {
108+
Optional: true,
109+
Computed: true,
110+
Type: schema.TypeInt,
111+
ValidateFunc: validateIntegerMin(10000),
112+
Description: "QPS Limit, Minimum setting 10000. Only `elastic_mode` is 1, can be set.",
113+
},
92114
"real_region": {
93115
Optional: true,
94116
Type: schema.TypeString,
@@ -338,6 +360,33 @@ func resourceTencentCloudWafSaasInstanceCreate(d *schema.ResourceData, meta inte
338360
log.Printf("[CRITAL]%s update waf saas instance elastic mode failed, reason:%+v", logId, err)
339361
return err
340362
}
363+
364+
// set qpsLimit
365+
if v, ok = d.GetOkExists("qps_limit"); ok {
366+
qpsLimit := v.(int)
367+
modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest()
368+
modifyInstanceQpsLimitRequest.InstanceId = &instanceId
369+
modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit)
370+
err = resource.Retry(writeRetryTimeout, func() *resource.RetryError {
371+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest)
372+
if e != nil {
373+
return retryError(e)
374+
} else {
375+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString())
376+
}
377+
378+
return nil
379+
})
380+
381+
if err != nil {
382+
log.Printf("[CRITAL]%s update waf clb instance qpsLimit failed, reason:%+v", logId, err)
383+
return err
384+
}
385+
}
386+
} else {
387+
if _, ok = d.GetOkExists("qps_limit"); ok {
388+
return fmt.Errorf("If `elastic_mode` is 0, not support set `qps_limit`.")
389+
}
341390
}
342391
}
343392

@@ -382,6 +431,10 @@ func resourceTencentCloudWafSaasInstanceRead(d *schema.ResourceData, meta interf
382431
_ = d.Set("elastic_mode", instanceInfo.Mode)
383432
}
384433

434+
if instanceInfo.ElasticBilling != nil {
435+
_ = d.Set("qps_limit", instanceInfo.ElasticBilling)
436+
}
437+
385438
if instanceInfo.Region != nil {
386439
_ = d.Set("real_region", instanceInfo.Region)
387440
}
@@ -428,6 +481,7 @@ func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta inte
428481
modifyInstanceRenewFlagRequest = waf.NewModifyInstanceRenewFlagRequest()
429482
newSwitchElasticModeRequest = waf.NewSwitchElasticModeRequest()
430483
instanceId = d.Id()
484+
elasticMode int
431485
)
432486

433487
immutableArgs := []string{"goods_category", "time_span", "time_unit", "domain_pkg_count", "qps_pkg_count"}
@@ -506,6 +560,40 @@ func resourceTencentCloudWafSaasInstanceUpdate(d *schema.ResourceData, meta inte
506560
}
507561
}
508562

563+
if v, ok := d.GetOkExists("elastic_mode"); ok {
564+
elasticMode = v.(int)
565+
}
566+
567+
if elasticMode == ELASTIC_MODE_1 {
568+
if d.HasChange("qps_limit") {
569+
if v, ok := d.GetOkExists("qps_limit"); ok {
570+
qpsLimit := v.(int)
571+
modifyInstanceQpsLimitRequest := waf.NewModifyInstanceQpsLimitRequest()
572+
modifyInstanceQpsLimitRequest.InstanceId = &instanceId
573+
modifyInstanceQpsLimitRequest.QpsLimit = helper.IntInt64(qpsLimit)
574+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
575+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseWafClient().ModifyInstanceQpsLimit(modifyInstanceQpsLimitRequest)
576+
if e != nil {
577+
return retryError(e)
578+
} else {
579+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, modifyInstanceQpsLimitRequest.GetAction(), modifyInstanceQpsLimitRequest.ToJsonString(), result.ToJsonString())
580+
}
581+
582+
return nil
583+
})
584+
585+
if err != nil {
586+
log.Printf("[CRITAL]%s update waf clb instance qpsLimit failed, reason:%+v", logId, err)
587+
return err
588+
}
589+
}
590+
}
591+
} else {
592+
if _, ok := d.GetOkExists("qps_limit"); ok {
593+
return fmt.Errorf("If `elastic_mode` is 0, not support set `qps_limit`.")
594+
}
595+
}
596+
509597
return resourceTencentCloudWafSaasInstanceRead(d, meta)
510598
}
511599

0 commit comments

Comments
 (0)