Skip to content

Commit 1268756

Browse files
author
mikatong
committed
support cynosdb ssl
1 parent 7c21b4b commit 1268756

File tree

14 files changed

+966
-437
lines changed

14 files changed

+966
-437
lines changed

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,10 @@ 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.1148
49-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1159
49+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.1153
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762
52-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111
52+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161
5353
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
5454
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.652
5555
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.633

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1156 h1:Uz9
969969
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1156/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
970970
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1159 h1:Jl1XE3cY6Bz0lBexvX8z+u2KmDO3tnFxtwHIalM5YS4=
971971
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1159/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
972+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161 h1:S4dJSWhOtaPjp0/GO/yhzUC6DfZvpWhrnsEKaLxr73c=
973+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1161/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
972974
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993 h1:WlPgXldQCxt7qi5Xrc6j6zTrsXWzN5BcOGs7Irq7fwQ=
973975
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/controlcenter v1.0.993/go.mod h1:Z9U8zNtyuyKhjS0698wqsrG/kLx1TQ5CEixXBwVe7xY=
974976
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/csip v1.0.860 h1:F3esKBIT3HW9+7Gt8cVgf8X06VdGIczpgLBUECzSEzU=
@@ -981,6 +983,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762 h1:2egy69S
981983
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.762/go.mod h1:1XylIfNUbAzmNqi4XMhwcM3VhmUHdu1OYybOeaJ4sOw=
982984
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111 h1:Y7LLIZEQh8OAbnBWppUopu2PjPaQOO9Jzhp8LZO7adI=
983985
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1111/go.mod h1:hx4A0g62E4hq6vB0t9e/4vlUArok9R2qOYW5IzDiPYo=
986+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161 h1:0oG7oMuDBXN2WyRtTU/650zRhLAAmYBgpttNn53NhK0=
987+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.1161/go.mod h1:38t5HcmRqwC93ct7NgG82N+IQIjKLPLLvEUn263jejQ=
984988
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dasb v1.0.970 h1:qVIRHgG1twsqF4aVN/x2T2yMRfPpsZBTNefDkqzM06M=
985989
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dasb v1.0.970/go.mod h1:NJuuQD4z6vcnsZnC7Tvz2U9hElNS1wroc34UQbZvP2U=
986990
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335 h1:D8qrelkK5udv8RzJJIABMzItGIyaZoYnxEVeIsYqiNw=

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1716,6 +1716,7 @@ func Provider() *schema.Provider {
17161716
"tencentcloud_cynosdb_proxy_end_point": cynosdb.ResourceTencentCloudCynosdbProxyEndPoint(),
17171717
"tencentcloud_cynosdb_upgrade_proxy_version": cynosdb.ResourceTencentCloudCynosdbUpgradeProxyVersion(),
17181718
"tencentcloud_cynosdb_backup_config": cynosdb.ResourceTencentCloudCynosdbBackupConfig(),
1719+
"tencentcloud_cynosdb_ssl": cynosdb.ResourceTencentCloudCynosdbSsl(),
17191720
"tencentcloud_vod_adaptive_dynamic_streaming_template": vod.ResourceTencentCloudVodAdaptiveDynamicStreamingTemplate(),
17201721
"tencentcloud_vod_image_sprite_template": vod.ResourceTencentCloudVodImageSpriteTemplate(),
17211722
"tencentcloud_vod_procedure_template": vod.ResourceTencentCloudVodProcedureTemplate(),

tencentcloud/provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,7 @@ tencentcloud_cynosdb_read_only_instance_exclusive_access
543543
tencentcloud_cynosdb_proxy_end_point
544544
tencentcloud_cynosdb_upgrade_proxy_version
545545
tencentcloud_cynosdb_backup_config
546+
tencentcloud_cynosdb_ssl
546547

547548
Direct Connect(DC)
548549
Data Source
Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,197 @@
1+
package cynosdb
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"log"
7+
"strconv"
8+
"strings"
9+
"time"
10+
11+
tccommon "github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/common"
12+
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
15+
cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107"
16+
17+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
18+
)
19+
20+
func ResourceTencentCloudCynosdbSsl() *schema.Resource {
21+
return &schema.Resource{
22+
Create: resourceTencentCloudCynosdbSslCreate,
23+
Read: resourceTencentCloudCynosdbSslRead,
24+
Update: resourceTencentCloudCynosdbSslUpdate,
25+
Delete: resourceTencentCloudCynosdbSslDelete,
26+
Importer: &schema.ResourceImporter{
27+
State: schema.ImportStatePassthrough,
28+
},
29+
Schema: map[string]*schema.Schema{
30+
"cluster_id": {
31+
Required: true,
32+
Type: schema.TypeString,
33+
Description: "Cluster id.",
34+
},
35+
"instance_id": {
36+
Optional: true,
37+
Type: schema.TypeString,
38+
Description: "instance id.",
39+
},
40+
"status": {
41+
Required: true,
42+
Type: schema.TypeString,
43+
Description: "Whether to enable SSL. `ON` means enabled, `OFF` means not enabled.",
44+
},
45+
"download_url": {
46+
Computed: true,
47+
Type: schema.TypeString,
48+
Description: "Certificate download address.",
49+
},
50+
},
51+
}
52+
}
53+
54+
func resourceTencentCloudCynosdbSslCreate(d *schema.ResourceData, meta interface{}) error {
55+
defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_ssl.create")()
56+
defer tccommon.InconsistentCheck(d, meta)()
57+
58+
var clusterId, instanceId string
59+
clusterId = d.Get("cluster_id").(string)
60+
if v, ok := d.GetOk("instance_id"); ok && v.(string) != "" {
61+
instanceId = v.(string)
62+
}
63+
64+
if instanceId == "" {
65+
d.SetId(clusterId)
66+
} else {
67+
d.SetId(clusterId + tccommon.FILED_SP + instanceId)
68+
}
69+
70+
return resourceTencentCloudCynosdbSslUpdate(d, meta)
71+
}
72+
73+
func resourceTencentCloudCynosdbSslRead(d *schema.ResourceData, meta interface{}) error {
74+
defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_ssl.read")()
75+
defer tccommon.InconsistentCheck(d, meta)()
76+
77+
logId := tccommon.GetLogId(tccommon.ContextNil)
78+
79+
ctx := context.WithValue(context.TODO(), tccommon.LogIdKey, logId)
80+
81+
service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
82+
83+
var clusterId, instanceId string
84+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
85+
clusterId = idSplit[0]
86+
if len(idSplit) > 1 {
87+
instanceId = idSplit[1]
88+
}
89+
90+
ssl, err := service.DescribeSSLStatus(ctx, clusterId, instanceId)
91+
if err != nil {
92+
return err
93+
}
94+
95+
if ssl == nil {
96+
d.SetId("")
97+
log.Printf("[WARN]%s resource `tencentcloud_cynosdb_ssl` [%s] not found, please check if it has been deleted.",
98+
logId, instanceId,
99+
)
100+
return nil
101+
}
102+
103+
_ = d.Set("cluster_id", clusterId)
104+
105+
if instanceId != "" {
106+
_ = d.Set("instance_id", instanceId)
107+
}
108+
if ssl.IsOpenSSL != nil {
109+
if *ssl.IsOpenSSL == "yes" {
110+
_ = d.Set("status", "ON")
111+
} else {
112+
_ = d.Set("status", "OFF")
113+
}
114+
}
115+
if ssl.DownloadUrl != nil {
116+
_ = d.Set("download_url", ssl.DownloadUrl)
117+
}
118+
119+
return nil
120+
}
121+
122+
func resourceTencentCloudCynosdbSslUpdate(d *schema.ResourceData, meta interface{}) error {
123+
defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_ssl.update")()
124+
defer tccommon.InconsistentCheck(d, meta)()
125+
126+
logId := tccommon.GetLogId(tccommon.ContextNil)
127+
128+
var clusterId, instanceId string
129+
idSplit := strings.Split(d.Id(), tccommon.FILED_SP)
130+
clusterId = idSplit[0]
131+
if len(idSplit) > 1 {
132+
instanceId = idSplit[1]
133+
}
134+
135+
var taskId *int64
136+
if v, ok := d.GetOk("status"); ok {
137+
status := v.(string)
138+
if status == "ON" {
139+
request := cynosdb.NewOpenSSLRequest()
140+
request.ClusterId = helper.String(clusterId)
141+
if instanceId != "" {
142+
request.InstanceId = helper.String(instanceId)
143+
}
144+
145+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
146+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().OpenSSL(request)
147+
if e != nil {
148+
return tccommon.RetryError(e)
149+
} else {
150+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
151+
}
152+
taskId = result.Response.TaskId
153+
return nil
154+
})
155+
if err != nil {
156+
log.Printf("[CRITAL]%s update cynosdb ssl failed, reason:%+v", logId, err)
157+
return err
158+
}
159+
} else if status == "OFF" {
160+
request := cynosdb.NewCloseSSLRequest()
161+
request.ClusterId = helper.String(clusterId)
162+
if instanceId != "" {
163+
request.InstanceId = helper.String(instanceId)
164+
}
165+
166+
err := resource.Retry(tccommon.WriteRetryTimeout, func() *resource.RetryError {
167+
result, e := meta.(tccommon.ProviderMeta).GetAPIV3Conn().UseCynosdbClient().CloseSSL(request)
168+
if e != nil {
169+
return tccommon.RetryError(e)
170+
} else {
171+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
172+
}
173+
taskId = result.Response.TaskId
174+
return nil
175+
})
176+
if err != nil {
177+
log.Printf("[CRITAL]%s update cynosdb ssl failed, reason:%+v", logId, err)
178+
return err
179+
}
180+
} else {
181+
return fmt.Errorf("[CRITAL]%s update cynosdb ssl failed, reason:your status must be ON or OFF!", logId)
182+
}
183+
service := CynosdbService{client: meta.(tccommon.ProviderMeta).GetAPIV3Conn()}
184+
conf := tccommon.BuildStateChangeConf([]string{}, []string{"success"}, 10*tccommon.ReadRetryTimeout, time.Second, service.taskStateRefreshFunc(strconv.FormatInt(*taskId, 10), []string{}))
185+
if _, e := conf.WaitForState(); e != nil {
186+
return e
187+
}
188+
}
189+
190+
return resourceTencentCloudCynosdbSslRead(d, meta)
191+
}
192+
193+
func resourceTencentCloudCynosdbSslDelete(d *schema.ResourceData, meta interface{}) error {
194+
defer tccommon.LogElapsed("resource.tencentcloud_cynosdb_ssl.delete")()
195+
196+
return nil
197+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
Provides a resource to create a cynosdb ssl
2+
3+
Example Usage
4+
5+
```hcl
6+
resource "tencentcloud_cynosdb_ssl" "cynosdb_ssl" {
7+
cluster_id = "cynosdbmysql-1e0nzayx"
8+
instance_id = "cynosdbmysql-ins-pfsv6q1e"
9+
status = "ON"
10+
}
11+
```
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package cynosdb_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 TestAccTencentCloudCynosdbSslResource_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: testAccCynosdbSsl,
21+
Check: resource.ComposeTestCheckFunc(
22+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_ssl.cynosdb_ssl", "id"),
23+
resource.TestCheckResourceAttr("tencentcloud_cynosdb_ssl.cynosdb_ssl", "status", "ON"),
24+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_ssl.cynosdb_ssl", "download_url"),
25+
),
26+
},
27+
{
28+
Config: testAccCynosdbSsl_update,
29+
Check: resource.ComposeTestCheckFunc(
30+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_ssl.cynosdb_ssl", "id"),
31+
resource.TestCheckResourceAttr("tencentcloud_cynosdb_ssl.cynosdb_ssl", "status", "OFF"),
32+
resource.TestCheckResourceAttrSet("tencentcloud_cynosdb_ssl.cynosdb_ssl", "download_url"),
33+
),
34+
},
35+
{
36+
ResourceName: "tencentcloud_cynosdb_ssl.cynosdb_ssl",
37+
ImportState: true,
38+
ImportStateVerify: true,
39+
},
40+
},
41+
})
42+
}
43+
44+
const testAccCynosdbSsl = `
45+
resource "tencentcloud_cynosdb_ssl" "cynosdb_ssl" {
46+
cluster_id = "cynosdbmysql-1e0nzayx"
47+
instance_id = "cynosdbmysql-ins-pfsv6q1e"
48+
status = "ON"
49+
}
50+
`
51+
52+
const testAccCynosdbSsl_update = `
53+
resource "tencentcloud_cynosdb_ssl" "cynosdb_ssl" {
54+
cluster_id = "cynosdbmysql-1e0nzayx"
55+
instance_id = "cynosdbmysql-ins-pfsv6q1e"
56+
status = "OFF"
57+
}
58+
`

