Skip to content

Commit d2840d8

Browse files
gitmknanonymous
andauthored
feat: support proxy (#1911)
* feat: support proxy * fix: update sdk * fix: fmt * feat: cdb support proxy * fix: cdb modify host * feat: add changelog * fix: modify proxy * fix: modify changelog --------- Co-authored-by: anonymous <anonymous@mail.org>
1 parent 65f38e8 commit d2840d8

37 files changed

+2494
-206
lines changed

.changelog/1911.txt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
```release-note:new-resource
2+
tencentcloud_mysql_proxy
3+
```
4+
5+
```release-note:new-resource
6+
tencentcloud_mysql_reset_root_account
7+
```
8+
9+
```release-note:new-resource
10+
tencentcloud_mysql_verify_root_account
11+
```
12+
13+
```release-note:new-resource
14+
tencentcloud_mysql_reload_balance_proxy_node
15+
```
16+
17+
```release-note:new-resource
18+
tencentcloud_mysql_ro_start_replication
19+
```
20+
21+
```release-note:new-resource
22+
tencentcloud_mysql_ro_stop_replication
23+
```
24+
25+
```release-note:enhancement
26+
resource/tencentcloud_mysql_account: support update `host`
27+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ require (
3030
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cam v1.0.409
3131
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cat v1.0.520
3232
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.591
33-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.658
33+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.688
3434
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539
3535
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.627
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/chdfs v1.0.600
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ckafka v1.0.667
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.659
3939
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
4040
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.663
41-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.687
41+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.688
4242
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624
4343
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589
4444
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.687

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -786,6 +786,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.591 h1:TPGLjH6
786786
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cbs v1.0.591/go.mod h1:nCAGfVTXZkVnurkbjF3b0FM6RwGztE9t8D9Ms1unaKo=
787787
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.658 h1:9lcl2TyePN9iL0uxR6foazZmzGxmlL9VszfuQIPrTs0=
788788
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.658/go.mod h1:ijeny+Q903x+L0lBzYKT+opPp9/5DSrJ2XcBDeVXuto=
789+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.688 h1:496SFS8Byk5FFBAbKgmnD7AemK5swkp21PKhOAC+HH4=
790+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdb v1.0.688/go.mod h1:W9nkytcj6/fzGhil86wGtD8oZmY1Z4JuwJ3m11/mWCg=
789791
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539 h1:0L6nZhT2bToTc/n1z3HOpNgdu5VX5ulmqIuPY+8UozA=
790792
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cdn v1.0.539/go.mod h1:6Syk7W5fdDf0BLvX+RXL5obQ6unkt3Id4aN2QqVrV6U=
791793
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cfs v1.0.627 h1:nChNdoCUWQZciiJj3gRCWoHBO/8LituLQOdCRREIrS4=
@@ -858,6 +860,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.683 h1:HGTN
858860
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.683/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
859861
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.687 h1:Chd/UQ9pnA99epvEzAAsY8QaOuNGM37hR8ReZWk+H4A=
860862
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.687/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
863+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.688 h1:NvpmuwSOoOASDtvz/+ZI+QS7zaWQp9FBQQxBY0p5uhA=
864+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.688/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
861865
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624 h1:nEZqsoqt1pEoaP9JjkHQy3/H00suCfzlHW1qOm2nYD8=
862866
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.624/go.mod h1:+TXSVyeKwt1IhZRqKPbTREteBcP+K07Q846/ilNzLWA=
863867
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589 h1:LZihgirMH0vsaGScYexxwY0fTss9vHaSZs/YOQUVESg=

tencentcloud/data_source_tc_cynosdb_instance_slow_queries.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ package tencentcloud
5656

5757
import (
5858
"context"
59+
5960
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
6061
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
6162
cynosdb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb/v20190107"

tencentcloud/provider.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,12 @@ TencentDB for MySQL(cdb)
629629
tencentcloud_mysql_ro_instance_ip
630630
tencentcloud_mysql_ro_group_load_operation
631631
tencentcloud_mysql_switch_master_slave_operation
632+
tencentcloud_mysql_proxy
633+
tencentcloud_mysql_reset_root_account
634+
tencentcloud_mysql_verify_root_account
635+
tencentcloud_mysql_reload_balance_proxy_node
636+
tencentcloud_mysql_ro_start_replication
637+
tencentcloud_mysql_ro_stop_replication
632638
633639
Cloud Monitor(Monitor)
634640
Data Source
@@ -2305,6 +2311,13 @@ func Provider() *schema.Provider {
23052311
"tencentcloud_mysql_ro_instance_ip": resourceTencentCloudMysqlRoInstanceIp(),
23062312
"tencentcloud_mysql_ro_group_load_operation": resourceTencentCloudMysqlRoGroupLoadOperation(),
23072313
"tencentcloud_mysql_switch_master_slave_operation": resourceTencentCloudMysqlSwitchMasterSlaveOperation(),
2314+
"tencentcloud_mysql_proxy": resourceTencentCloudMysqlProxy(),
2315+
"tencentcloud_mysql_reset_root_account": resourceTencentCloudMysqlResetRootAccount(),
2316+
"tencentcloud_mysql_verify_root_account": resourceTencentCloudMysqlVerifyRootAccount(),
2317+
"tencentcloud_mysql_reload_balance_proxy_node": resourceTencentCloudMysqlReloadBalanceProxyNode(),
2318+
"tencentcloud_mysql_ro_start_replication": resourceTencentCloudMysqlRoStartReplication(),
2319+
"tencentcloud_mysql_ro_stop_replication": resourceTencentCloudMysqlRoStopReplication(),
2320+
"tencentcloud_mysql_switch_proxy": resourceTencentCloudMysqlSwitchProxy(),
23082321
"tencentcloud_cos_bucket": resourceTencentCloudCosBucket(),
23092322
"tencentcloud_cos_bucket_object": resourceTencentCloudCosBucketObject(),
23102323
"tencentcloud_cos_bucket_referer": resourceTencentCloudCosBucketReferer(),

tencentcloud/resource_tc_mysql_account.go

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@ func resourceTencentCloudMysqlAccount() *schema.Resource {
5959
"host": {
6060
Type: schema.TypeString,
6161
Optional: true,
62-
ForceNew: true,
6362
Default: MYSQL_DEFAULT_ACCOUNT_HOST,
6463
Description: "Account host, default is `%`.",
6564
},
@@ -316,6 +315,42 @@ func resourceTencentCloudMysqlAccountUpdate(d *schema.ResourceData, meta interfa
316315

317316
}
318317

318+
if d.HasChange("host") {
319+
oldHost, newHost := d.GetChange("host")
320+
asyncRequestId, err := mysqlService.ModifyAccountHost(ctx, mysqlId, accountName, oldHost.(string), newHost.(string))
321+
if err != nil {
322+
return err
323+
}
324+
325+
err = resource.Retry(readRetryTimeout, func() *resource.RetryError {
326+
taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId)
327+
if err != nil {
328+
return resource.NonRetryableError(err)
329+
}
330+
if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
331+
return nil
332+
}
333+
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
334+
return resource.RetryableError(fmt.Errorf("%s modify account host %s.%s task status is %s", mysqlId, accountName, accountHost, taskStatus))
335+
}
336+
err = fmt.Errorf("modify mysql account host task status is %s,we won't wait for it finish ,it show message:%s", taskStatus, message)
337+
return resource.NonRetryableError(err)
338+
})
339+
340+
if err != nil {
341+
log.Printf("[CRITAL]%s modify mysql account host fail, reason:%s\n ", logId, err.Error())
342+
return err
343+
}
344+
345+
resourceId := fmt.Sprintf("%s%s%s", mysqlId, FILED_SP, accountName)
346+
347+
if newHost.(string) != MYSQL_DEFAULT_ACCOUNT_HOST {
348+
resourceId += FILED_SP + newHost.(string)
349+
}
350+
351+
d.SetId(resourceId)
352+
}
353+
319354
d.Partial(false)
320355

321356
return nil

tencentcloud/resource_tc_mysql_account_test.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func TestAccTencentCloudMysqlAccountResource_basic(t *testing.T) {
9090
Check: resource.ComposeAggregateTestCheckFunc(
9191
testAccCheckMysqlAccountExists("tencentcloud_mysql_account.mysql_account"),
9292
resource.TestCheckResourceAttrSet("tencentcloud_mysql_account.mysql_account", "mysql_id"),
93-
resource.TestCheckResourceAttr("tencentcloud_mysql_account.mysql_account", "name", "keep_dbbrain"),
93+
resource.TestCheckResourceAttr("tencentcloud_mysql_account.mysql_account", "name", "terraform_test"),
9494
resource.TestCheckResourceAttr("tencentcloud_mysql_account.mysql_account", "description", "test from terraform"),
9595
resource.TestCheckResourceAttr("tencentcloud_mysql_account.mysql_account", "max_user_connections", "10"),
9696
),
@@ -103,6 +103,16 @@ func TestAccTencentCloudMysqlAccountResource_basic(t *testing.T) {
103103
"password",
104104
},
105105
},
106+
{
107+
Config: testAccMysqlAccountUp(),
108+
Check: resource.ComposeAggregateTestCheckFunc(
109+
testAccCheckMysqlAccountExists("tencentcloud_mysql_account.mysql_account"),
110+
resource.TestCheckResourceAttrSet("tencentcloud_mysql_account.mysql_account", "mysql_id"),
111+
resource.TestCheckResourceAttr("tencentcloud_mysql_account.mysql_account", "name", "terraform_test"),
112+
resource.TestCheckResourceAttr("tencentcloud_mysql_account.mysql_account", "description", "test from terraform"),
113+
resource.TestCheckResourceAttr("tencentcloud_mysql_account.mysql_account", "max_user_connections", "10"),
114+
),
115+
},
106116
},
107117
})
108118
}
@@ -204,11 +214,26 @@ func testAccMysqlAccount() string {
204214
205215
resource "tencentcloud_mysql_account" "mysql_account" {
206216
mysql_id = local.mysql_id
207-
name = "keep_dbbrain"
217+
name = "terraform_test"
208218
host = "192.168.0.%%"
209219
password = "Test@123456#"
210220
description = "test from terraform"
211221
max_user_connections = 10
212222
}
213223
`, CommonPresetMysql)
214224
}
225+
226+
func testAccMysqlAccountUp() string {
227+
return fmt.Sprintf(`
228+
%s
229+
230+
resource "tencentcloud_mysql_account" "mysql_account" {
231+
mysql_id = local.mysql_id
232+
name = "terraform_test"
233+
host = "192.168.1.%%"
234+
password = "Test@123456#"
235+
description = "test from terraform"
236+
max_user_connections = 10
237+
}
238+
`, CommonPresetMysql)
239+
}

