Skip to content

Commit 0950cd6

Browse files
authored
support dcdb: config resource (#1863)
1 parent 81dc716 commit 0950cd6

17 files changed

+2633
-63
lines changed

.changelog/1863.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
```release-note:new-resource
2+
tencentcloud_dcdb_db_sync_mode_config
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_dcdb_encrypt_attributes_config
7+
```

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ require (
4545
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dayu v1.0.335
4646
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dbbrain v1.0.652
4747
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.633
48-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.572
48+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.670
4949
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.539
5050
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.0.414
5151
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dts v1.0.628

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.633 h1:Ul5iNhXo
862862
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dc v1.0.633/go.mod h1:tc6Hvf03M1cBtMC1IKSa5mlOn3kpxWOwhWU1fRy+KEE=
863863
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.572 h1:Yn1ZzciHvRg1V694c70VSZQ9tzbgZHrInvlpqE/M7wM=
864864
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.572/go.mod h1:+kYEqwZE8OlDhFMsb6hu0PD9CXQJOOnju2xOAUHp/dk=
865+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.670 h1:rydm5AO6/1eOuBvnm8vsUyZGatnopWYDPxuxLYsKzg8=
866+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb v1.0.670/go.mod h1:F8W8ZhpF/mCm8if/302HXQ4vLEixW+pNJYfyaVDjQ08=
865867
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.539 h1:V+oo20w9aLxAoSSEGVplke2kq72MdUA4OuagCv4gsiY=
866868
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dnspod v1.0.539/go.mod h1:gtPd3Hy8DA/4EErHNJliWeJB1sxZ9DhqenWiYZ3PF6g=
867869
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/domain v1.0.414 h1:egwjvOEUKBaxsoRVn/YSEhp2E8qdh77Ous9A/wftDo0=

tencentcloud/provider.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1104,6 +1104,8 @@ TDSQL for MySQL(DCDB)
11041104
tencentcloud_dcdb_security_group_attachment
11051105
tencentcloud_dcdb_account_privileges
11061106
tencentcloud_dcdb_db_parameters
1107+
tencentcloud_dcdb_db_sync_mode_config
1108+
tencentcloud_dcdb_encrypt_attributes_config
11071109
11081110
Short Message Service(SMS)
11091111
Resource
@@ -2399,6 +2401,8 @@ func Provider() *schema.Provider {
23992401
"tencentcloud_dcdb_db_instance": resourceTencentCloudDcdbDbInstance(),
24002402
"tencentcloud_dcdb_account_privileges": resourceTencentCloudDcdbAccountPrivileges(),
24012403
"tencentcloud_dcdb_db_parameters": resourceTencentCloudDcdbDbParameters(),
2404+
"tencentcloud_dcdb_encrypt_attributes_config": resourceTencentCloudDcdbEncryptAttributesConfig(),
2405+
"tencentcloud_dcdb_db_sync_mode_config": resourceTencentCloudDcdbDbSyncModeConfig(),
24022406
"tencentcloud_cat_task_set": resourceTencentCloudCatTaskSet(),
24032407
"tencentcloud_mariadb_dedicatedcluster_db_instance": resourceTencentCloudMariadbDedicatedclusterDbInstance(),
24042408
"tencentcloud_mariadb_instance": resourceTencentCloudMariadbInstance(),

tencentcloud/resource_tc_dcdb_db_instance.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -475,11 +475,11 @@ func resourceTencentCloudDcdbDbInstanceRead(d *schema.ResourceData, meta interfa
475475
}
476476

477477
if dbInstance.VpcId != nil {
478-
_ = d.Set("vpc_id", dbInstance.VpcId)
478+
_ = d.Set("vpc_id", helper.Int64ToStrPoint(*dbInstance.VpcId))
479479
}
480480

481481
if dbInstance.SubnetId != nil {
482-
_ = d.Set("subnet_id", dbInstance.SubnetId)
482+
_ = d.Set("subnet_id", helper.Int64ToStrPoint(*dbInstance.SubnetId))
483483
}
484484

485485
if dbInstance.DbVersionId != nil {
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
/*
2+
Provides a resource to create a dcdb db_sync_mode_config
3+
4+
Example Usage
5+
6+
```hcl
7+
resource "tencentcloud_dcdb_db_sync_mode_config" "config" {
8+
instance_id = "%s"
9+
sync_mode = 2
10+
}
11+
```
12+
13+
Import
14+
15+
dcdb db_sync_mode_config can be imported using the id, e.g.
16+
17+
```
18+
terraform import tencentcloud_dcdb_db_sync_mode_config.db_sync_mode_config db_sync_mode_config_id
19+
```
20+
*/
21+
package tencentcloud
22+
23+
import (
24+
"context"
25+
"log"
26+
"time"
27+
28+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
29+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
30+
dcdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/dcdb/v20180411"
31+
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
32+
)
33+
34+
func resourceTencentCloudDcdbDbSyncModeConfig() *schema.Resource {
35+
return &schema.Resource{
36+
Create: resourceTencentCloudDcdbDbSyncModeConfigCreate,
37+
Read: resourceTencentCloudDcdbDbSyncModeConfigRead,
38+
Update: resourceTencentCloudDcdbDbSyncModeConfigUpdate,
39+
Delete: resourceTencentCloudDcdbDbSyncModeConfigDelete,
40+
Importer: &schema.ResourceImporter{
41+
State: schema.ImportStatePassthrough,
42+
},
43+
Schema: map[string]*schema.Schema{
44+
"instance_id": {
45+
Required: true,
46+
Type: schema.TypeString,
47+
Description: "ID of the instance for which to modify the sync mode. The ID is in the format of `tdsql-ow728lmc`.",
48+
},
49+
50+
"sync_mode": {
51+
Required: true,
52+
Type: schema.TypeInt,
53+
Description: "Sync mode. Valid values: `0` (async), `1` (strong sync), `2` (downgradable strong sync).",
54+
},
55+
},
56+
}
57+
}
58+
59+
func resourceTencentCloudDcdbDbSyncModeConfigCreate(d *schema.ResourceData, meta interface{}) error {
60+
defer logElapsed("resource.tencentcloud_dcdb_db_sync_mode_config.create")()
61+
defer inconsistentCheck(d, meta)()
62+
63+
var instanceId string
64+
if v, ok := d.GetOk("instance_id"); ok {
65+
instanceId = v.(string)
66+
}
67+
d.SetId(instanceId)
68+
69+
return resourceTencentCloudDcdbDbSyncModeConfigUpdate(d, meta)
70+
}
71+
72+
func resourceTencentCloudDcdbDbSyncModeConfigRead(d *schema.ResourceData, meta interface{}) error {
73+
defer logElapsed("resource.tencentcloud_dcdb_db_sync_mode_config.read")()
74+
defer inconsistentCheck(d, meta)()
75+
76+
logId := getLogId(contextNil)
77+
78+
ctx := context.WithValue(context.TODO(), logIdKey, logId)
79+
80+
service := DcdbService{client: meta.(*TencentCloudClient).apiV3Conn}
81+
82+
instanceId := d.Id()
83+
84+
dbSyncModeConfig, err := service.DescribeDcdbDbSyncModeConfigById(ctx, instanceId)
85+
if err != nil {
86+
return err
87+
}
88+
89+
if dbSyncModeConfig == nil {
90+
d.SetId("")
91+
log.Printf("[WARN]%s resource `DcdbDbSyncModeConfig` [%s] not found, please check if it has been deleted.\n", logId, d.Id())
92+
return nil
93+
}
94+
95+
_ = d.Set("instance_id", instanceId)
96+
97+
if dbSyncModeConfig.SyncMode != nil {
98+
_ = d.Set("sync_mode", dbSyncModeConfig.SyncMode)
99+
}
100+
101+
return nil
102+
}
103+
104+
func resourceTencentCloudDcdbDbSyncModeConfigUpdate(d *schema.ResourceData, meta interface{}) error {
105+
defer logElapsed("resource.tencentcloud_dcdb_db_sync_mode_config.update")()
106+
defer inconsistentCheck(d, meta)()
107+
108+
logId := getLogId(contextNil)
109+
110+
request := dcdb.NewModifyDBSyncModeRequest()
111+
112+
instanceId := d.Id()
113+
114+
request.InstanceId = &instanceId
115+
116+
if d.HasChange("sync_mode") {
117+
if v, ok := d.GetOkExists("sync_mode"); ok {
118+
request.SyncMode = helper.IntInt64(v.(int))
119+
}
120+
}
121+
122+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
123+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseDcdbClient().ModifyDBSyncMode(request)
124+
if e != nil {
125+
return retryError(e)
126+
} else {
127+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
128+
}
129+
return nil
130+
})
131+
if err != nil {
132+
log.Printf("[CRITAL]%s update dcdb dbSyncModeConfig failed, reason:%+v", logId, err)
133+
return err
134+
}
135+
136+
service := DcdbService{client: meta.(*TencentCloudClient).apiV3Conn}
137+
138+
conf := BuildStateChangeConf([]string{}, []string{"0"}, 2*readRetryTimeout, time.Second, service.DcdbDbSyncModeConfigStateRefreshFunc(d.Id(), []string{}))
139+
140+
if _, e := conf.WaitForState(); e != nil {
141+
return e
142+
}
143+
144+
return resourceTencentCloudDcdbDbSyncModeConfigRead(d, meta)
145+
}
146+
147+
func resourceTencentCloudDcdbDbSyncModeConfigDelete(d *schema.ResourceData, meta interface{}) error {
148+
defer logElapsed("resource.tencentcloud_dcdb_db_sync_mode_config.delete")()
149+
defer inconsistentCheck(d, meta)()
150+
151+
return nil
152+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package tencentcloud
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
8+
)
9+
10+
func TestAccTencentCloudDcdbDbSyncModeConfigResource_basic(t *testing.T) {
11+
t.Parallel()
12+
resource.Test(t, resource.TestCase{
13+
PreCheck: func() {
14+
testAccPreCheck(t)
15+
},
16+
// PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) },
17+
Providers: testAccProviders,
18+
Steps: []resource.TestStep{
19+
{
20+
Config: fmt.Sprintf(testAccDcdbDbSyncModeConfig, defaultDcdbInstanceId),
21+
Check: resource.ComposeTestCheckFunc(
22+
resource.TestCheckResourceAttrSet("tencentcloud_dcdb_db_sync_mode_config.config", "id"),
23+
resource.TestCheckResourceAttrSet("tencentcloud_dcdb_db_sync_mode_config.config", "instance_id"),
24+
resource.TestCheckResourceAttr("tencentcloud_dcdb_db_sync_mode_config.config", "sync_mode", "2"),
25+
),
26+
},
27+
{
28+
Config: fmt.Sprintf(testAccDcdbDbSyncModeConfig_update, defaultDcdbInstanceId),
29+
Check: resource.ComposeTestCheckFunc(
30+
resource.TestCheckResourceAttrSet("tencentcloud_dcdb_db_sync_mode_config.config", "id"),
31+
resource.TestCheckResourceAttrSet("tencentcloud_dcdb_db_sync_mode_config.config", "instance_id"),
32+
resource.TestCheckResourceAttr("tencentcloud_dcdb_db_sync_mode_config.config", "sync_mode", "1"),
33+
),
34+
},
35+
{
36+
ResourceName: "tencentcloud_dcdb_db_sync_mode_config.config",
37+
ImportState: true,
38+
ImportStateVerify: true,
39+
},
40+
},
41+
})
42+
}
43+
44+
const testAccDcdbDbSyncModeConfig = `
45+
46+
resource "tencentcloud_dcdb_db_sync_mode_config" "config" {
47+
instance_id = "%s"
48+
sync_mode = 2
49+
}
50+
51+
`
52+
53+
const testAccDcdbDbSyncModeConfig_update = `
54+
55+
resource "tencentcloud_dcdb_db_sync_mode_config" "config" {
56+
instance_id = "%s"
57+
sync_mode = 1
58+
}
59+
60+
`

0 commit comments

Comments
 (0)