tencentcloud/services/cynosdb/service_tencentcloud_cynosdb.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2955,3 +2955,62 @@ func (me *CynosdbService) UpgradeClusterVersion(ctx context.Context, clusterId,
29552955

29562956
return
29572957
}
2958+
2959+
func (me *CynosdbService) DescribeSSLStatus(ctx context.Context, clusterId, instanceId string) (ret *cynosdb.DescribeSSLStatusResponseParams, errRet error) {
2960+
logId := tccommon.GetLogId(ctx)
2961+
2962+
request := cynosdb.NewDescribeSSLStatusRequest()
2963+
2964+
if clusterId != "" {
2965+
request.ClusterId = &clusterId
2966+
}
2967+
if instanceId != "" {
2968+
request.InstanceId = &instanceId
2969+
}
2970+
defer func() {
2971+
if errRet != nil {
2972+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
2973+
}
2974+
}()
2975+
2976+
errRet = resource.Retry(tccommon.WriteRetryTimeout*2, func() *resource.RetryError {
2977+
ratelimit.Check(request.GetAction())
2978+
response, err := me.client.UseCynosdbClient().DescribeSSLStatus(request)
2979+
if err != nil {
2980+
return tccommon.RetryError(err)
2981+
}
2982+
ret = response.Response
2983+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
2984+
return nil
2985+
})
2986+
if errRet != nil {
2987+
return
2988+
}
2989+
2990+
return
2991+
}
2992+
2993+
func (me *CynosdbService) taskStateRefreshFunc(taskId string, failStates []string) resource.StateRefreshFunc {
2994+
return func() (interface{}, string, error) {
2995+
request := cynosdb.NewDescribeTasksRequest()
2996+
request.Filters = []*cynosdb.QueryFilter{
2997+
{
2998+
ExactMatch: helper.Bool(true),
2999+
Names: helper.Strings([]string{"TaskId"}),
3000+
Values: helper.Strings([]string{taskId}),
3001+
},
3002+
}
3003+
3004+
ratelimit.Check(request.GetAction())
3005+
object, err := me.client.UseCynosdbClient().DescribeTasks(request)
3006+
3007+
if err != nil {
3008+
return nil, "", err
3009+
}
3010+
if object == nil || object.Response == nil || len(object.Response.TaskList) == 0 || object.Response.TaskList[0].Status == nil {
3011+
return nil, "", nil
3012+
}
3013+
3014+
return object, *object.Response.TaskList[0].Status, nil
3015+
}
3016+
}

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.

0 commit comments

Comments
 (0)