tencentcloud/resource_tc_mysql_instance.go

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,11 +251,20 @@ func resourceTencentCloudMysqlInstance() *schema.Resource {
251251
},
252252
"engine_version": {
253253
Type: schema.TypeString,
254-
ForceNew: true,
255254
Optional: true,
256255
ValidateFunc: validateAllowedStringValue(MYSQL_SUPPORTS_ENGINE),
257256
Default: MYSQL_SUPPORTS_ENGINE[len(MYSQL_SUPPORTS_ENGINE)-2],
258-
Description: "The version number of the database engine to use. Supported versions include 5.5/5.6/5.7/8.0, and default is 5.7.",
257+
Description: "The version number of the database engine to use. Supported versions include 5.5/5.6/5.7/8.0, and default is 5.7. Upgrade the instance engine version to support 5.6/5.7 and switch immediately.",
258+
},
259+
"upgrade_subversion": {
260+
Type: schema.TypeInt,
261+
Optional: true,
262+
Description: "Whether it is a kernel subversion upgrade, supported values: 1 - upgrade the kernel subversion; 0 - upgrade the database engine version. Only need to fill in when upgrading kernel subversion and engine version.",
263+
},
264+
"max_deay_time": {
265+
Type: schema.TypeInt,
266+
Optional: true,
267+
Description: "Latency threshold. Value range 1~10. Only need to fill in when upgrading kernel subversion and engine version.",
259268
},
260269

