Skip to content

feat(waf): [123540800] add new resource #3354

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
May 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changelog/3354.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
```release-note:new-resource
tencentcloud_waf_domain_post_action
```

```release-note:new-resource
tencentcloud_waf_instance_attack_log_post
```
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.1107
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.1033
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.1148
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1162
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1153
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161
Expand Down Expand Up @@ -97,7 +97,7 @@ require (
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1154
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1149
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1162
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
github.com/tencentyun/cos-go-sdk-v5 v0.7.64
Expand Down
6 changes: 6 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1159 h1:Jl1
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1159/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161 h1:S4dJSWhOtaPjp0/GO/yhzUC6DfZvpWhrnsEKaLxr73c=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1162 h1:bscCBygP9JRl6iNabF+vmBOhY+xayFFGYV5Wa0NzH0A=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1162/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
Expand Down Expand Up @@ -1119,6 +1121,10 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1148 h1:ILcBbO
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1148/go.mod h1:1n+Jj71KPI+7oeySg5l9+JopaMgsIqA0y9ATSi4nx0k=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1149 h1:SOrBtPoCjS8Jsq1dHa2Ul+ZUPP/vT6j/dJN/08ZEMHM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1149/go.mod h1:6e3sb0k9K8kWQdB/WVXVrZxyYxrSC8hN4MWpzYRR80s=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1161 h1:7eXR3p6ZmggYE7GIvN/FbIg1ESh+LxJWbb0LV4oapnQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1161/go.mod h1:v3l7e0+48bKOFo8V/KLLDtegi0H7zLDqGKLMdqNPblI=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1162 h1:gnmuUaoFAShc9FKj3Omswu3n08bHM/sGsl8xjFAkFNs=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1162/go.mod h1:bu3KAFeoJ1xDGQp72h9Le3FqbOcCcdomOUig3OqgcE4=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792/go.mod h1:Xz6vPV3gHlzPwtEcmWdWO1EUXJDgn2p7UMCXbJiVioQ=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199 h1:hMBLtiJPnZ9GvA677cTB6ELBR6B68wCR2QY1sNoGQc4=
Expand Down
2 changes: 2 additions & 0 deletions tencentcloud/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -2238,6 +2238,8 @@ func Provider() *schema.Provider {
"tencentcloud_waf_ip_access_control_v2": waf.ResourceTencentCloudWafIpAccessControlV2(),
"tencentcloud_waf_log_post_cls_flow": waf.ResourceTencentCloudWafLogPostClsFlow(),
"tencentcloud_waf_log_post_ckafka_flow": waf.ResourceTencentCloudWafLogPostCkafkaFlow(),
"tencentcloud_waf_domain_post_action": waf.ResourceTencentCloudWafDomainPostAction(),
"tencentcloud_waf_instance_attack_log_post": waf.ResourceTencentCloudWafInstanceAttackLogPost(),
"tencentcloud_wedata_rule_template": wedata.ResourceTencentCloudWedataRuleTemplate(),
"tencentcloud_wedata_datasource": wedata.ResourceTencentCloudWedataDatasource(),
"tencentcloud_wedata_function": wedata.ResourceTencentCloudWedataFunction(),
Expand Down
2 changes: 2 additions & 0 deletions tencentcloud/provider.md
Original file line number Diff line number Diff line change
Expand Up @@ -2183,6 +2183,8 @@ tencentcloud_waf_ip_access_control
tencentcloud_waf_ip_access_control_v2
tencentcloud_waf_log_post_cls_flow
tencentcloud_waf_log_post_ckafka_flow
tencentcloud_waf_domain_post_action
tencentcloud_waf_instance_attack_log_post

Wedata
Data Source
Expand Down
4 changes: 4 additions & 0 deletions tencentcloud/services/waf/resource_tc_waf_clb_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -313,6 +313,10 @@ func resourceTencentCloudWafClbInstanceCreate(d *schema.ResourceData, meta inter
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

if result == nil || result.Response == nil {
return resource.NonRetryableError(fmt.Errorf("Create waf clb instance failed, Response is nil."))
}

if *result.Response.Status == 0 || *result.Response.InstanceId == "" {
return resource.NonRetryableError(fmt.Errorf("create waf clb instance status error: %s", *result.Response.ReturnMessage))
}
Expand Down
144 changes: 144 additions & 0 deletions tencentcloud/services/waf/resource_tc_waf_domain_post_action.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
package waf

import (
"context"
"log"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
wafv20180125 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf/v20180125"

tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
)

func ResourceTencentCloudWafDomainPostAction() *schema.Resource {
return &schema.Resource{
Create: resourceTencentCloudWafDomainPostActionCreate,
Read: resourceTencentCloudWafDomainPostActionRead,
Update: resourceTencentCloudWafDomainPostActionUpdate,
Delete: resourceTencentCloudWafDomainPostActionDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"domain": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
Description: "Domain.",
},

"post_cls_action": {
Type: schema.TypeInt,
Required: true,
ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}),
Description: "0- Disable shipping, 1- Enable shipping.",
},

"post_ckafka_action": {
Type: schema.TypeInt,
Required: true,
ValidateFunc: tccommon.ValidateAllowedIntValue([]int{0, 1}),
Description: "0- Disable shipping, 1- Enable shipping.",
},
},
}
}

