Skip to content

Commit 1f1ee59

Browse files
authored
Merge pull request #1650 from tencentcloudstack/feat/vpn_ssl_client_status
support set vpn status
2 parents 26e359e + 731f09f commit 1f1ee59

File tree

8 files changed

+296
-0
lines changed

8 files changed

+296
-0
lines changed

.changelog/1650.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_vpn_gateway_ssl_client_cert
3+
```

.github/workflows/fmt.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ jobs:
2020

2121
# Steps represent a sequence of tasks that will be executed as part of the job
2222
steps:
23+
- name: Set up Go
24+
uses: actions/setup-go@v1
25+
with:
26+
go-version: 1.18
27+
2328
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
2429
- uses: actions/checkout@v3
2530
with:

scripts/gofmtcheck.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
# Check gofmt
44
echo "==> Checking that code complies with gofmt requirements..."
5+
echo $(go version)
56
gofmt_files=$(gofmt -l `find tencentcloud -name '*.go' | grep -v vendor`)
67
if [[ -n ${gofmt_files} ]]; then
78
echo 'gofmt needs running on the following files:'

tencentcloud/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -689,6 +689,7 @@ VPN Connections(VPN)
689689
tencentcloud_vpn_ssl_client
690690
tencentcloud_vpn_connection_reset
691691
tencentcloud_vpn_customer_gateway_configuration_download
692+
tencentcloud_vpn_gateway_ssl_client_cert
692693
693694
MapReduce(EMR)
694695
Data Source
@@ -1424,6 +1425,7 @@ func Provider() terraform.ResourceProvider {
14241425
"tencentcloud_vpn_ssl_client": resourceTencentCloudVpnSslClient(),
14251426
"tencentcloud_vpn_connection_reset": resourceTencentCloudVpnConnectionReset(),
14261427
"tencentcloud_vpn_customer_gateway_configuration_download": resourceTencentCloudVpnCustomerGatewayConfigurationDownload(),
1428+
"tencentcloud_vpn_gateway_ssl_client_cert": resourceTencentCloudVpnGatewaySslClientCert(),
14271429
"tencentcloud_ha_vip": resourceTencentCloudHaVip(),
14281430
"tencentcloud_ha_vip_eip_attachment": resourceTencentCloudHaVipEipAttachment(),
14291431
"tencentcloud_security_group": resourceTencentCloudSecurityGroup(),
Lines changed: 184 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,184 @@
1+
/*
2+
Provides a resource to create a vpc vpn_gateway_ssl_client_cert
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_vpn_gateway_ssl_client_cert" "vpn_gateway_ssl_client_cert" {
8+
ssl_vpn_client_id = "vpnc-123456"
9+
switch = "off"
10+
}
11+
```
12+
13+
Import
14+
15+
vpc vpn_gateway_ssl_client_cert can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_vpn_gateway_ssl_client_cert.vpn_gateway_ssl_client_cert ssl_client_id
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"log"
26+
27+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
28+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
29+
vpc "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/vpc/v20170312"
30+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
31+
)
32+
33+
func resourceTencentCloudVpnGatewaySslClientCert() *schema.Resource {
34+
return &schema.Resource{
35+
Create: resourceTencentCloudVpnGatewaySslClientCertCreate,
36+
Read: resourceTencentCloudVpnGatewaySslClientCertRead,
37+
Update: resourceTencentCloudVpnGatewaySslClientCertUpdate,
38+
Delete: resourceTencentCloudVpnGatewaySslClientCertDelete,
39+
Importer: &schema.ResourceImporter{
40+
State: schema.ImportStatePassthrough,
41+
},
42+
Schema: map[string]*schema.Schema{
43+
"ssl_vpn_client_id": {
44+
Required: true,
45+
Type: schema.TypeString,
46+
Description: "SSL-VPN-CLIENT Instance ID.",
47+
},
48+
49+
"switch": {
50+
Optional: true,
51+
Type: schema.TypeString,
52+
Default: "on",
53+
ValidateFunc: validateAllowedStringValue([]string{"on", "off"}),
54+
Description: "`on`: Enable, `off`: Disable.",
55+
},
56+
},
57+
}
58+
}
59+
60+
func resourceTencentCloudVpnGatewaySslClientCertCreate(d *schema.ResourceData, meta interface{}) error {
61+
defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.create")()
62+
defer inconsistentCheck(d, meta)()
63+
64+
sslVpnClientId := d.Get("ssl_vpn_client_id").(string)
65+
d.SetId(sslVpnClientId)
66+
67+
return resourceTencentCloudVpnGatewaySslClientCertUpdate(d, meta)
68+
}
69+
70+
func resourceTencentCloudVpnGatewaySslClientCertRead(d *schema.ResourceData, meta interface{}) error {
71+
defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.read")()
72+
defer inconsistentCheck(d, meta)()
73+
74+
logId := getLogId(contextNil)
75+
76+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
77+
78+
service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn}
79+
80+
sslVpnClientId := d.Id()
81+
82+
_, vpnGatewaySslClientCert, err := service.DescribeVpnSslClientById(ctx, sslVpnClientId)
83+
if err != nil {
84+
return err
85+
}
86+
87+
if vpnGatewaySslClientCert == nil {
88+
d.SetId("")
89+
log.Printf("[WARN]%s resource `VpnGatewaySslClientCert` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
90+
return nil
91+
}
92+
93+
if vpnGatewaySslClientCert.SslVpnClientId != nil {
94+
_ = d.Set("ssl_vpn_client_id", vpnGatewaySslClientCert.SslVpnClientId)
95+
}
96+
97+
if vpnGatewaySslClientCert.CertStatus != nil {
98+
if *vpnGatewaySslClientCert.CertStatus == 1 {
99+
_ = d.Set("switch", "on")
100+
}
101+
if *vpnGatewaySslClientCert.CertStatus == 2 {
102+
_ = d.Set("switch", "off")
103+
}
104+
}
105+
106+
return nil
107+
}
108+
109+
func resourceTencentCloudVpnGatewaySslClientCertUpdate(d *schema.ResourceData, meta interface{}) error {
110+
defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.update")()
111+
defer inconsistentCheck(d, meta)()
112+
113+
var taskId *uint64
114+
115+
logId := getLogId(contextNil)
116+
117+
sslVpnClientId := d.Id()
118+
119+
certSwitch := d.Get("switch").(string)
120+
121+
if certSwitch == "on" {
122+
123+
var (
124+
request = vpc.NewEnableVpnGatewaySslClientCertRequest()
125+
)
126+
127+
request.SslVpnClientId = &sslVpnClientId
128+
129+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
130+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().EnableVpnGatewaySslClientCert(request)
131+
if e != nil {
132+
return retryError(e)
133+
} else {
134+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
135+
}
136+
taskId = result.Response.TaskId
137+
return nil
138+
})
139+
if err != nil {
140+
log.Printf("[CRITAL]%s enable vpc vpnGatewaySslClientCert failed, reason:%+v", logId, err)
141+
return err
142+
}
143+
144+
} else {
145+
146+
var (
147+
request = vpc.NewDisableVpnGatewaySslClientCertRequest()
148+
)
149+
150+
request.SslVpnClientId = &sslVpnClientId
151+
152+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
153+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseVpcClient().DisableVpnGatewaySslClientCert(request)
154+
if e != nil {
155+
return retryError(e)
156+
} else {
157+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
158+
}
159+
taskId = result.Response.TaskId
160+
return nil
161+
})
162+
if err != nil {
163+
log.Printf("[CRITAL]%s disable vpc vpnGatewaySslClientCert failed, reason:%+v", logId, err)
164+
return err
165+
}
166+
}
167+
168+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
169+
service := VpcService{client: meta.(*TencentCloudClient).apiV3Conn}
170+
171+
err := service.DescribeVpcTaskResult(ctx, helper.String(helper.UInt64ToStr(*taskId)))
172+
if err != nil {
173+
return err
174+
}
175+
176+
return resourceTencentCloudVpnGatewaySslClientCertRead(d, meta)
177+
}
178+
179+
func resourceTencentCloudVpnGatewaySslClientCertDelete(d *schema.ResourceData, meta interface{}) error {
180+
defer logElapsed("resource.tencentcloud_vpn_gateway_ssl_client_cert.delete")()
181+
defer inconsistentCheck(d, meta)()
182+
183+
return nil
184+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package tencentcloud
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
7+
)
8+
9+
func TestAccTencentCloudVpcVpnGatewaySslClientCertResource_basic(t *testing.T) {
10+
t.Parallel()
11+
resource.Test(t, resource.TestCase{
12+
PreCheck: func() {
13+
testAccPreCheck(t)
14+
},
15+
Providers: testAccProviders,
16+
Steps: []resource.TestStep{
17+
{
18+
Config: testAccVpcVpnGatewaySslClientCert,
19+
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_vpn_gateway_ssl_client_cert.vpn_gateway_ssl_client_cert", "id")),
20+
},
21+
{
22+
Config: testAccVpcVpnGatewaySslClientCertUpdate,
23+
Check: resource.ComposeTestCheckFunc(
24+
resource.TestCheckResourceAttrSet("tencentcloud_vpn_gateway_ssl_client_cert.vpn_gateway_ssl_client_cert", "id"),
25+
resource.TestCheckResourceAttr("tencentcloud_vpn_gateway_ssl_client_cert.vpn_gateway_ssl_client_cert", "switch", "on"),
26+
),
27+
},
28+
{
29+
ResourceName: "tencentcloud_vpn_gateway_ssl_client_cert.vpn_gateway_ssl_client_cert",
30+
ImportState: true,
31+
ImportStateVerify: true,
32+
},
33+
},
34+
})
35+
}
36+
37+
const testAccVpcVpnGatewaySslClientCert = `
38+
39+
resource "tencentcloud_vpn_gateway_ssl_client_cert" "vpn_gateway_ssl_client_cert" {
40+
ssl_vpn_client_id = "vpnc-52f5lnd5"
41+
switch = "off"
42+
}
43+
44+
`
45+
46+
const testAccVpcVpnGatewaySslClientCertUpdate = `
47+
48+
resource "tencentcloud_vpn_gateway_ssl_client_cert" "vpn_gateway_ssl_client_cert" {
49+
ssl_vpn_client_id = "vpnc-52f5lnd5"
50+
switch = "on"
51+
}
52+
53+
`
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
subcategory: "VPN Connections(VPN)"
3+
layout: "tencentcloud"
4+
page_title: "TencentCloud: tencentcloud_vpn_gateway_ssl_client_cert"
5+
sidebar_current: "docs-tencentcloud-resource-vpn_gateway_ssl_client_cert"
6+
description: |-
7+
Provides a resource to create a vpc vpn_gateway_ssl_client_cert
8+
---
9+
10+
# tencentcloud_vpn_gateway_ssl_client_cert
11+
12+
Provides a resource to create a vpc vpn_gateway_ssl_client_cert
13+
14+
## Example Usage
15+
16+
```hcl
17+
resource "tencentcloud_vpn_gateway_ssl_client_cert" "vpn_gateway_ssl_client_cert" {
18+
ssl_vpn_client_id = "vpnc-123456"
19+
switch = "off"
20+
}
21+
```
22+
23+
## Argument Reference
24+
25+
The following arguments are supported:
26+
27+
* `ssl_vpn_client_id` - (Required, String) SSL-VPN-CLIENT Instance ID.
28+
* `switch` - (Optional, String) `on`: Enable, `off`: Disable.
29+
30+
## Attributes Reference
31+
32+
In addition to all arguments above, the following attributes are exported:
33+
34+
* `id` - ID of the resource.
35+
36+
37+
38+
## Import
39+
40+
vpc vpn_gateway_ssl_client_cert can be imported using the id, e.g.
41+
42+
```
43+
terraform import tencentcloud_vpn_gateway_ssl_client_cert.vpn_gateway_ssl_client_cert ssl_client_id
44+
```
45+

website/tencentcloud.erb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2805,6 +2805,9 @@
28052805
<li>
28062806
<a href="/docs/providers/tencentcloud/r/vpn_gateway_route.html">tencentcloud_vpn_gateway_route</a>
28072807
</li>
2808+
<li>
2809+
<a href="/docs/providers/tencentcloud/r/vpn_gateway_ssl_client_cert.html">tencentcloud_vpn_gateway_ssl_client_cert</a>
2810+
</li>
28082811
<li>
28092812
<a href="/docs/providers/tencentcloud/r/vpn_ssl_client.html">tencentcloud_vpn_ssl_client</a>
28102813
</li>

0 commit comments

Comments
 (0)