261270
"availability_zone": {
@@ -1085,6 +1094,53 @@ func mysqlAllInstanceRoleUpdate(ctx context.Context, d *schema.ResourceData, met
10851094

10861095
}
10871096

1097+
if d.HasChange("engine_version") || d.HasChange("upgrade_subversion") || d.HasChange("max_deay_time") {
1098+
engineVersion := ""
1099+
var upgradeSubversion int64
1100+
var maxDelayTime int64
1101+
if v, ok := d.GetOk("engine_version"); ok {
1102+
engineVersion = v.(string)
1103+
}
1104+
if v, ok := d.GetOk("upgrade_subversion"); ok {
1105+
upgradeSubversion = int64(v.(int))
1106+
}
1107+
if v, ok := d.GetOk("max_deay_time"); ok {
1108+
maxDelayTime = int64(v.(int))
1109+
}
1110+
1111+
asyncRequestId, err := mysqlService.UpgradeDBInstanceEngineVersion(ctx, d.Id(), engineVersion, upgradeSubversion, maxDelayTime)
1112+
if err != nil {
1113+
return err
1114+
}
1115+
1116+
err = resource.Retry(6*time.Hour, func() *resource.RetryError {
1117+
taskStatus, message, err := mysqlService.DescribeAsyncRequestInfo(ctx, asyncRequestId)
1118+
1119+
if err != nil {
1120+
if _, ok := err.(*errors.TencentCloudSDKError); !ok {
1121+
return resource.RetryableError(err)
1122+
} else {
1123+
return resource.NonRetryableError(err)
1124+
}
1125+
}
1126+
1127+
if taskStatus == MYSQL_TASK_STATUS_SUCCESS {
1128+
return nil
1129+
}
1130+
if taskStatus == MYSQL_TASK_STATUS_INITIAL || taskStatus == MYSQL_TASK_STATUS_RUNNING {
1131+
return resource.RetryableError(fmt.Errorf("update mysql engineVersion status is %s", taskStatus))
1132+
}
1133+
err = fmt.Errorf("update mysql engineVersion task status is %s,we won't wait for it finish ,it show message:%s",
1134+
",", message)
1135+
return resource.NonRetryableError(err)
1136+
})
1137+
1138+
if err != nil {
1139+
log.Printf("[CRITAL]%s update mysql engineVersion fail, reason:%s\n ", logId, err.Error())
1140+
return err
1141+
}
1142+
}
1143+
10881144
if d.HasChange("tags") {
10891145

10901146
oldValue, newValue := d.GetChange("tags")

0 commit comments

Comments
 (0)