Skip to content

Commit 81bdcaa

Browse files
committed
fix(cdb): [119349326] mysql ro instacen support ro group id
1 parent ac20628 commit 81bdcaa

4 files changed

+100
-4
lines changed

tencentcloud/services/cdb/resource_tc_mysql_readonly_instance.go

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ func ResourceTencentCloudMysqlReadonlyInstance() *schema.Resource {
4242
Default: 0,
4343
Description: "Availability zone deployment method. Available values: 0 - Single availability zone; 1 - Multiple availability zones.",
4444
},
45+
"ro_group_id": {
46+
Type: schema.TypeString,
47+
Optional: true,
48+
Computed: true,
49+
Description: "Read only group id. If rogroupId is empty, a new ro group is created by default. If it is not empty, the existing ro group is used.",
50+
},
4551
}
4652

4753
basic := TencentMsyqlBasicInfo()
@@ -114,8 +120,14 @@ func mysqlCreateReadonlyInstancePayByMonth(ctx context.Context, d *schema.Resour
114120
request.MasterInstanceId = &masterInstanceId
115121

116122
// readonly group is not currently supported
117-
defaultRoGroupMode := "allinone"
118-
request.RoGroup = &cdb.RoGroup{RoGroupMode: &defaultRoGroupMode}
123+
if v, ok := d.GetOk("ro_group_id"); ok {
124+
roGroupId := v.(string)
125+
defaultRoGroupMode := "join"
126+
request.RoGroup = &cdb.RoGroup{RoGroupMode: &defaultRoGroupMode, RoGroupId: &roGroupId}
127+
} else {
128+
defaultRoGroupMode := "allinone"
129+
request.RoGroup = &cdb.RoGroup{RoGroupMode: &defaultRoGroupMode}
130+
}
119131

120132
if err := mysqlAllInstanceRoleSet(ctx, request, d, meta); err != nil {
121133
return err
@@ -148,8 +160,14 @@ func mysqlCreateReadonlyInstancePayByUse(ctx context.Context, d *schema.Resource
148160
request.MasterInstanceId = &masterInstanceId
149161

150162
// readonly group is not currently supported
151-
defaultRoGroupMode := "allinone"
152-
request.RoGroup = &cdb.RoGroup{RoGroupMode: &defaultRoGroupMode}
163+
if v, ok := d.GetOk("ro_group_id"); ok {
164+
roGroupId := v.(string)
165+
defaultRoGroupMode := "join"
166+
request.RoGroup = &cdb.RoGroup{RoGroupMode: &defaultRoGroupMode, RoGroupId: &roGroupId}
167+
} else {
168+
defaultRoGroupMode := "allinone"
169+
request.RoGroup = &cdb.RoGroup{RoGroupMode: &defaultRoGroupMode}
170+
}
153171

154172
if v, ok := d.GetOk("mem_size"); ok {
155173
request.Memory = helper.IntInt64(v.(int))
@@ -376,6 +394,15 @@ func resourceTencentCloudMysqlReadonlyInstanceRead(d *schema.ResourceData, meta
376394
_ = d.Set("status", mysqlInfo.Status)
377395
_ = d.Set("task_status", mysqlInfo.TaskStatus)
378396

397+
roGroup, err := mysqlService.DescribeRoGroupByIdAndRoId(ctx, *mysqlInfo.MasterInfo.InstanceId, d.Id())
398+
if err != nil {
399+
return err
400+
}
401+
402+
if roGroup != nil && roGroup.RoGroupId != nil {
403+
_ = d.Set("ro_group_id", *roGroup.RoGroupId)
404+
}
405+
379406
return nil
380407
}
381408

@@ -408,6 +435,7 @@ func resourceTencentCloudMysqlReadonlyInstanceUpdate(d *schema.ResourceData, met
408435
"master_instance_id",
409436
"zone",
410437
"master_region",
438+
"ro_group_id",
411439
}
412440

413441
for _, f := range immutableFields {

tencentcloud/services/cdb/resource_tc_mysql_readonly_instance_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) {
3333
resource.TestCheckResourceAttrSet("tencentcloud_mysql_readonly_instance.mysql_readonly", "intranet_ip"),
3434
resource.TestCheckResourceAttrSet("tencentcloud_mysql_readonly_instance.mysql_readonly", "status"),
3535
resource.TestCheckResourceAttrSet("tencentcloud_mysql_readonly_instance.mysql_readonly", "task_status"),
36+
resource.TestCheckResourceAttrSet("tencentcloud_mysql_readonly_instance.mysql_readonly", "ro_group_id"),
3637
resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "tags.test", "test-tf"),
3738
),
3839
},
@@ -81,6 +82,13 @@ func TestAccTencentCloudMysqlReadonlyInstanceResource_basic(t *testing.T) {
8182
resource.TestCheckResourceAttr("tencentcloud_mysql_readonly_instance.mysql_readonly", "mem_size", "1000"),
8283
),
8384
},
85+
{
86+
Config: testAccMysqlReadonlyInstance_roGroup(tcacctest.CommonPresetMysql),
87+
Check: resource.ComposeAggregateTestCheckFunc(
88+
testAccCheckMysqlInstanceExists("tencentcloud_mysql_readonly_instance.mysql_readonly_ro_group"),
89+
resource.TestCheckResourceAttrSet("tencentcloud_mysql_readonly_instance.mysql_readonly_ro_group", "ro_group_id"),
90+
),
91+
},
8492
// // update intranet_port
8593
// {
8694
// Config: testAccMysqlReadonlyInstance_update(CommonPresetMysql, "mysql-readonly-update", "3361"),
@@ -217,3 +225,23 @@ resource "tencentcloud_mysql_readonly_instance" "mysql_readonly" {
217225
}
218226
`, mysqlTestCase)
219227
}
228+
229+
func testAccMysqlReadonlyInstance_roGroup(mysqlTestCase string) string {
230+
return fmt.Sprintf(`
231+
%s
232+
resource "tencentcloud_mysql_readonly_instance" "mysql_readonly_ro_group" {
233+
master_instance_id = local.mysql_id
234+
ro_group_id = tencentcloud_mysql_readonly_instance.mysql_readonly.ro_group_id
235+
mem_size = 1000
236+
cpu = 1
237+
volume_size = 200
238+
instance_name = "mysql-readonly-test"
239+
intranet_port = 3360
240+
master_region = var.region
241+
zone = var.availability_zone
242+
tags = {
243+
test = "test-tf"
244+
}
245+
}
246+
`, mysqlTestCase)
247+
}

tencentcloud/services/cdb/service_tencentcloud_mysql.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3154,6 +3154,45 @@ func (me *MysqlService) DescribeMysqlRoGroupById(ctx context.Context, instanceId
31543154
return
31553155
}
31563156

3157+
func (me *MysqlService) DescribeRoGroupByIdAndRoId(ctx context.Context, instanceId string, roInstanceId string) (roGroup *cdb.RoGroup, errRet error) {
3158+
logId := tccommon.GetLogId(ctx)
3159+
3160+
request := cdb.NewDescribeRoGroupsRequest()
3161+
request.InstanceId = &instanceId
3162+
3163+
defer func() {
3164+
if errRet != nil {
3165+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
3166+
}
3167+
}()
3168+
3169+
ratelimit.Check(request.GetAction())
3170+
3171+
response, err := me.client.UseMysqlClient().DescribeRoGroups(request)
3172+
if err != nil {
3173+
errRet = err
3174+
return
3175+
}
3176+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
3177+
3178+
if len(response.Response.RoGroups) < 1 {
3179+
return
3180+
}
3181+
3182+
for _, v := range response.Response.RoGroups {
3183+
if len(v.RoInstances) > 0 {
3184+
for _, ro := range v.RoInstances {
3185+
if *ro.InstanceId == roInstanceId {
3186+
roGroup = v
3187+
return
3188+
}
3189+
}
3190+
}
3191+
}
3192+
3193+
return
3194+
}
3195+
31573196
func (me *MysqlService) DescribeMysqlErrorLogByFilter(ctx context.Context, param map[string]interface{}) (errorLog []*cdb.ErrlogItem, errRet error) {
31583197
var (
31593198
logId = tccommon.GetLogId(ctx)

website/docs/r/mysql_readonly_instance.html.markdown

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ The following arguments are supported:
101101
* `pay_type` - (Optional, Int, **Deprecated**) It has been deprecated from version 1.36.0. Please use `charge_type` instead. Pay type of instance. Valid values: `0`, `1`. `0`: prepaid, `1`: postpaid.
102102
* `period` - (Optional, Int, **Deprecated**) It has been deprecated from version 1.36.0. Please use `prepaid_period` instead. Period of instance. NOTES: Only supported prepaid instance.
103103
* `prepaid_period` - (Optional, Int) Period of instance. NOTES: Only supported prepaid instance.
104+
* `ro_group_id` - (Optional, String) Read only group id. If rogroupId is empty, a new ro group is created by default. If it is not empty, the existing ro group is used.
104105
* `security_groups` - (Optional, Set: [`String`]) Security groups to use.
105106
* `slave_deploy_mode` - (Optional, Int) Availability zone deployment method. Available values: 0 - Single availability zone; 1 - Multiple availability zones.
106107
* `subnet_id` - (Optional, String) Private network ID. If `vpc_id` is set, this value is required.

0 commit comments

Comments
 (0)