Skip to content

Commit e67f245

Browse files
gitmknanonymous
andauthored
modify test (#1961)
* modify test * fix: modify bin_log * feat: support tencentcloud_mysql_isolate_instance * feat: add changelog * fix: modify bin_log --------- Co-authored-by: anonymous <anonymous@mail.org>
1 parent 6241b93 commit e67f245

12 files changed

+211
-86
lines changed

.changelog/1961.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_mysql_isolate_instance
3+
```

tencentcloud/data_source_tc_mysql_bin_log.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ func dataSourceTencentCloudMysqlBinLogRead(d *schema.ResourceData, meta interfac
230230
remoteInfoMap := map[string]interface{}{}
231231

232232
if remoteInfo.SubBackupId != nil {
233-
remoteInfoMap["sub_backup_id"] = remoteInfo.SubBackupId
233+
remoteInfoMap["sub_backup_id"] = []interface{}{remoteInfo.SubBackupId}
234234
}
235235

236236
if remoteInfo.Region != nil {

tencentcloud/data_source_tc_mysql_slow_log_data_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
)
1010

1111
// go test -i; go test -test.run TestAccTencentCloudMysqlSlowLogDataDataSource_basic -v
12-
func TestAccTencentCloudMysqlSlowLogDataDataSource_basic(t *testing.T) {
12+
func TestAccTencentCloudNeedFixMysqlSlowLogDataDataSource_basic(t *testing.T) {
1313
t.Parallel()
1414

1515
startTime := time.Now().AddDate(0, 0, -29).Unix()

tencentcloud/data_source_tc_mysql_switch_record.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func dataSourceTencentCloudMysqlSwitchRecordRead(d *schema.ResourceData, meta in
7373

7474
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
7575
var items []*cdb.DBSwitchInfo
76-
err := resource.Retry(readRetryTimeout, func() *resource.RetryError {
76+
err := resource.Retry(5*readRetryTimeout, func() *resource.RetryError {
7777
result, e := service.DescribeMysqlSwitchRecordById(ctx, instanceId)
7878
if e != nil {
7979
return retryError(e)

tencentcloud/provider.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -654,6 +654,7 @@ TencentDB for MySQL(cdb)
654654
tencentcloud_mysql_reload_balance_proxy_node
655655
tencentcloud_mysql_ro_start_replication
656656
tencentcloud_mysql_ro_stop_replication
657+
tencentcloud_mysql_isolate_instance
657658
658659
Cloud Monitor(Monitor)
659660
Data Source

tencentcloud/resource_tc_mysql_db_import_job_operation_test.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
77
)
88

9+
// go test -i; go test -test.run TestAccTencentCloudMysqlDbImportJobOperationResource_basic -v
910
func TestAccTencentCloudMysqlDbImportJobOperationResource_basic(t *testing.T) {
1011
t.Parallel()
1112
resource.Test(t, resource.TestCase{
@@ -54,13 +55,21 @@ resource "tencentcloud_mysql_instance" "this" {
5455
}
5556
}
5657
58+
resource "tencentcloud_cos_bucket_object" "object_content" {
59+
bucket = "terraform-ci-1308919341"
60+
key = "/mysql/mysql.sql"
61+
content = "SELECT NOW(),SYSDATE();"
62+
content_type = "binary/octet-stream"
63+
acl = "public-read"
64+
}
65+
5766
resource "tencentcloud_mysql_db_import_job_operation" "db_import_job" {
5867
instance_id = tencentcloud_mysql_instance.this.id
5968
user = "root"
6069
file_name = "mysql.sql"
6170
password = "password123"
6271
# db_name = "t_test"
63-
cos_url = "https://terraform-ci-1308919341.cos.ap-guangzhou.myqcloud.com/mysql/mysql.sql?q-sign-algorithm=sha1&q-ak=AKIDlchzcM5ppPlbSV7yhstd8narnfMtVzZRQsayiPEzHxN5pb5UDeOL2yrNqwn2Yztr&q-sign-time=1684998880;1685002480&q-key-time=1684998880;1685002480&q-header-list=host&q-url-param-list=&q-signature=b7e6165f971009fc3628eca370b9c784269cb948&x-cos-security-token=bF2h2255ZhdpmBoYFCFme0eH2h2wDJPa75147a141a51a01e7e7c49b25de5baa3r9JfJvPSQ-zrBNd5wWgKPO8slY1_PK34fw-6oxLB6EnUez5quPhZ2bPGjZ9Wmktp3st44c-0zipO4MFoQw5ZQYLuezMrpfgejRtgzcMA6xg9vAjfhYnDEmGLbAirarpWmjNotia7Xgo0sr6hVjz7pcOXhs327895IjQDQrnYMw4CcZYaekjm7sEv51XqK5V5"
64-
}
72+
cos_url = "https://terraform-ci-1308919341.cos.ap-guangzhou.myqcloud.com${tencentcloud_cos_bucket_object.object_content.key}"
73+
}
6574
6675
`

tencentcloud/resource_tc_mysql_isolate_instance.go

Lines changed: 105 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,10 @@ Example Usage
55
66
```hcl
77
resource "tencentcloud_mysql_isolate_instance" "isolate_instance" {
8-
instance_id = "cdb-c1nl9rpv"
8+
instance_id = "cdb-1tru99al"
9+
operate = "recover"
910
}
1011
```
11-
12-
Import
13-
14-
mysql isolate_instance can be imported using the id, e.g.
15-
16-
```
17-
terraform import tencentcloud_mysql_isolate_instance.isolate_instance isolate_instance_id
18-
```
1912
*/
2013
package tencentcloud
2114

@@ -27,17 +20,17 @@ import (
2720
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
2821
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
2922
mysql "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb/v20170320"
23+
"github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
3024
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
3125
)
3226

3327
func resourceTencentCloudMysqlIsolateInstance() *schema.Resource {
3428
return &schema.Resource{
3529
Create: resourceTencentCloudMysqlIsolateInstanceCreate,
3630
Read: resourceTencentCloudMysqlIsolateInstanceRead,
31+
Update: resourceTencentCloudMysqlIsolateInstanceUpdate,
3732
Delete: resourceTencentCloudMysqlIsolateInstanceDelete,
38-
Importer: &schema.ResourceImporter{
39-
State: schema.ImportStatePassthrough,
40-
},
33+
4134
Schema: map[string]*schema.Schema{
4235
"instance_id": {
4336
Required: true,
@@ -46,9 +39,16 @@ func resourceTencentCloudMysqlIsolateInstance() *schema.Resource {
4639
Description: "Instance ID, the format is: cdb-c1nl9rpv, which is the same as the instance ID displayed on the cloud database console page, and you can use the [query instance list] (https://cloud.tencent.com/document/api/236/15872) interface Gets the value of the field InstanceId in the output parameter.",
4740
},
4841

42+
"operate": {
43+
Required: true,
44+
Type: schema.TypeString,
45+
ValidateFunc: validateAllowedStringValue([]string{"isolate", "recover"}),
46+
Description: "Manipulate instance, `isolate` - isolate instance, `recover`- recover isolated instance.",
47+
},
48+
4949
"status": {
5050
Computed: true,
51-
Type: schema.TypeString,
51+
Type: schema.TypeInt,
5252
Description: "Instance status.",
5353
},
5454
},
@@ -59,74 +59,28 @@ func resourceTencentCloudMysqlIsolateInstanceCreate(d *schema.ResourceData, meta
5959
defer logElapsed("resource.tencentcloud_mysql_isolate_instance.create")()
6060
defer inconsistentCheck(d, meta)()
6161

62-
logId := getLogId(contextNil)
63-
ctx := context.WithValue(context.TODO(), logIdKey, logId)
64-
65-
var (
66-
request = mysql.NewIsolateDBInstanceRequest()
67-
response = mysql.NewIsolateDBInstanceResponse()
68-
instanceId string
69-
)
62+
var instanceId string
7063
if v, ok := d.GetOk("instance_id"); ok {
7164
instanceId = v.(string)
72-
request.InstanceId = helper.String(v.(string))
73-
}
74-
75-
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
76-
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().IsolateDBInstance(request)
77-
if e != nil {
78-
return retryError(e)
79-
} else {
80-
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), result.ToJsonString())
81-
}
82-
response = result
83-
return nil
84-
})
85-
if err != nil {
86-
log.Printf("[CRITAL]%s create mysql isolateInstance failed, reason:%+v", logId, err)
87-
return err
8865
}
8966

9067
d.SetId(instanceId)
9168

92-
asyncRequestId := *response.Response.AsyncRequestId
93-
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
94-
err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
95-
taskStatus, message, err := service.DescribeAsyncRequestInfo(ctx, asyncRequestId)
96-
if err != nil {
97-
return resource.NonRetryableError(err)
98-
}
99-
if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
100-
return nil
101-
}
102-
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
103-
return resource.RetryableError(fmt.Errorf("%s create mysql isolateInstance status is %s", instanceId, taskStatus))
104-
}
105-
err = fmt.Errorf("%s create mysql isolateInstance is %s,we won't wait for it finish ,it show message:%s", instanceId, taskStatus, message)
106-
return resource.NonRetryableError(err)
107-
})
108-
109-
if err != nil {
110-
log.Printf("[CRITAL]%s create mysql isolateInstance fail, reason:%s\n ", logId, err.Error())
111-
return err
112-
}
113-
114-
return resourceTencentCloudMysqlIsolateInstanceRead(d, meta)
69+
return resourceTencentCloudMysqlIsolateInstanceUpdate(d, meta)
11570
}
11671