func resourceTencentCloudWafDomainPostActionCreate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.create")()
defer tccommon.InconsistentCheck(d, meta)()

var domain string
if v, ok := d.GetOk("domain"); ok {
domain = v.(string)
}

d.SetId(domain)

return resourceTencentCloudWafDomainPostActionUpdate(d, meta)
}

func resourceTencentCloudWafDomainPostActionRead(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.read")()
defer tccommon.InconsistentCheck(d, meta)()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
service = WafService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
domain = d.Id()
)

respData, err := service.DescribeWafDomainPostActionById(ctx, domain)
if err != nil {
return err
}

if respData == nil || len(respData) < 1 {
d.SetId("")
log.Printf("[WARN]%s resource `waf_domain_post_action` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
return nil
}

_ = d.Set("domain", domain)

for _, item := range respData {
if item.PostCLSStatus != nil {
_ = d.Set("post_cls_action", item.PostCLSStatus)
}

if item.PostCKafkaStatus != nil {
_ = d.Set("post_ckafka_action", item.PostCKafkaStatus)
}
}

return nil
}

func resourceTencentCloudWafDomainPostActionUpdate(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.update")()
defer tccommon.InconsistentCheck(d, meta)()

var (
logId = tccommon.GetLogId(tccommon.ContextNil)
ctx = tccommon.NewResourceLifeCycleHandleFuncContext(context.Background(), logId, d, meta)
request = wafv20180125.NewModifyDomainPostActionRequest()
domain = d.Id()
)

if v, ok := d.GetOkExists("post_cls_action"); ok {
request.PostCLSAction = helper.IntInt64(v.(int))
}

if v, ok := d.GetOkExists("post_ckafka_action"); ok {
request.PostCKafkaAction = helper.IntInt64(v.(int))
}

request.Domain = &domain
reqErr := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseWafV20180125Client().ModifyDomainPostActionWithContext(ctx, request)
if e != nil {
return tccommon.RetryError(e)
} else {
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
}

return nil
})

if reqErr != nil {
log.Printf("[CRITAL]%s update waf domain post action failed, reason:%+v", logId, reqErr)
return reqErr
}

return resourceTencentCloudWafDomainPostActionRead(d, meta)
}

func resourceTencentCloudWafDomainPostActionDelete(d *schema.ResourceData, meta interface{}) error {
defer tccommon.LogElapsed("resource.tencentcloud_waf_domain_post_action.delete")()
defer tccommon.InconsistentCheck(d, meta)()

return nil
}
19 changes: 19 additions & 0 deletions tencentcloud/services/waf/resource_tc_waf_domain_post_action.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
Provides a resource to create a WAF domain post action

Example Usage

```hcl
resource "tencentcloud_waf_domain_post_action" "example" {
domain = "example.com"
post_cls_action = 1
post_ckafka_action = 0
}
```

Import

WAF domain post action can be imported using the id, e.g.

```
terraform import tencentcloud_waf_domain_post_action.example example.com
```
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package waf_test

import (
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"

tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
)

func TestAccTencentCloudWafDomainPostActionResource_basic(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() {
tcacctest.AccPreCheck(t)
},
Providers: tcacctest.AccProviders,
Steps: []resource.TestStep{
{
Config: testAccWafDomainPostAction,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "id"),
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "domain"),
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_cls_action"),
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_ckafka_action"),
),
},
{
Config: testAccWafDomainPostActionUpdate,
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "id"),
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "domain"),
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_cls_action"),
resource.TestCheckResourceAttrSet("tencentcloud_waf_domain_post_action.example", "post_ckafka_action"),
),
},
{
ResourceName: "tencentcloud_waf_domain_post_action.example",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

const testAccWafDomainPostAction = `
resource "tencentcloud_waf_domain_post_action" "example" {
domain = "example.com"
post_cls_action = 1
post_ckafka_action = 0
}
`

const testAccWafDomainPostActionUpdate = `
resource "tencentcloud_waf_domain_post_action" "example" {
domain = "example.com"
post_cls_action = 0
post_ckafka_action = 1
}
`
Loading
Loading