Skip to content

Commit 7b61fca

Browse files
authored
feat(nat): [122316150] add new resource nat_flow_monitor (#3215)
* add nat flow monitor * add nat flow monitor
1 parent 870fa86 commit 7b61fca

20 files changed

+3388
-173
lines changed

.changelog/3215.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
tencentcloud_nat_gateway_flow_monitor
3+
```

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.1078
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1115
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1053
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
5252
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111
@@ -96,7 +96,7 @@ require (
9696
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tse v1.0.857
9797
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674
9898
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860
99-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1068
99+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1122
100100
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1037
101101
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792
102102
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199

go.sum

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -921,7 +921,6 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1038/go.mod
921921
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1053/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
922922
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1056/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
923923
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1066/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
924-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1068/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
925924
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1071/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
926925
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1073/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
927926
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1078/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
@@ -931,8 +930,9 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1103/go.mod
931930
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1107/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
932931
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1108/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
933932
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1111/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
934-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1115 h1:lYeFC379r76seyzN7PHmSxv1ji9knmsXQJglDB/K0WE=
935933
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1115/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
934+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122 h1:jffjOBJ1ejT4ldClIIEI+QnfV5K2RubA+xNiz6uuFOU=
935+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1122/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
936936
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
937937
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
938938
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -1047,8 +1047,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674 h1:VsMV1/v
10471047
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tsf v1.0.674/go.mod h1:6+MWxaNR4y+spZHYNntulOyj628owTLuWmEFebJOWdA=
10481048
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860 h1:vW2NgAHK4BfpZP3m92eUEKbIP+nu9bL8mnaM0dBHWM8=
10491049
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.860/go.mod h1:uCkDh/AW/tb8JGq5b2kqLjqZuhCFR+6oTsq1SrrvT44=
1050-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1068 h1:oHot9DQppI0bAZmUXZfP6SbYz7m48GBuQpUG2DnHwFU=
1051-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1068/go.mod h1:eY2rMPyFp9RQKaZAD6EvJda4+X9XljtqxZ5jkM5h7EQ=
1050+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1122 h1:K9uRaby+EqZdqZHcTsRRIxgyaCWomFHPqQMZDrsiTM0=
1051+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.1122/go.mod h1:8xCo14lGkAvl5EhpYpmLk5ztoFcHdpBLzLzAawxjl+Y=
10521052
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1037 h1:sgHOHqVFcO266dnoh0KJ0CoxrRglRZYKW78iBh41Giw=
10531053
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/waf v1.0.1037/go.mod h1:QM5m6aZ65kaxaES0D44BNKmemn+9WBf5vr3HDDPrh8U=
10541054
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wedata v1.0.792 h1:NLgKNOIHWa38AmW7dyfI9Jlcp2Kr9VRD94f48pPNmxM=

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,6 +1217,7 @@ func Provider() *schema.Provider {
12171217
"tencentcloud_route_table_association": vpc.ResourceTencentCloudRouteTableAssociation(),
12181218
"tencentcloud_dnat": vpc.ResourceTencentCloudDnat(),
12191219
"tencentcloud_nat_gateway": vpc.ResourceTencentCloudNatGateway(),
1220+
"tencentcloud_nat_gateway_flow_monitor": vpc.ResourceTencentCloudNatGatewayFlowMonitor(),
12201221
"tencentcloud_nat_gateway_snat": vpc.ResourceTencentCloudNatGatewaySnat(),
12211222
"tencentcloud_nat_refresh_nat_dc_route": vpc.ResourceTencentCloudNatRefreshNatDcRoute(),
12221223
"tencentcloud_vpc_private_nat_gateway": vpc.ResourceTencentCloudVpcPrivateNatGateway(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,6 +1286,7 @@ tencentcloud_route_table_entry
12861286
tencentcloud_dnat
12871287
tencentcloud_nat_gateway
12881288
tencentcloud_nat_gateway_snat
1289+
tencentcloud_nat_gateway_flow_monitor
12891290
tencentcloud_nat_refresh_nat_dc_route
12901291
tencentcloud_ha_vip
12911292
tencentcloud_ha_vip_eip_attachment
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
package vpc
2+
3+
import (
4+
"log"
5+
6+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
7+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
)
12+
13+
func ResourceTencentCloudNatGatewayFlowMonitor() *schema.Resource {
14+
return &schema.Resource{
15+
Create: resourceTencentCloudNatGatewayFlowMonitorCreate,
16+
Read: resourceTencentCloudNatGatewayFlowMonitorRead,
17+
Update: resourceTencentCloudNatGatewayFlowMonitorUpdate,
18+
Delete: resourceTencentCloudNatGatewayFlowMonitorDelete,
19+
Importer: &schema.ResourceImporter{
20+
State: schema.ImportStatePassthrough,
21+
},
22+
Schema: map[string]*schema.Schema{
23+
"gateway_id": {
24+
Required: true,
25+
ForceNew: true,
26+
Type: schema.TypeString,
27+
Description: "ID of Gateway.",
28+
},
29+
"enable": {
30+
Required: true,
31+
Type: schema.TypeBool,
32+
Description: "Whether to enable flow monitor.",
33+
},
34+
"bandwidth": {
35+
Computed: true,
36+
Type: schema.TypeInt,
37+
Description: "Bandwidth of flow monitor.",
38+
},
39+
},
40+
}
41+
}
42+
43+
func resourceTencentCloudNatGatewayFlowMonitorCreate(d *schema.ResourceData, meta interface{}) error {
44+
defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway_flow_monitor.create")()
45+
defer tccommon.InconsistentCheck(d, meta)()
46+
47+
var gatewayId string
48+
49+
if v, ok := d.GetOk("gateway_id"); ok {
50+
gatewayId = v.(string)
51+
}
52+
53+
d.SetId(gatewayId)
54+
55+
return resourceTencentCloudNatGatewayFlowMonitorUpdate(d, meta)
56+
}
57+
58+
func resourceTencentCloudNatGatewayFlowMonitorRead(d *schema.ResourceData, meta interface{}) error {
59+
defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway_flow_monitor.read")()
60+
defer tccommon.InconsistentCheck(d, meta)()
61+
62+
logId := tccommon.GetLogId(tccommon.ContextNil)
63+
64+
gatewayId := d.Id()
65+
66+
var (
67+
checkRequest = vpc.NewCheckGatewayFlowMonitorRequest()
68+
response = vpc.NewCheckGatewayFlowMonitorResponse()
69+
)
70+
71+
checkRequest.GatewayId = &gatewayId
72+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
73+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().CheckGatewayFlowMonitor(checkRequest)
74+
if e != nil {
75+
return tccommon.RetryError(e)
76+
} else {
77+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, checkRequest.GetAction(), checkRequest.ToJsonString(), result.ToJsonString())
78+
}
79+
response = result
80+
return nil
81+
})
82+
if err != nil {
83+
log.Printf("[CRITAL]%s enable nat flow monitor failed, reason:%+v", logId, err)
84+
return err
85+
}
86+
87+
_ = d.Set("gateway_id", gatewayId)
88+
89+
if response.Response.Enabled != nil {
90+
if *response.Response.Enabled {
91+
_ = d.Set("enable", true)
92+
} else {
93+
_ = d.Set("enable", false)
94+
}
95+
}
96+
97+
if response.Response.Bandwidth != nil {
98+
_ = d.Set("bandwidth", *response.Response.Bandwidth)
99+
}
100+
return nil
101+
}
102+
103+
func resourceTencentCloudNatGatewayFlowMonitorUpdate(d *schema.ResourceData, meta interface{}) error {
104+
defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway_flow_monitor.update")()
105+
defer tccommon.InconsistentCheck(d, meta)()
106+
107+
logId := tccommon.GetLogId(tccommon.ContextNil)
108+
109+
var (
110+
enable bool
111+
enableRequest = vpc.NewEnableGatewayFlowMonitorRequest()
112+
disableRequest = vpc.NewDisableGatewayFlowMonitorRequest()
113+
)
114+
115+
gatewayId := d.Id()
116+
117+
if v, ok := d.GetOkExists("enable"); ok {
118+
enable = v.(bool)
119+
}
120+
121+
if enable {
122+
enableRequest.GatewayId = &gatewayId
123+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
124+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().EnableGatewayFlowMonitor(enableRequest)
125+
if e != nil {
126+
return tccommon.RetryError(e)
127+
} else {
128+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, enableRequest.GetAction(), enableRequest.ToJsonString(), result.ToJsonString())
129+
}
130+
return nil
131+
})
132+
if err != nil {
133+
log.Printf("[CRITAL]%s enable nat flow monitor failed, reason:%+v", logId, err)
134+
return err
135+
}
136+
} else {
137+
disableRequest.GatewayId = &gatewayId
138+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
139+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseVpcClient().DisableGatewayFlowMonitor(disableRequest)
140+
if e != nil {
141+
return tccommon.RetryError(e)
142+
} else {
143+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, disableRequest.GetAction(), disableRequest.ToJsonString(), result.ToJsonString())
144+
}
145+
return nil
146+
})
147+
if err != nil {
148+
log.Printf("[CRITAL]%s disable nat flow monitor failed, reason:%+v", logId, err)
149+
return err
150+
}
151+
}
152+
153+
return resourceTencentCloudNatGatewayFlowMonitorRead(d, meta)
154+
}
155+
156+
func resourceTencentCloudNatGatewayFlowMonitorDelete(d *schema.ResourceData, meta interface{}) error {
157+
defer tccommon.LogElapsed("resource.tencentcloud_nat_gateway_flow_monitor.delete")()
158+
defer tccommon.InconsistentCheck(d, meta)()
159+
160+
return nil
161+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Provides a resource to config a NAT gateway flow monitor.
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_nat_gateway_flow_monitor" "example" {
7+
gateway_id = "nat-e6u6axsm"
8+
enable = true
9+
}
10+
```
11+
12+
Import
13+
14+
NAT gateway flow monitor can be imported using the id, e.g.
15+
16+
```
17+
$ terraform import tencentcloud_nat_gateway_flow_monitor.example nat-e6u6axsm
18+
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package vpc_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+
func TestAccTencentCloudNatGatewayFlowMonitorResource_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: testAccNatGatewayFlowMonitor,
21+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_nat_gateway_flow_monitor.example", "id")),
22+
},
23+
},
24+
})
25+
}
26+
27+
const testAccNatGatewayFlowMonitor = `
28+
29+
resource "tencentcloud_nat_gateway_flow_monitor" "example" {
30+
gateway_id = "nat-e6u6axsm"
31+
enable = true
32+
}
33+
34+
`

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/response.go

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/json/encode.go

Lines changed: 3 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/netretry.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/ratelimitretry.go

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)