Skip to content

Commit f227daf

Browse files
tongyimingmikatong
andauthored
Fix/vpn dpd (#1227)
* fix: support set dpd * fix: support set dpd Co-authored-by: mikatong <mikatong@tencent.com>
1 parent 8078a68 commit f227daf

File tree

12 files changed

+9078
-2473
lines changed

12 files changed

+9078
-2473
lines changed

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ require (
3333
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.445
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.199
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.412
36-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.472
36+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.479
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359
3939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
@@ -62,11 +62,11 @@ require (
6262
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tem v1.0.472
6363
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.438
6464
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199
65-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.398
65+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.479
6666
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199
6767
github.com/tencentyun/cos-go-sdk-v5 v0.7.33
6868
github.com/yangwenmai/ratelimit v0.0.0-20180104140304-44221c2292e1
6969
github.com/zclconf/go-cty v1.4.2 // indirect
7070
golang.org/x/sys v0.0.0-20200523222454-059865788121 // indirect
71-
gopkg.in/yaml.v2 v2.2.8 // indirect
71+
gopkg.in/yaml.v2 v2.2.8
7272
)

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.445/go.mod
494494
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.466/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
495495
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.472 h1:kQxDatbhm8AbZebhnP7xgBBsXHqt3WfGfIPxE9Qmdmk=
496496
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.472/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
497+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.479 h1:3kwDb6p1J3LxmwnNgSSEheemPffo+vMewoDzKysYdig=
498+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.479/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
497499
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445 h1:Bh7XD0ypNMHYyBOM8hhKsSu+y0VVKUnJVS+YKKhfpGg=
498500
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.445/go.mod h1:jMDD351efCFpT1+KVFbcpu6SbmP4TYmp4qkoCfr63nQ=
499501
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.359 h1:cNKqelPgUxrJkLY0Azd2QHr/UMYOPPnmqs88clt2akk=
@@ -553,6 +555,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199 h1:6Yt74l4
553555
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vod v1.0.199/go.mod h1:Yw6OQ33z3s4k0HVYTNSffB12qOzEJ2Zf1Vj4+5S3sRs=
554556
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.398 h1:1JVKMl+yjZbntwAW0A6esjQI1/dXXqjQ9+OLai7ZS2w=
555557
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.398/go.mod h1:+TD/TRnb5WrLcE2SL3db7ROOpwED5gBfbC19gaXnGxs=
558+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.479 h1:eArkuh12SjyaHaKDNfF2oLjkY3f8SnuazgM/2dV9hcA=
559+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc v1.0.479/go.mod h1:U+ZEKIS6qZu8unIM3K5qWBaK7bO4ydXgzmdNeRBjQQw=
556560
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199 h1:hMBLtiJPnZ9GvA677cTB6ELBR6B68wCR2QY1sNoGQc4=
557561
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/wss v1.0.199/go.mod h1:nnY91/H3j/Gu7V/oCA6Zeg8T5D3q36EUdBh4EjmHwqY=
558562
github.com/tencentyun/cos-go-sdk-v5 v0.7.33 h1:5jmJU7U/1nf/7ZPDkrUL8KlF1oDUzTHsdtLNY6x0hq4=

tencentcloud/extension_vpc.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,3 +307,13 @@ const (
307307
VPCNotFound = "ResourceNotFound"
308308
VPCUnsupportedOperation = "UnsupportedOperation"
309309
)
310+
311+
const (
312+
DPD_ACTION_CLEAR = "clear"
313+
DPD_ACTION_RESTART = "restart"
314+
)
315+
316+
var DPD_ACTIONS = []string{
317+
DPD_ACTION_CLEAR,
318+
DPD_ACTION_RESTART,
319+
}

tencentcloud/resource_tc_vpn_connection.go

Lines changed: 70 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import (
4949
"context"
5050
"fmt"
5151
"log"
52+
"strconv"
5253
"time"
5354

5455
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
@@ -249,6 +250,27 @@ func resourceTencentCloudVpnConnection() *schema.Resource {
249250
Optional: true,
250251
Description: "A list of tags used to associate different resources.",
251252
},
253+
"dpd_enable": {
254+
Type: schema.TypeInt,
255+
Optional: true,
256+
Computed: true,
257+
ValidateFunc: validateIntegerInRange(0, 1),
258+
Description: "Specifies whether to enable DPD. Valid values: 0 (disable) and 1 (enable).",
259+
},
260+
"dpd_timeout": {
261+
Type: schema.TypeInt,
262+
Optional: true,
263+
Computed: true,
264+
ValidateFunc: validateIntegerInRange(30, 60),
265+
Description: "DPD timeout period.Valid value ranges: [30~60], Default: 30; unit: second. If the request is not responded within this period, the peer end is considered not exists. This parameter is valid when the value of DpdEnable is 1.",
266+
},
267+
"dpd_action": {
268+
Type: schema.TypeString,
269+
Optional: true,
270+
Computed: true,
271+
ValidateFunc: validateAllowedStringValue(DPD_ACTIONS),
272+
Description: "The action after DPD timeout. Valid values: clear (disconnect) and restart (try again). It is valid when DpdEnable is 1.",
273+
},
252274
"create_time": {
253275
Type: schema.TypeString,
254276
Computed: true,
@@ -336,7 +358,16 @@ func resourceTencentCloudVpnConnectionCreate(d *schema.ResourceData, meta interf
336358
request.VpnGatewayId = helper.String(d.Get("vpn_gateway_id").(string))
337359
request.CustomerGatewayId = helper.String(d.Get("customer_gateway_id").(string))
338360
request.PreShareKey = helper.String(d.Get("pre_share_key").(string))
339-
361+
if v, ok := d.GetOk("dpd_enable"); ok {
362+
dpdEnable := v.(int)
363+
request.DpdEnable = helper.IntInt64(dpdEnable)
364+
}
365+
if v, ok := d.GetOk("dpd_action"); ok {
366+
request.DpdAction = helper.String(v.(string))
367+
}
368+
if v, ok := d.GetOk("dpd_timeout"); ok {
369+
request.DpdTimeout = helper.String(strconv.Itoa(v.(int)))
370+
}
340371
//set up SecurityPolicyDatabases
341372

342373
sgps := d.Get("security_group_policy").(*schema.Set).List()
@@ -638,6 +669,15 @@ func resourceTencentCloudVpnConnectionRead(d *schema.ResourceData, meta interfac
638669
_ = d.Set("enable_health_check", *connection.EnableHealthCheck)
639670
_ = d.Set("health_check_local_ip", *connection.HealthCheckLocalIp)
640671
_ = d.Set("health_check_remote_ip", *connection.HealthCheckRemoteIp)
672+
// dpd
673+
_ = d.Set("dpd_enable", *connection.DpdEnable)
674+
dpdTimeoutInt, err := strconv.Atoi(*connection.DpdTimeout)
675+
if err != nil {
676+
return err
677+
}
678+
_ = d.Set("dpd_timeout", dpdTimeoutInt)
679+
_ = d.Set("dpd_action", *connection.DpdAction)
680+
641681
//tags
642682
tagService := TagService{client: meta.(*TencentCloudClient).apiV3Conn}
643683
region := meta.(*TencentCloudClient).apiV3Conn.Region
@@ -705,6 +745,24 @@ func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interf
705745
}
706746
changeFlag = true
707747
}
748+
749+
if d.HasChange("dpd_enable") {
750+
request.DpdEnable = helper.IntInt64(d.Get("dpd_enable").(int))
751+
changeFlag = true
752+
}
753+
if d.HasChange("dpd_timeout") {
754+
if v, ok := d.GetOk("dpd_timeout"); ok {
755+
request.DpdTimeout = helper.String(strconv.Itoa(v.(int)))
756+
changeFlag = true
757+
}
758+
}
759+
if d.HasChange("dpd_action") {
760+
if v, ok := d.GetOk("dpd_action"); ok {
761+
request.DpdAction = helper.String(v.(string))
762+
changeFlag = true
763+
}
764+
}
765+
708766
ikeChangeKeySet := map[string]bool{
709767
"ike_proto_encry_algorithm": false,
710768
"ike_proto_authen_algorithm": false,
@@ -842,6 +900,17 @@ func resourceTencentCloudVpnConnectionUpdate(d *schema.ResourceData, meta interf
842900
d.SetPartial(key)
843901
}
844902
}
903+
904+
if d.HasChange("dpd_enable") {
905+
d.SetPartial("dpd_enable")
906+
}
907+
if d.HasChange("dpd_timeout") {
908+
d.SetPartial("dpd_timeout")
909+
}
910+
if d.HasChange("dpd_action") {
911+
d.SetPartial("dpd_action")
912+
}
913+
845914
//tag
846915
if d.HasChange("tags") {
847916
oldInterface, newInterface := d.GetChange("tags")

tencentcloud/resource_tc_vpn_connection_test.go

Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ func TestAccTencentCloudVpnConnection_basic(t *testing.T) {
4343
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "encrypt_proto"),
4444
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "route_type"),
4545
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "vpn_proto"),
46+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_enable", "1"),
47+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_timeout", "30"),
48+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_action", "clear"),
4649
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "enable_health_check", "true"),
4750
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "health_check_local_ip", "192.168.0.2"),
4851
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "health_check_remote_ip", "3.3.3.2"),
@@ -73,6 +76,40 @@ func TestAccTencentCloudVpnConnection_basic(t *testing.T) {
7376
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "encrypt_proto"),
7477
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "route_type"),
7578
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "vpn_proto"),
79+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_enable", "0"),
80+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_timeout", "30"),
81+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_action", "clear"),
82+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "enable_health_check", "false"),
83+
),
84+
},
85+
{
86+
Config: testAccVpnConnectionConfigUpdate2,
87+
Check: resource.ComposeTestCheckFunc(
88+
testAccCheckVpnConnectionExists("tencentcloud_vpn_connection.connection"),
89+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "name", "vpn_connection_test2"),
90+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "pre_share_key", "testt"),
91+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "tags.test", "testt"),
92+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ike_proto_encry_algorithm", "3DES-CBC"),
93+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ike_proto_authen_algorithm", "SHA"),
94+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ike_local_identity", "ADDRESS"),
95+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ike_remote_identity", "ADDRESS"),
96+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ike_dh_group_name", "GROUP2"),
97+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ike_exchange_mode", "AGGRESSIVE"),
98+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ike_sa_lifetime_seconds", "86401"),
99+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ipsec_encrypt_algorithm", "3DES-CBC"),
100+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ipsec_integrity_algorithm", "SHA1"),
101+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ipsec_pfs_dh_group", "NULL"),
102+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ipsec_sa_lifetime_seconds", "7200"),
103+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "ipsec_sa_lifetime_traffic", "2570"),
104+
//resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "security_group_policy.0.remote_cidr_block.0", "3.3.3.0/26"),
105+
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "net_status"),
106+
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "state"),
107+
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "encrypt_proto"),
108+
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "route_type"),
109+
resource.TestCheckResourceAttrSet("tencentcloud_vpn_connection.connection", "vpn_proto"),
110+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_enable", "1"),
111+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_timeout", "40"),
112+
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "dpd_action", "restart"),
76113
resource.TestCheckResourceAttr("tencentcloud_vpn_connection.connection", "enable_health_check", "false"),
77114
),
78115
},
@@ -209,7 +246,9 @@ resource "tencentcloud_vpn_connection" "connection" {
209246
ipsec_sa_lifetime_seconds = 3600
210247
ipsec_pfs_dh_group = "DH-GROUP1"
211248
ipsec_sa_lifetime_traffic = 2560
212-
249+
dpd_enable = 1
250+
dpd_timeout = "30"
251+
dpd_action = "clear"
213252
security_group_policy {
214253
local_cidr_block = "172.16.0.0/16"
215254
remote_cidr_block = ["3.3.3.0/32", ]
@@ -264,6 +303,65 @@ resource "tencentcloud_vpn_connection" "connection" {
264303
ipsec_sa_lifetime_seconds = 7200
265304
ipsec_pfs_dh_group = "NULL"
266305
ipsec_sa_lifetime_traffic = 2570
306+
dpd_enable = 0
307+
dpd_timeout = "30"
308+
dpd_action = "clear"
309+
310+
security_group_policy {
311+
local_cidr_block = "172.16.0.0/16"
312+
remote_cidr_block = ["3.3.3.0/26", ]
313+
}
314+
tags = {
315+
test = "testt"
316+
}
317+
enable_health_check = false
318+
}
319+
`
320+
321+
const testAccVpnConnectionConfigUpdate2 = `
322+
resource "tencentcloud_vpn_customer_gateway" "cgw" {
323+
name = "terraform_test"
324+
public_ip_address = "1.3.3.3"
325+
}
326+
327+
# Create VPC and Subnet
328+
data "tencentcloud_vpc_instances" "foo" {
329+
name = "Default-VPC"
330+
}
331+
332+
resource "tencentcloud_vpn_gateway" "vpn" {
333+
name = "terraform_update"
334+
vpc_id = data.tencentcloud_vpc_instances.foo.instance_list.0.vpc_id
335+
bandwidth = 5
336+
zone = "ap-guangzhou-3"
337+
338+
tags = {
339+
test = "test"
340+
}
341+
}
342+
resource "tencentcloud_vpn_connection" "connection" {
343+
name = "vpn_connection_test2"
344+
vpc_id = data.tencentcloud_vpc_instances.foo.instance_list.0.vpc_id
345+
vpn_gateway_id = tencentcloud_vpn_gateway.vpn.id
346+
customer_gateway_id = tencentcloud_vpn_customer_gateway.cgw.id
347+
pre_share_key = "testt"
348+
ike_proto_encry_algorithm = "3DES-CBC"
349+
ike_proto_authen_algorithm = "SHA"
350+
ike_local_identity = "ADDRESS"
351+
ike_exchange_mode = "AGGRESSIVE"
352+
ike_local_address = tencentcloud_vpn_gateway.vpn.public_ip_address
353+
ike_remote_identity = "ADDRESS"
354+
ike_remote_address = tencentcloud_vpn_customer_gateway.cgw.public_ip_address
355+
ike_dh_group_name = "GROUP2"
356+
ike_sa_lifetime_seconds = 86401
357+
ipsec_encrypt_algorithm = "3DES-CBC"
358+
ipsec_integrity_algorithm = "SHA1"
359+
ipsec_sa_lifetime_seconds = 7200
360+
ipsec_pfs_dh_group = "NULL"
361+
ipsec_sa_lifetime_traffic = 2570
362+
dpd_enable = 1
363+
dpd_timeout = "40"
364+
dpd_action = "restart"
267365
268366
security_group_policy {
269367
local_cidr_block = "172.16.0.0/16"

0 commit comments

Comments
 (0)