Skip to content

Commit 7cd42d5

Browse files
authored
feat: support tse waf (#2348)
* feat: support tse waf * feat: add 2348 changelog
1 parent d07bf5d commit 7cd42d5

File tree

16 files changed

+2397
-77
lines changed

16 files changed

+2397
-77
lines changed

.changelog/2348.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_tse_waf_protection
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_tse_waf_domains
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.693
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4848
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.711
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.802
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.804
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.692
@@ -93,7 +93,7 @@ require (
9393
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.758
9494
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.759
9595
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.756
96-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.772
96+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.804
9797
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
9898
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199
9999
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.779

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -883,6 +883,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.800 h1:sQFd
883883
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.800/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
884884
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.802 h1:Oxtoc+JC1CjCcLJbmw9AWspiG8184A9CWFe1mujWoW8=
885885
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.802/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
886+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.804 h1:WItehRDNlQAI+/W7+mRU5c0jReEOGCncW/7hoV3uzYA=
887+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.804/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
886888
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
887889
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
888890
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69SP/wPsmnfozcQVZ6tUY6F6N/TpEe/7xtXrc/8=
@@ -981,6 +983,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.756 h1:89M
981983
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.756/go.mod h1:AJAItBOTaarpDpUF7pNp0tuz2Y6H2oFuMcyKouPs1IE=
982984
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.772 h1:5rxOhBTe++H/vicFtM6ZwkJpYroQhHsZxby4IEvUAoM=
983985
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.772/go.mod h1:D9SFD29fvMPjSDokhgKbPyHCRlgr4RFx+AM+3DQ7y6A=
986+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.804 h1:lYkKswjbdCICDATYfUtT1SrHhSBUcVFxnh0j0tSqhEA=
987+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.804/go.mod h1:nE+gtagqpenButXqRAWh1MJBMRFbQchlXK4yCPWbSaQ=
984988
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674 h1:VsMV1/vsgVzespG7jUzraZS/AbAUllVQjmtVAlA9W/M=
985989
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674/go.mod h1:6+MWxaNR4y+spZHYNntulOyj628owTLuWmEFebJOWdA=
986990
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199 h1:6Yt74l4pA5QtzhwMNIEUt0spXdSBKH744DDqTHJOCP0=

tencentcloud/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,6 +1893,8 @@ Tencent Cloud Service Engine(TSE)
18931893
tencentcloud_tse_cngw_route
18941894
tencentcloud_tse_cngw_route_rate_limit
18951895
tencentcloud_tse_cngw_certificate
1896+
tencentcloud_tse_waf_protection
1897+
tencentcloud_tse_waf_domains
18961898
18971899
ClickHouse(CDWCH)
18981900
Data Source
@@ -3790,6 +3792,8 @@ func Provider() *schema.Provider {
37903792
"tencentcloud_tse_cngw_route_rate_limit": resourceTencentCloudTseCngwRouteRateLimit(),
37913793
"tencentcloud_tse_cngw_canary_rule": resourceTencentCloudTseCngwCanaryRule(),
37923794
"tencentcloud_tse_cngw_certificate": resourceTencentCloudTseCngwCertificate(),
3795+
"tencentcloud_tse_waf_protection": resourceTencentCloudTseWafProtection(),
3796+
"tencentcloud_tse_waf_domains": resourceTencentCloudTseWafDomains(),
37933797
"tencentcloud_clickhouse_instance": resourceTencentCloudClickhouseInstance(),
37943798
"tencentcloud_cls_kafka_recharge": resourceTencentCloudClsKafkaRecharge(),
37953799
"tencentcloud_cls_scheduled_sql": resourceTencentCloudClsScheduledSql(),
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
/*
2+
Provides a resource to create a tse waf_domains
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_tse_waf_domains" "waf_domains" {
8+
domain = "tse.exmaple.com"
9+
gateway_id = "gateway-ed63e957"
10+
}
11+
```
12+
13+
Import
14+
15+
tse waf_domains can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_tse_waf_domains.waf_domains waf_domains_id
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"fmt"
26+
"log"
27+
"strings"
28+
29+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
30+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
31+
tse "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse/v20201207"
32+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
33+
)
34+
35+
func resourceTencentCloudTseWafDomains() *schema.Resource {
36+
return &schema.Resource{
37+
Create: resourceTencentCloudTseWafDomainsCreate,
38+
Read: resourceTencentCloudTseWafDomainsRead,
39+
Delete: resourceTencentCloudTseWafDomainsDelete,
40+
Importer: &schema.ResourceImporter{
41+
State: schema.ImportStatePassthrough,
42+
},
43+
Schema: map[string]*schema.Schema{
44+
"gateway_id": {
45+
Required: true,
46+
ForceNew: true,
47+
Type: schema.TypeString,
48+
Description: "Gateway ID.",
49+
},
50+
51+
"domain": {
52+
Required: true,
53+
ForceNew: true,
54+
Type: schema.TypeString,
55+
Description: "The waf protected domain name.",
56+
},
57+
},
58+
}
59+
}
60+
61+
func resourceTencentCloudTseWafDomainsCreate(d *schema.ResourceData, meta interface{}) error {
62+
defer logElapsed("resource.tencentcloud_tse_waf_domains.create")()
63+
defer inconsistentCheck(d, meta)()
64+
65+
logId := getLogId(contextNil)
66+
67+
var (
68+
request = tse.NewCreateWafDomainsRequest()
69+
gatewayId string
70+
domain string
71+
)
72+
if v, ok := d.GetOk("gateway_id"); ok {
73+
gatewayId = v.(string)
74+
request.GatewayId = helper.String(v.(string))
75+
}
76+
77+
if v, ok := d.GetOk("domain"); ok {
78+
domain = v.(string)
79+
request.Domains = append(request.Domains, helper.String(v.(string)))
80+
}
81+
82+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
83+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseTseClient().CreateWafDomains(request)
84+
if e != nil {
85+
return retryError(e)
86+
} else {
87+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
88+
}
89+
return nil
90+
})
91+
if err != nil {
92+
log.Printf("[CRITAL]%s create tse wafDomains failed, reason:%+v", logId, err)
93+
return err
94+
}
95+
96+
d.SetId(strings.Join([]string{gatewayId, domain}, FILED_SP))
97+
98+
return resourceTencentCloudTseWafDomainsRead(d, meta)
99+
}
100+
101+
func resourceTencentCloudTseWafDomainsRead(d *schema.ResourceData, meta interface{}) error {
102+
defer logElapsed("resource.tencentcloud_tse_waf_domains.read")()
103+
defer inconsistentCheck(d, meta)()
104+
105+
logId := getLogId(contextNil)
106+
107+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
108+
109+
service := TseService{client: meta.(*TencentCloudClient).apiV3Conn}
110+
111+
idSplit := strings.Split(d.Id(), FILED_SP)
112+
if len(idSplit) != 2 {
113+
return fmt.Errorf("id is broken,%s", d.Id())
114+
}
115+
gatewayId := idSplit[0]
116+
domain := idSplit[1]
117+
118+
wafDomains, err := service.DescribeTseWafDomainsById(ctx, gatewayId)
119+
if err != nil {
120+
return err
121+
}
122+
123+
if wafDomains == nil {
124+
d.SetId("")
125+
log.Printf("[WARN]%s resource `TseWafDomains` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
126+
return nil
127+
}
128+
129+
_ = d.Set("gateway_id", gatewayId)
130+
131+
if wafDomains.Domains != nil {
132+
for _, v := range wafDomains.Domains {
133+
if *v == domain {
134+
_ = d.Set("domain", domain)
135+
break
136+
}
137+
}
138+
}
139+
140+
return nil
141+
}
142+
143+
func resourceTencentCloudTseWafDomainsDelete(d *schema.ResourceData, meta interface{}) error {
144+
defer logElapsed("resource.tencentcloud_tse_waf_domains.delete")()
145+
defer inconsistentCheck(d, meta)()
146+
147+
logId := getLogId(contextNil)
148+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
149+
150+
service := TseService{client: meta.(*TencentCloudClient).apiV3Conn}
151+
idSplit := strings.Split(d.Id(), FILED_SP)
152+
if len(idSplit) != 2 {
153+
return fmt.Errorf("id is broken,%s", d.Id())
154+
}
155+
gatewayId := idSplit[0]
156+
domain := idSplit[1]
157+
158+
if err := service.DeleteTseWafDomainsById(ctx, gatewayId, domain); err != nil {
159+
return err
160+
}
161+
162+
return nil
163+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
7+
)
8+
9+
// go test -test.run TestAccTencentCloudTseWafDomainsResource_basic -v
10+
func TestAccTencentCloudTseWafDomainsResource_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheck(t)
15+
},
16+
Providers: testAccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccTseWafDomains,
20+
Check: resource.ComposeTestCheckFunc(
21+
resource.TestCheckResourceAttrSet("tencentcloud_tse_waf_domains.waf_domains", "id"),
22+
resource.TestCheckResourceAttr("tencentcloud_tse_waf_domains.waf_domains", "domain", "tse.exmaple.com"),
23+
),
24+
},
25+
{
26+
ResourceName: "tencentcloud_tse_waf_domains.waf_domains",
27+
ImportState: true,
28+
ImportStateVerify: true,
29+
},
30+
},
31+
})
32+
}
33+
34+
const testAccTseWafDomains = DefaultTseVar + `
35+
36+
resource "tencentcloud_tse_waf_domains" "waf_domains" {
37+
domain = "tse.exmaple.com"
38+
gateway_id = var.gateway_id
39+
}
40+
41+
`

0 commit comments

Comments
 (0)