Skip to content

Commit 9cc650e

Browse files
authored
feat(waf): [123540800] add new resource (#3354)
* add * add * add
1 parent f937a34 commit 9cc650e

21 files changed

+810
-9
lines changed

.changelog/3354.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:new-resource
2+
tencentcloud_waf_domain_post_action
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_waf_instance_attack_log_post
7+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ require (
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1148
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1162
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1153
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161
@@ -97,7 +97,7 @@ require (
9797
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
9898
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
9999
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1154
100-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1149
100+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1162
101101
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
102102
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
103103
github.com/tencentyun/cos-go-sdk-v5 v0.7.64

go.sum

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1159 h1:Jl1
971971
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1159/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
972972
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161 h1:S4dJSWhOtaPjp0/GO/yhzUC6DfZvpWhrnsEKaLxr73c=
973973
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
974+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1162 h1:bscCBygP9JRl6iNabF+vmBOhY+xayFFGYV5Wa0NzH0A=
975+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1162/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
974976
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
975977
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
976978
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -1119,6 +1121,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1148 h1:ILcBbO
11191121
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1148/go.mod h1:1n+Jj71KPI+7oeySg5l9+JopaMgsIqA0y9ATSi4nx0k=
11201122
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1149 h1:SOrBtPoCjS8Jsq1dHa2Ul+ZUPP/vT6j/dJN/08ZEMHM=
11211123
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1149/go.mod h1:6e3sb0k9K8kWQdB/WVXVrZxyYxrSC8hN4MWpzYRR80s=
1124+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1161 h1:7eXR3p6ZmggYE7GIvN/FbIg1ESh+LxJWbb0LV4oapnQ=
1125+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1161/go.mod h1:v3l7e0+48bKOFo8V/KLLDtegi0H7zLDqGKLMdqNPblI=
1126+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1162 h1:gnmuUaoFAShc9FKj3Omswu3n08bHM/sGsl8xjFAkFNs=
1127+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1162/go.mod h1:bu3KAFeoJ1xDGQp72h9Le3FqbOcCcdomOUig3OqgcE4=
11221128
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=
11231129
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792/go.mod h1:Xz6vPV3gHlzPwtEcmWdWO1EUXJDgn2p7UMCXbJiVioQ=
11241130
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199 h1:hMBLtiJPnZ9GvA677cTB6ELBR6B68wCR2QY1sNoGQc4=

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2238,6 +2238,8 @@ func Provider() *schema.Provider {
22382238
"tencentcloud_waf_ip_access_control_v2": waf.ResourceTencentCloudWafIpAccessControlV2(),
22392239
"tencentcloud_waf_log_post_cls_flow": waf.ResourceTencentCloudWafLogPostClsFlow(),
22402240
"tencentcloud_waf_log_post_ckafka_flow": waf.ResourceTencentCloudWafLogPostCkafkaFlow(),
2241+
"tencentcloud_waf_domain_post_action": waf.ResourceTencentCloudWafDomainPostAction(),
2242+
"tencentcloud_waf_instance_attack_log_post": waf.ResourceTencentCloudWafInstanceAttackLogPost(),
22412243
"tencentcloud_wedata_rule_template": wedata.ResourceTencentCloudWedataRuleTemplate(),
22422244
"tencentcloud_wedata_datasource": wedata.ResourceTencentCloudWedataDatasource(),
22432245
"tencentcloud_wedata_function": wedata.ResourceTencentCloudWedataFunction(),

tencentcloud/provider.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,6 +2183,8 @@ tencentcloud_waf_ip_access_control
21832183
tencentcloud_waf_ip_access_control_v2
21842184
tencentcloud_waf_log_post_cls_flow
21852185
tencentcloud_waf_log_post_ckafka_flow
2186+
tencentcloud_waf_domain_post_action
2187+
tencentcloud_waf_instance_attack_log_post
21862188

21872189
Wedata
21882190
Data Source

tencentcloud/services/waf/resource_tc_waf_clb_instance.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,10 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter
313313
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
314314
}
315315

316+
if result == nil || result.Response == nil {
317+
return resource.NonRetryableError(fmt.Errorf("Create waf clb instance failed, Response is nil."))
318+
}
319+
316320
if *result.Response.Status == 0 || *result.Response.InstanceId == "" {
317321
return resource.NonRetryableError(fmt.Errorf("create waf clb instance status error: %s", *result.Response.ReturnMessage))
318322
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
package waf
2+
3+
import (
4+
"context"
5+
"log"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
9+
wafv20180125 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125"
10+
11+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
12+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
13+
)
14+
15+
func ResourceTencentCloudWafDomainPostAction() *schema.Resource {
16+
return &schema.Resource{
17+
Create: resourceTencentCloudWafDomainPostActionCreate,
18+
Read: resourceTencentCloudWafDomainPostActionRead,
19+
Update: resourceTencentCloudWafDomainPostActionUpdate,
20+
Delete: resourceTencentCloudWafDomainPostActionDelete,
21+
Importer: &schema.ResourceImporter{
22+
State: schema.ImportStatePassthrough,
23+
},
24+
Schema: map[string]*schema.Schema{
25+
"domain": {
26+
Type: schema.TypeString,
27+
Required: true,
28+
ForceNew: true,
29+
Description: "Domain.",
30+
},
31+
32+
"post_cls_action": {
33+
Type: schema.TypeInt,
34+
Required: true,
35+
ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}),
36+
Description: "0- Disable shipping, 1- Enable shipping.",
37+
},
38+
39+
"post_ckafka_action": {
40+
Type: schema.TypeInt,
41+
Required: true,
42+
ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}),
43+
Description: "0- Disable shipping, 1- Enable shipping.",
44+
},
45+
},
46+
}
47+
}
48+
49+
func resourceTencentCloudWafDomainPostActionCreate(d *schema.ResourceData, meta interface{}) error {
50+
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.create")()
51+
defer tccommon.InconsistentCheck(d, meta)()
52+
53+
var domain string
54+
if v, ok := d.GetOk("domain"); ok {
55+
domain = v.(string)
56+
}
57+
58+
d.SetId(domain)
59+
60+
return resourceTencentCloudWafDomainPostActionUpdate(d, meta)
61+
}
62+
63+
func resourceTencentCloudWafDomainPostActionRead(d *schema.ResourceData, meta interface{}) error {
64+
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.read")()
65+
defer tccommon.InconsistentCheck(d, meta)()
66+
67+
var (
68+
logId = tccommon.GetLogId(tccommon.ContextNil)
69+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
70+
service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
71+
domain = d.Id()
72+
)
73+
74+
respData, err := service.DescribeWafDomainPostActionById(ctx, domain)
75+
if err != nil {
76+
return err
77+
}
78+
79+
if respData == nil || len(respData) < 1 {
80+
d.SetId("")
81+
log.Printf("[WARN]%s resource `waf_domain_post_action` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
82+
return nil
83+
}
84+
85+
_ = d.Set("domain", domain)
86+
87+
for _, item := range respData {
88+
if item.PostCLSStatus != nil {
89+
_ = d.Set("post_cls_action", item.PostCLSStatus)
90+
}
91+
92+
if item.PostCKafkaStatus != nil {
93+
_ = d.Set("post_ckafka_action", item.PostCKafkaStatus)
94+
}
95+
}
96+
97+
return nil
98+
}
99+
100+
func resourceTencentCloudWafDomainPostActionUpdate(d *schema.ResourceData, meta interface{}) error {
101+
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.update")()
102+
defer tccommon.InconsistentCheck(d, meta)()
103+
104+
var (
105+
logId = tccommon.GetLogId(tccommon.ContextNil)
106+
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
107+
request = wafv20180125.NewModifyDomainPostActionRequest()
108+
domain = d.Id()
109+
)
110+
111+
if v, ok := d.GetOkExists("post_cls_action"); ok {
112+
request.PostCLSAction = helper.IntInt64(v.(int))
113+
}
114+
115+
if v, ok := d.GetOkExists("post_ckafka_action"); ok {
116+
request.PostCKafkaAction = helper.IntInt64(v.(int))
117+
}
118+
119+
request.Domain = &domain
120+
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
121+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafV20180125Client().ModifyDomainPostActionWithContext(ctx, request)
122+
if e != nil {
123+
return tccommon.RetryError(e)
124+
} else {
125+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
126+
}
127+
128+
return nil
129+
})
130+
131+
if reqErr != nil {
132+
log.Printf("[CRITAL]%s update waf domain post action failed, reason:%+v", logId, reqErr)
133+
return reqErr
134+
}
135+
136+
return resourceTencentCloudWafDomainPostActionRead(d, meta)
137+
}
138+
139+
func resourceTencentCloudWafDomainPostActionDelete(d *schema.ResourceData, meta interface{}) error {
140+
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.delete")()
141+
defer tccommon.InconsistentCheck(d, meta)()
142+
143+
return nil
144+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Provides a resource to create a WAF domain post action
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_waf_domain_post_action" "example" {
7+
domain = "example.com"
8+
post_cls_action = 1
9+
post_ckafka_action = 0
10+
}
11+
```
12+
13+
Import
14+
15+
WAF domain post action can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_waf_domain_post_action.example example.com
19+
```
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package waf_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
8+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
9+
)
10+
11+
func TestAccTencentCloudWafDomainPostActionResource_basic(t *testing.T) {
12+
t.Parallel()
13+
resource.Test(t, resource.TestCase{
14+
PreCheck: func() {
15+
tcacctest.AccPreCheck(t)
16+
},
17+
Providers: tcacctest.AccProviders,
18+
Steps: []resource.TestStep{
19+
{
20+
Config: testAccWafDomainPostAction,
21+
Check: resource.ComposeTestCheckFunc(
22+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "id"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "domain"),
24+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_cls_action"),
25+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_ckafka_action"),
26+
),
27+
},
28+
{
29+
Config: testAccWafDomainPostActionUpdate,
30+
Check: resource.ComposeTestCheckFunc(
31+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "id"),
32+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "domain"),
33+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_cls_action"),
34+
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_ckafka_action"),
35+
),
36+
},
37+
{
38+
ResourceName: "tencentcloud_waf_domain_post_action.example",
39+
ImportState: true,
40+
ImportStateVerify: true,
41+
},
42+
},
43+
})
44+
}
45+
46+
const testAccWafDomainPostAction = `
47+
resource "tencentcloud_waf_domain_post_action" "example" {
48+
domain = "example.com"
49+
post_cls_action = 1
50+
post_ckafka_action = 0
51+
}
52+
`
53+
54+
const testAccWafDomainPostActionUpdate = `
55+
resource "tencentcloud_waf_domain_post_action" "example" {
56+
domain = "example.com"
57+
post_cls_action = 0
58+
post_ckafka_action = 1
59+
}
60+
`

0 commit comments

Comments
 (0)