Skip to content

Commit 8244dd3

Browse files
committed
add
1 parent f937a34 commit 8244dd3

8 files changed

+337
-0
lines changed

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2238,6 +2238,7 @@ 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(),
22412242
"tencentcloud_wedata_rule_template": wedata.ResourceTencentCloudWedataRuleTemplate(),
22422243
"tencentcloud_wedata_datasource": wedata.ResourceTencentCloudWedataDatasource(),
22432244
"tencentcloud_wedata_function": wedata.ResourceTencentCloudWedataFunction(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2183,6 +2183,7 @@ 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
21862187

21872188
Wedata
21882189
Data Source
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 {
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+
`

tencentcloud/services/waf/service_tencentcloud_waf.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1582,3 +1582,65 @@ func (me *WafService) DescribeWafLogPostCkafkaFlowById(ctx context.Context, logT
15821582
ret = response.Response
15831583
return
15841584
}
1585+
1586+
func (me *WafService) DescribeWafDomainPostActionById(ctx context.Context, domain string) (domains []*waf.DomainInfo, errRet error) {
1587+
logId := tccommon.GetLogId(ctx)
1588+
1589+
request := waf.NewDescribeDomainsRequest()
1590+
response := waf.NewDescribeDomainsResponse()
1591+
tmpFilter := []*waf.FiltersItemNew{}
1592+
if domain != "" {
1593+
tmpFilter = append(tmpFilter, &waf.FiltersItemNew{
1594+
Name: common.StringPtr("Domain"),
1595+
Values: common.StringPtrs([]string{domain}),
1596+
ExactMatch: common.BoolPtr(true),
1597+
})
1598+
}
1599+
1600+
request.Filters = tmpFilter
1601+
1602+
defer func() {
1603+
if errRet != nil {
1604+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1605+
}
1606+
}()
1607+
1608+
var (
1609+
offset uint64 = 0
1610+
limit uint64 = 20
1611+
)
1612+
for {
1613+
request.Offset = &offset
1614+
request.Limit = &limit
1615+
err := resource.Retry(tccommon.ReadRetryTimeout, func() *resource.RetryError {
1616+
ratelimit.Check(request.GetAction())
1617+
result, e := me.client.UseWafV20180125Client().DescribeDomains(request)
1618+
if e != nil {
1619+
return tccommon.RetryError(e)
1620+
} else {
1621+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
1622+
}
1623+
1624+
response = result
1625+
return nil
1626+
})
1627+
1628+
if err != nil {
1629+
errRet = err
1630+
return
1631+
}
1632+
1633+
if response == nil || len(response.Response.Domains) < 1 {
1634+
break
1635+
}
1636+
1637+
domains = append(domains, response.Response.Domains...)
1638+
if len(response.Response.Domains) < int(limit) {
1639+
break
1640+
}
1641+
1642+
offset += limit
1643+
}
1644+
1645+
return
1646+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
---
2+
subcategory: "Web Application Firewall(WAF)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_waf_domain_post_action"
5+
sidebar_current: "docs-tencentcloud-resource-waf_domain_post_action"
6+
description: |-
7+
Provides a resource to create a WAF domain post action
8+
---
9+
10+
# tencentcloud_waf_domain_post_action
11+
12+
Provides a resource to create a WAF domain post action
13+
14+
## Example Usage
15+
16+
```hcl
17+
resource "tencentcloud_waf_domain_post_action" "example" {
18+
domain = "example.com"
19+
post_cls_action = 1
20+
post_ckafka_action = 0
21+
}
22+
```
23+
24+
## Argument Reference
25+
26+
The following arguments are supported:
27+
28+
* `domain` - (Required, String, ForceNew) Domain.
29+
* `post_ckafka_action` - (Required, Int) 0- Disable shipping, 1- Enable shipping.
30+
* `post_cls_action` - (Required, Int) 0- Disable shipping, 1- Enable shipping.
31+
32+
## Attributes Reference
33+
34+
In addition to all arguments above, the following attributes are exported:
35+
36+
* `id` - ID of the resource.
37+
38+
39+
40+
## Import
41+
42+
WAF domain post action can be imported using the id, e.g.
43+
44+
```
45+
terraform import tencentcloud_waf_domain_post_action.example example.com
46+
```
47+

website/tencentcloud.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6850,6 +6850,9 @@
68506850
<li>
68516851
<a href="/docs/providers/tencentcloud/r/waf_custom_white_rule.html">tencentcloud_waf_custom_white_rule</a>
68526852
</li>
6853+
<li>
6854+
<a href="/docs/providers/tencentcloud/r/waf_domain_post_action.html">tencentcloud_waf_domain_post_action</a>
6855+
</li>
68536856
<li>
68546857
<a href="/docs/providers/tencentcloud/r/waf_ip_access_control.html">tencentcloud_waf_ip_access_control</a>
68556858
</li>

0 commit comments

Comments
 (0)