11772
func resourceTencentCloudMysqlIsolateInstanceRead(d *schema.ResourceData, meta interface{}) error {
11873
defer logElapsed("resource.tencentcloud_mysql_isolate_instance.read")()
11974
defer inconsistentCheck(d, meta)()
12075

12176
logId := getLogId(contextNil)
122-
12377
ctx := context.WithValue(context.TODO(), logIdKey, logId)
12478

12579
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
12680

12781
instanceId := d.Id()
12882

129-
isolateInstance, err := service.DescribeIsolatedDBInstanceById(ctx, instanceId)
83+
isolateInstance, err := service.DescribeDBInstanceById(ctx, instanceId)
13084
if err != nil {
13185
return err
13286
}
@@ -148,19 +102,103 @@ func resourceTencentCloudMysqlIsolateInstanceRead(d *schema.ResourceData, meta i
148102
return nil
149103
}
150104

151-
func resourceTencentCloudMysqlIsolateInstanceDelete(d *schema.ResourceData, meta interface{}) error {
152-
defer logElapsed("resource.tencentcloud_mysql_isolate_instance.delete")()
105+
func resourceTencentCloudMysqlIsolateInstanceUpdate(d *schema.ResourceData, meta interface{}) error {
106+
defer logElapsed("resource.tencentcloud_mysql_isolate_instance.update")()
153107
defer inconsistentCheck(d, meta)()
154108

155109
logId := getLogId(contextNil)
156110
ctx := context.WithValue(context.TODO(), logIdKey, logId)
157111

158-
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
159112
instanceId := d.Id()
160113

161-
if err := service.DeleteMysqlIsolateInstanceById(ctx, instanceId); err != nil {
162-
return err
114+
var operate string
115+
if v, ok := d.GetOk("operate"); ok {
116+
operate = v.(string)
117+
}
118+
119+
if operate == "isolate" {
120+
request := mysql.NewIsolateDBInstanceRequest()
121+
request.InstanceId = helper.String(instanceId)
122+
err := resource.Retry(writeRetryTimeout, func() *resource.RetryError {
123+
result, e := meta.(*TencentCloudClient).apiV3Conn.UseMysqlClient().IsolateDBInstance(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 create mysql isolateInstance failed, reason:%+v", logId, err)
133+
return err
134+
}
135+
136+
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
137+
err = resource.Retry(7*readRetryTimeout, func() *resource.RetryError {
138+
mysqlInfo, err := service.DescribeDBInstanceById(ctx, instanceId)
139+
140+
if err != nil {
141+
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
142+
return resource.RetryableError(err)
143+
} else {
144+
return resource.NonRetryableError(err)
145+
}
146+
}
147+
if mysqlInfo == nil {
148+
return nil
149+
}
150+
if *mysqlInfo.Status == MYSQL_STATUS_ISOLATING || *mysqlInfo.Status == MYSQL_STATUS_RUNNING {
151+
return resource.RetryableError(fmt.Errorf("mysql isolating."))
152+
}
153+
if *mysqlInfo.Status == MYSQL_STATUS_ISOLATED {
154+
return nil
155+
}
156+
return resource.NonRetryableError(fmt.Errorf("after IsolateDBInstance mysql Status is %d", *mysqlInfo.Status))
157+
})
158+
159+
if err != nil {
160+
log.Printf("[CRITAL]%s Isolate mysql isolateInstance fail, reason:%s\n ", logId, err.Error())
161+
return err
162+
}
163+
} else if operate == "recover" {
164+
service := MysqlService{client: meta.(*TencentCloudClient).apiV3Conn}
165+
if err := service.DeleteMysqlIsolateInstanceById(ctx, instanceId); err != nil {
166+
return err
167+
}
168+
err := resource.Retry(7*readRetryTimeout, func() *resource.RetryError {
169+
mysqlInfo, err := service.DescribeDBInstanceById(ctx, instanceId)
170+
171+
if err != nil {
172+
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
173+
return resource.RetryableError(err)
174+
} else {
175+
return resource.NonRetryableError(err)
176+
}
177+
}
178+
if mysqlInfo == nil {
179+
return nil
180+
}
181+
if *mysqlInfo.Status == MYSQL_STATUS_ISOLATED {
182+
return resource.RetryableError(fmt.Errorf("mysql recovering."))
183+
}
184+
if *mysqlInfo.Status == MYSQL_STATUS_RUNNING {
185+
return nil
186+
}
187+
return resource.NonRetryableError(fmt.Errorf("after ReleaseIsolatedDBInstances mysql Status is %d", *mysqlInfo.Status))
188+
})
189+
190+
if err != nil {
191+
log.Printf("[CRITAL]%s ReleaseIsolatedDBInstances mysql fail, reason:%s\n ", logId, err.Error())
192+
return err
193+
}
163194
}
164195

196+
return resourceTencentCloudMysqlIsolateInstanceRead(d, meta)
197+
}
198+
199+
func resourceTencentCloudMysqlIsolateInstanceDelete(d *schema.ResourceData, meta interface{}) error {
200+
defer logElapsed("resource.tencentcloud_mysql_isolate_instance.delete")()
201+
defer inconsistentCheck(d, meta)()
202+
165203
return nil
166204
}

tencentcloud/resource_tc_mysql_isolate_instance_test.go

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ import (
66
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
77
)
88

9+
// go test -i; go test -test.run TestAccTencentCloudMysqlIsolateInstanceResource_basic -v
910
func TestAccTencentCloudMysqlIsolateInstanceResource_basic(t *testing.T) {
10-
t.Parallel()
11+
1112
resource.Test(t, resource.TestCase{
1213
PreCheck: func() {
1314
testAccPreCheck(t)
@@ -16,12 +17,17 @@ func TestAccTencentCloudMysqlIsolateInstanceResource_basic(t *testing.T) {
1617
Steps: []resource.TestStep{
1718
{
1819
Config: testAccMysqlIsolateInstance,
19-
Check: resource.ComposeTestCheckFunc(resource.TestCheckResourceAttrSet("tencentcloud_mysql_isolate_instance.isolate_instance", "id")),
20+
Check: resource.ComposeTestCheckFunc(
21+
resource.TestCheckResourceAttrSet("tencentcloud_mysql_isolate_instance.isolate_instance", "id"),
22+
resource.TestCheckResourceAttr("tencentcloud_mysql_isolate_instance.isolate_instance", "status", "5"),
23+
),
2024
},
2125
{
22-
ResourceName: "tencentcloud_mysql_isolate_instance.isolate_instance",
23-
ImportState: true,
24-
ImportStateVerify: true,
26+
Config: testAccMysqlIsolateInstanceUp,
27+
Check: resource.ComposeTestCheckFunc(
28+
resource.TestCheckResourceAttrSet("tencentcloud_mysql_isolate_instance.isolate_instance", "id"),
29+
resource.TestCheckResourceAttr("tencentcloud_mysql_isolate_instance.isolate_instance", "status", "1"),
30+
),
2531
},
2632
},
2733
})
@@ -30,7 +36,17 @@ func TestAccTencentCloudMysqlIsolateInstanceResource_basic(t *testing.T) {
3036
const testAccMysqlIsolateInstance = `
3137
3238
resource "tencentcloud_mysql_isolate_instance" "isolate_instance" {
33-
instance_id = ""
39+
instance_id = "cdb-fitq5t9h"
40+
operate = "isolate"
41+
}
42+
43+
`
44+
45+
const testAccMysqlIsolateInstanceUp = `
46+
47+
resource "tencentcloud_mysql_isolate_instance" "isolate_instance" {
48+
instance_id = "cdb-fitq5t9h"
49+
operate = "recover"
3450
}
3551
3652
`

0 commit comments

Comments
 (0)