Skip to content

Commit f0ec3cf

Browse files
committed
feat(teo): [122064110] support l4 proxy rule
1 parent 9c7b6a8 commit f0ec3cf

File tree

12 files changed

+6190
-519
lines changed

12 files changed

+6190
-519
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ require (
9090
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdcpg v1.0.533
9191
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tdmq v1.0.955
9292
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem v1.0.578
93-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.1013
93+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.1103
9494
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.1038
9595
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/trocket v1.0.947
9696
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.857

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1049,6 +1049,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem v1.0.578 h1:vBpQhUr
10491049
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem v1.0.578/go.mod h1:UlojGQh/9wb7/uXPNi7PvMral1CNAskVDNgqJEV83l0=
10501050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.1013 h1:Vcub4gbcTIs/uYINllI8eHXAhv652PpPLM+f/LWZroA=
10511051
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.1013/go.mod h1:QUt5DeP3jmoYPrWwgupRPg/Xus21MjEiUzzhEUv0tOY=
1052+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.1103 h1:Dzd9AWT+E+ZsB8eFY92pr4VmL6IuBExn2QcQdl0L77A=
1053+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo v1.0.1103/go.mod h1:yAKtHjrmFg4uAMiTsq3r1Luk+1iROMaZ3jYUNc2xPkg=
10521054
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/thpc v1.0.998 h1:f4/n0dVKQTD06xJ84B5asHViNJHrZmGojdAWEPIsITM=
10531055
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/thpc v1.0.998/go.mod h1:fyi/HUwCwVe2NCCCjz8k/C5GwPu3QazCZO+OBJ3MhLk=
10541056
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.1038 h1:tmK0aSj8zJrTx7aubJR8DBvtySj1uO8UdFANUDFtbmo=

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1754,6 +1754,7 @@ func Provider() *schema.Provider {
17541754
"tencentcloud_teo_zone_setting": teo.ResourceTencentCloudTeoZoneSetting(),
17551755
"tencentcloud_teo_origin_group": teo.ResourceTencentCloudTeoOriginGroup(),
17561756
"tencentcloud_teo_l4_proxy": teo.ResourceTencentCloudTeoL4Proxy(),
1757+
"tencentcloud_teo_l4_proxy_rule": teo.ResourceTencentCloudTeoL4ProxyRule(),
17571758
"tencentcloud_teo_rule_engine": teo.ResourceTencentCloudTeoRuleEngine(),
17581759
"tencentcloud_teo_ownership_verify": teo.ResourceTencentCloudTeoOwnershipVerify(),
17591760
"tencentcloud_teo_certificate_config": teo.ResourceTencentCloudTeoCertificateConfig(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,6 +1469,7 @@ TencentCloud EdgeOne(TEO)
14691469
tencentcloud_teo_certificate_config
14701470
tencentcloud_teo_acceleration_domain
14711471
tencentcloud_teo_l4_proxy
1472+
tencentcloud_teo_l4_proxy_rule
14721473
tencentcloud_teo_realtime_log_delivery
14731474
tencentcloud_teo_function
14741475
tencentcloud_teo_function_rule

tencentcloud/services/teo/resource_tc_teo_l4_proxy_rule.go

Lines changed: 452 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
package teo
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strings"
8+
"time"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
11+
teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901"
12+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
13+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
14+
)
15+
16+
func resourceTencentCloudTeoL4ProxyRuleCreatePostHandleResponse0(ctx context.Context, resp *teo.CreateL4ProxyRulesResponse) error {
17+
d := tccommon.ResourceDataFromContext(ctx)
18+
meta := tccommon.ProviderMetaFromContext(ctx)
19+
20+
var (
21+
zoneId string
22+
proxyId string
23+
)
24+
25+
if v, ok := d.GetOk("zone_id"); ok {
26+
zoneId = v.(string)
27+
}
28+
29+
if v, ok := d.GetOk("proxy_id"); ok {
30+
proxyId = v.(string)
31+
}
32+
33+
ruleId := *resp.Response.L4ProxyRuleIds[0]
34+
35+
conf := tccommon.BuildStateChangeConf([]string{}, []string{"online"}, 10*tccommon.ReadRetryTimeout, time.Second, teoL4proxyRuleStateRefreshFunc(meta, zoneId, proxyId, ruleId, []string{}))
36+
if _, e := conf.WaitForState(); e != nil {
37+
return e
38+
}
39+
40+
return nil
41+
}
42+
43+
func resourceTencentCloudTeoL4ProxyRuleDeletePostFillRequest0(ctx context.Context, req *teo.DeleteL4ProxyRulesRequest) error {
44+
d := tccommon.ResourceDataFromContext(ctx)
45+
meta := tccommon.ProviderMetaFromContext(ctx)
46+
47+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
48+
if len(idSplit) != 3 {
49+
return fmt.Errorf("id is broken,%s", d.Id())
50+
}
51+
zoneId := idSplit[0]
52+
proxyId := idSplit[1]
53+
ruleId := idSplit[2]
54+
55+
service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
56+
proxy, err := service.DescribeTeoL4ProxyRuleById(ctx, zoneId, proxyId, ruleId)
57+
if err != nil {
58+
return err
59+
}
60+
61+
if *proxy.Status == "online" {
62+
logId := tccommon.GetLogId(tccommon.ContextNil)
63+
64+
request := teo.NewModifyL4ProxyRulesStatusRequest()
65+
66+
request.ZoneId = &zoneId
67+
request.ProxyId = &proxyId
68+
request.RuleIds = []*string{&ruleId}
69+
request.Status = helper.String("offline")
70+
71+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
72+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseTeoClient().ModifyL4ProxyRulesStatusWithContext(ctx, request)
73+
if e != nil {
74+
return tccommon.RetryError(e)
75+
} else {
76+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
77+
}
78+
return nil
79+
})
80+
if err != nil {
81+
log.Printf("[CRITAL]%s update teo l4 proxy failed, reason:%+v", logId, err)
82+
return err
83+
}
84+
85+
conf := tccommon.BuildStateChangeConf([]string{}, []string{"offline"}, 10*tccommon.ReadRetryTimeout, time.Second, teoL4proxyRuleStateRefreshFunc(meta, zoneId, proxyId, ruleId, []string{}))
86+
if _, e := conf.WaitForState(); e != nil {
87+
return e
88+
}
89+
}
90+
91+
return nil
92+
}
93+
94+
func resourceTencentCloudTeoL4ProxyRuleUpdateOnExit(ctx context.Context) error {
95+
d := tccommon.ResourceDataFromContext(ctx)
96+
meta := tccommon.ProviderMetaFromContext(ctx)
97+
98+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
99+
if len(idSplit) != 3 {
100+
return fmt.Errorf("id is broken,%s", d.Id())
101+
}
102+
zoneId := idSplit[0]
103+
proxyId := idSplit[1]
104+
ruleId := idSplit[2]
105+
106+
status := "online"
107+
if v, ok := d.GetOk("status"); ok {
108+
status = v.(string)
109+
}
110+
111+
conf := tccommon.BuildStateChangeConf([]string{}, []string{status}, 10*tccommon.ReadRetryTimeout, time.Second, teoL4proxyRuleStateRefreshFunc(meta, zoneId, proxyId, ruleId, []string{}))
112+
if _, e := conf.WaitForState(); e != nil {
113+
return e
114+
}
115+
116+
return nil
117+
}
118+
119+
func teoL4proxyRuleStateRefreshFunc(meta interface{}, zoneId, proxyId, ruleId string, failStates []string) resource.StateRefreshFunc {
120+
return func() (interface{}, string, error) {
121+
ctx := tccommon.ContextNil
122+
123+
service := TeoService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
124+
object, err := service.DescribeTeoL4ProxyRuleById(ctx, zoneId, proxyId, ruleId)
125+
if err != nil {
126+
return nil, "", err
127+
}
128+
129+
return object, helper.PString(object.Status), nil
130+
}
131+
}
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
package teo_test
2+
3+
import (
4+
"testing"
5+
6+
tcacctest "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/acctest"
7+
8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
9+
)
10+
11+
// go test -test.run TestAccTencentCloudTeoL4ProxyRuleResource_basic -v -timeout=0
12+
func TestAccTencentCloudTeoL4ProxyRuleResource_basic(t *testing.T) {
13+
t.Parallel()
14+
resource.Test(t, resource.TestCase{
15+
PreCheck: func() { tcacctest.AccPreCheckCommon(t, tcacctest.ACCOUNT_TYPE_PRIVATE) },
16+
Providers: tcacctest.AccProviders,
17+
Steps: []resource.TestStep{
18+
{
19+
Config: testAccTeoL4ProxyRule,
20+
Check: resource.ComposeTestCheckFunc(
21+
resource.TestCheckResourceAttrSet("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "zone_id"),
22+
resource.TestCheckResourceAttrSet("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "proxy_id"),
23+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.#", "1"),
24+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.client_ip_pass_through_mode", "OFF"),
25+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_port_range", "1212"),
26+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_type", "IP_DOMAIN"),
27+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_value.#", "1"),
28+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_value.0", "www.aaa.com"),
29+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.port_range.#", "1"),
30+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.port_range.0", "1212"),
31+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.protocol", "TCP"),
32+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.rule_tag", "aaa"),
33+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.session_persist", "off"),
34+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.session_persist_time", "3600"),
35+
),
36+
},
37+
{
38+
ResourceName: "tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule",
39+
ImportState: true,
40+
ImportStateVerify: true,
41+
},
42+
{
43+
Config: testAccTeoL4ProxyRuleUp,
44+
Check: resource.ComposeTestCheckFunc(
45+
resource.TestCheckResourceAttrSet("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "zone_id"),
46+
resource.TestCheckResourceAttrSet("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "proxy_id"),
47+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.#", "1"),
48+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.client_ip_pass_through_mode", "OFF"),
49+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_port_range", "1213"),
50+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_type", "IP_DOMAIN"),
51+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_value.#", "1"),
52+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.origin_value.0", "www.bbb.com"),
53+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.port_range.#", "1"),
54+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.port_range.0", "1213"),
55+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.protocol", "TCP"),
56+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.rule_tag", "bbb"),
57+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.session_persist", "off"),
58+
resource.TestCheckResourceAttr("tencentcloud_teo_l4_proxy_rule.teo_l4_proxy_rule", "l4_proxy_rules.0.session_persist_time", "3600"),
59+
),
60+
},
61+
},
62+
})
63+
}
64+
65+
const testAccTeoL4ProxyRule = `
66+
67+
resource "tencentcloud_teo_l4_proxy_rule" "teo_l4_proxy_rule" {
68+
proxy_id = "sid-38hbn26osico"
69+
zone_id = "zone-36bjhygh1bxe"
70+
71+
l4_proxy_rules {
72+
client_ip_pass_through_mode = "OFF"
73+
origin_port_range = "1212"
74+
origin_type = "IP_DOMAIN"
75+
origin_value = [
76+
"www.aaa.com",
77+
]
78+
port_range = [
79+
"1212",
80+
]
81+
protocol = "TCP"
82+
rule_tag = "aaa"
83+
session_persist = "off"
84+
session_persist_time = 3600
85+
}
86+
}
87+
`
88+
89+
const testAccTeoL4ProxyRuleUp = `
90+
91+
resource "tencentcloud_teo_l4_proxy_rule" "teo_l4_proxy_rule" {
92+
proxy_id = "sid-38hbn26osico"
93+
zone_id = "zone-36bjhygh1bxe"
94+
95+
l4_proxy_rules {
96+
client_ip_pass_through_mode = "OFF"
97+
origin_port_range = "1213"
98+
origin_type = "IP_DOMAIN"
99+
origin_value = [
100+
"www.bbb.com",
101+
]
102+
port_range = [
103+
"1213",
104+
]
105+
protocol = "TCP"
106+
rule_tag = "bbb"
107+
session_persist = "off"
108+
session_persist_time = 3600
109+
}
110+
}
111+
`

tencentcloud/services/teo/service_tencentcloud_teo.go

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99

1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1111
teo "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901"
12+
teov20220901 "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/teo/v20220901"
1213

1314
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/connectivity"
1415
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
@@ -1493,3 +1494,57 @@ func (me *TeoService) DescribeTeoFunctionRuntimeEnvironmentById(ctx context.Cont
14931494
ret = response.Response
14941495
return
14951496
}
1497+
1498+
func (me *TeoService) DescribeTeoL4ProxyRuleById(ctx context.Context, zoneId string, proxyId string, ruleId string) (ret *teov20220901.L4ProxyRule, errRet error) {
1499+
logId := tccommon.GetLogId(ctx)
1500+
1501+
request := teov20220901.NewDescribeL4ProxyRulesRequest()
1502+
request.ZoneId = helper.String(zoneId)
1503+
request.ProxyId = helper.String(proxyId)
1504+
filter := &teo.Filter{
1505+
Name: helper.String("rule-id"),
1506+
Values: []*string{helper.String(ruleId)},
1507+
}
1508+
request.Filters = append(request.Filters, filter)
1509+
1510+
defer func() {
1511+
if errRet != nil {
1512+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
1513+
}
1514+
}()
1515+
1516+
ratelimit.Check(request.GetAction())
1517+
1518+
var (
1519+
offset uint64 = 0
1520+
limit int64 = 20
1521+
)
1522+
var instances []*teov20220901.L4ProxyRule
1523+
for {
1524+
request.Offset = &offset
1525+
request.Limit = &limit
1526+
response, err := me.client.UseTeoV20220901Client().DescribeL4ProxyRules(request)
1527+
if err != nil {
1528+
errRet = err
1529+
return
1530+
}
1531+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
1532+
1533+
if response == nil || len(response.Response.L4ProxyRules) < 1 {
1534+
break
1535+
}
1536+
instances = append(instances, response.Response.L4ProxyRules...)
1537+
if len(response.Response.L4ProxyRules) < int(limit) {
1538+
break
1539+
}
1540+
1541+
offset = offset + uint64(limit)
1542+
}
1543+
1544+
if len(instances) > 1 {
1545+
errRet = fmt.Errorf("resource not exists")
1546+
return
1547+
}
1548+
ret = instances[0]
1549+
return
1550+
}

0 commit comments

Comments
 (0)