Skip to content

Commit c443e9e

Browse files
authored
fix(waf): [124136071] tencentcloud_waf_cc support limit_method (#3366)
* add * add
1 parent 8683213 commit c443e9e

File tree

5 files changed

+59
-25
lines changed

5 files changed

+59
-25
lines changed

.changelog/3366.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_waf_cc: support `limit_method`
3+
```

tencentcloud/services/waf/resource_tc_waf_cc.go

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ func ResourceTencentCloudWafCc() *schema.Resource {
114114
Elem: &schema.Schema{Type: schema.TypeInt},
115115
Description: "Session ID that needs to be enabled for the rule.",
116116
},
117+
"limit_method": {
118+
Optional: true,
119+
Type: schema.TypeString,
120+
Description: "Frequency limiting method.",
121+
},
117122
"rule_id": {
118123
Computed: true,
119124
Type: schema.TypeString,
@@ -201,11 +206,17 @@ func resourceTencentCloudWafCcCreate(d *schema.ResourceData, meta interface{}) e
201206
if v, ok := d.GetOk("session_applied"); ok {
202207
sessionAppliedSet := v.(*schema.Set).List()
203208
for i := range sessionAppliedSet {
204-
sessionApplied := sessionAppliedSet[i].(int)
205-
request.SessionApplied = append(request.SessionApplied, helper.IntInt64(sessionApplied))
209+
if sessionAppliedSet[i] != nil {
210+
sessionApplied := sessionAppliedSet[i].(int)
211+
request.SessionApplied = append(request.SessionApplied, helper.IntInt64(sessionApplied))
212+
}
206213
}
207214
}
208215

216+
if v, ok := d.GetOk("limit_method"); ok {
217+
request.LimitMethod = helper.String(v.(string))
218+
}
219+
209220
request.RuleId = helper.IntInt64(0)
210221
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
211222
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertCCRule(request)
@@ -215,9 +226,8 @@ func resourceTencentCloudWafCcCreate(d *schema.ResourceData, meta interface{}) e
215226
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
216227
}
217228

218-
if result == nil || result.Response.RuleId == nil {
219-
e = fmt.Errorf("waf cc failed not exists")
220-
return resource.NonRetryableError(e)
229+
if result == nil || result.Response == nil || result.Response.RuleId == nil {
230+
return resource.NonRetryableError(fmt.Errorf("Create waf cc failed, Response is nil."))
221231
}
222232

223233
response = result
@@ -313,14 +323,6 @@ func resourceTencentCloudWafCcRead(d *schema.ResourceData, meta interface{}) err
313323
if cc.Options != nil {
314324
_ = d.Set("options_arr", cc.Options)
315325
}
316-
//
317-
//if cc.Edition != nil {
318-
// _ = d.Set("edition", cc.Edition)
319-
//}
320-
//
321-
//if cc.Type != nil {
322-
// _ = d.Set("type", cc.Type)
323-
//}
324326

325327
if cc.EventId != nil {
326328
_ = d.Set("event_id", cc.EventId)
@@ -330,6 +332,10 @@ func resourceTencentCloudWafCcRead(d *schema.ResourceData, meta interface{}) err
330332
_ = d.Set("session_applied", cc.SessionApplied)
331333
}
332334

335+
if cc.LimitMethod != nil {
336+
_ = d.Set("limit_method", cc.LimitMethod)
337+
}
338+
333339
if cc.RuleId != nil {
334340
ruleIdStr := strconv.FormatUint(*cc.RuleId, 10)
335341
_ = d.Set("rule_id", ruleIdStr)
@@ -428,6 +434,10 @@ func resourceTencentCloudWafCcUpdate(d *schema.ResourceData, meta interface{}) e
428434
}
429435
}
430436

437+
if v, ok := d.GetOk("limit_method"); ok {
438+
request.LimitMethod = helper.String(v.(string))
439+
}
440+
431441
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
432442
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafClient().UpsertCCRule(request)
433443
if e != nil {

tencentcloud/services/waf/resource_tc_waf_cc.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
Provides a resource to create a waf cc
1+
Provides a resource to create a WAF cc
22

33
Example Usage
44

tencentcloud/services/waf/service_tencentcloud_waf.go

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1259,6 +1259,7 @@ func (me *WafService) DescribeWafCcById(ctx context.Context, domain, ruleId stri
12591259
logId := tccommon.GetLogId(ctx)
12601260

12611261
request := waf.NewDescribeCCRuleListRequest()
1262+
response := waf.NewDescribeCCRuleListResponse()
12621263
request.Domain = &domain
12631264
request.Filters = []*waf.FiltersItemNew{
12641265
{
@@ -1277,17 +1278,29 @@ func (me *WafService) DescribeWafCcById(ctx context.Context, domain, ruleId stri
12771278
}
12781279
}()
12791280

1280-
ratelimit.Check(request.GetAction())
1281+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
1282+
ratelimit.Check(request.GetAction())
1283+
result, e := me.client.UseWafClient().DescribeCCRuleList(request)
1284+
if e != nil {
1285+
return tccommon.RetryError(e)
1286+
} else {
1287+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
1288+
}
1289+
1290+
if result == nil || result.Response == nil || result.Response.Data == nil {
1291+
return resource.NonRetryableError(fmt.Errorf("Response is nil."))
1292+
}
1293+
1294+
response = result
1295+
return nil
1296+
})
12811297

1282-
response, err := me.client.UseWafClient().DescribeCCRuleList(request)
12831298
if err != nil {
12841299
errRet = err
12851300
return
12861301
}
12871302

1288-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1289-
1290-
if response == nil || len(response.Response.Data.Res) != 1 {
1303+
if len(response.Response.Data.Res) != 1 {
12911304
return
12921305
}
12931306

@@ -1310,16 +1323,23 @@ func (me *WafService) DeleteWafCcById(ctx context.Context, domain, ruleId, name
13101323
}
13111324
}()
13121325

1313-
ratelimit.Check(request.GetAction())
1326+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
1327+
ratelimit.Check(request.GetAction())
1328+
result, e := me.client.UseWafClient().DeleteCCRule(request)
1329+
if e != nil {
1330+
return tccommon.RetryError(e)
1331+
} else {
1332+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
1333+
}
1334+
1335+
return nil
1336+
})
13141337

1315-
response, err := me.client.UseWafClient().DeleteCCRule(request)
13161338
if err != nil {
13171339
errRet = err
13181340
return
13191341
}
13201342

1321-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1322-
13231343
return
13241344
}
13251345

website/docs/r/waf_cc.html.markdown

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ layout: "tencentcloud"
44
page_title: "TencentCloud: tencentcloud_waf_cc"
55
sidebar_current: "docs-tencentcloud-resource-waf_cc"
66
description: |-
7-
Provides a resource to create a waf cc
7+
Provides a resource to create a WAF cc
88
---
99

1010
# tencentcloud_waf_cc
1111

12-
Provides a resource to create a waf cc
12+
Provides a resource to create a WAF cc
1313

1414
## Example Usage
1515

@@ -58,6 +58,7 @@ The following arguments are supported:
5858
* `url` - (Required, String) Detection URL.
5959
* `valid_time` - (Required, Int) Action ValidTime, minute unit. Min: 60, Max: 604800.
6060
* `event_id` - (Optional, String) Event ID.
61+
* `limit_method` - (Optional, String) Frequency limiting method.
6162
* `options_arr` - (Optional, String) JSON serialized string of CC matching conditions, example:[{\"key\":\"Method\",\"args\":[\"=R0VU\"],\"match\":\"0\",\"encodeflag\":true}]
6263
Key optional values are Method, Post, Referer, Cookie, User-Agent, CustomHeader
6364
Match optional values are, when Key is Method, optional values are 0 (equal), 3 (not equal).

0 commit comments

Comments
 (0)