Skip to content

Commit f3f2285

Browse files
author
mikatong
committed
support update mongos_memory
1 parent 38335e3 commit f3f2285

File tree

4 files changed

+179
-6
lines changed

4 files changed

+179
-6
lines changed

tencentcloud/acctest/basic.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -856,10 +856,10 @@ locals {
856856
locals {
857857
filtered_sharding_spec = [for i in data.tencentcloud_mongodb_zone_config.zone_config.list: i if lookup(i, "cluster_type") == "SHARD" && lookup(i, "min_replicate_set_num") > 0 && lookup(i, "machine_type") == "HIO10G" && lookup(i, "engine_version") == "4.4" && lookup(i, "memory") == 4096 && lookup(i, "default_storage") == 256000]
858858
sharding_spec = concat(local.filtered_sharding_spec, [for i in data.tencentcloud_mongodb_zone_config.zone_config.list: i if lookup(i, "cluster_type") == "SHARD" && lookup(i, "min_replicate_set_num") > 0])
859-
sharding_machine_type = local.sharding_spec.0.machine_type
860-
sharding_memory = local.sharding_spec.0.memory / 1024
861-
sharding_volume = local.sharding_spec.0.default_storage / 1000
862-
sharding_engine_version = lookup(var.engine_versions, local.sharding_spec.0.engine_version)
859+
sharding_machine_type = local.filtered_sharding_spec.0.machine_type
860+
sharding_memory = local.filtered_sharding_spec.0.memory / 1024
861+
sharding_volume = local.filtered_sharding_spec.0.default_storage / 1000
862+
sharding_engine_version = lookup(var.engine_versions, local.filtered_sharding_spec.0.engine_version)
863863
}
864864
`
865865

tencentcloud/services/mongodb/resource_tc_mongodb_sharding_instance.go

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1515
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
16+
sdkErrors "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/errors"
1617
mongodb "github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725"
1718

1819
"github.com/tencentcloudstack/terraform-provider-tencentcloud/tencentcloud/internal/helper"
@@ -429,8 +430,40 @@ func resourceMongodbShardingInstanceUpdate(d *schema.ResourceData, meta interfac
429430
if d.HasChange("availability_zone_list") || d.HasChange("hidden_zone") {
430431
return fmt.Errorf("setting of the field[availability_zone_list, hidden_zone] does not support update")
431432
}
432-
if d.HasChange("mongos_cpu") || d.HasChange("mongos_memory") || d.HasChange("mongos_node_num") {
433-
return fmt.Errorf("setting of the field[mongos_cpu, mongos_memory, mongos_node_num] does not support update")
433+
if d.HasChange("mongos_node_num") {
434+
return fmt.Errorf("setting of the field[mongos_node_num] does not support update")
435+
}
436+
437+
if d.HasChange("mongos_cpu") && d.HasChange("mongos_memory") {
438+
if v, ok := d.GetOk("mongos_memory"); ok {
439+
dealId, err := mongodbService.ModifyMongosMemory(ctx, instanceId, v.(int))
440+
if err != nil {
441+
return err
442+
}
443+
if dealId == "" {
444+
return fmt.Errorf("deal id is empty")
445+
}
446+
447+
errUpdate := resource.Retry(20*tccommon.ReadRetryTimeout, func() *resource.RetryError {
448+
dealResponseParams, err := mongodbService.DescribeDBInstanceDeal(ctx, dealId)
449+
if err != nil {
450+
if sdkError, ok := err.(*sdkErrors.TencentCloudSDKError); ok {
451+
if sdkError.Code == "InvalidParameter" && sdkError.Message == "deal resource not found." {
452+
return resource.RetryableError(err)
453+
}
454+
}
455+
return resource.NonRetryableError(err)
456+
}
457+
458+
if *dealResponseParams.Status != MONGODB_STATUS_DELIVERY_SUCCESS {
459+
return resource.RetryableError(fmt.Errorf("mongodb status is not delivery success"))
460+
}
461+
return nil
462+
})
463+
if errUpdate != nil {
464+
return errUpdate
465+
}
466+
}
434467
}
435468
if d.HasChange("memory") || d.HasChange("volume") {
436469
memory := d.Get("memory").(int)

tencentcloud/services/mongodb/resource_tc_mongodb_sharding_instance_test.go

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,32 @@ func TestAccTencentCloudMongodbShardingInstanceResource_postpaid(t *testing.T) {
7171
})
7272
}
7373

74+
func TestAccTencentCloudMongodbShardingInstanceResource_mongos(t *testing.T) {
75+
t.Parallel()
76+
resource.Test(t, resource.TestCase{
77+
PreCheck: func() { tcacctest.AccPreCheck(t) },
78+
Providers: tcacctest.AccProviders,
79+
CheckDestroy: testAccCheckMongodbShardingInstanceDestroy,
80+
Steps: []resource.TestStep{
81+
{
82+
Config: testAccMongodbShardingInstanceMongos,
83+
Check: resource.ComposeTestCheckFunc(
84+
testAccCheckMongodbInstanceExists("tencentcloud_mongodb_sharding_instance.mongodb"),
85+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "mongos_cpu", "1"),
86+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "mongos_memory", "2"),
87+
),
88+
},
89+
{
90+
Config: testAccMongodbShardingInstanceMongosUpdate,
91+
Check: resource.ComposeTestCheckFunc(
92+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "mongos_cpu", "2"),
93+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "mongos_memory", "4"),
94+
),
95+
},
96+
},
97+
})
98+
}
99+
74100
func TestAccTencentCloudMongodbShardingInstanceResource_prepaid(t *testing.T) {
75101
t.Parallel()
76102
resource.Test(t, resource.TestCase{
@@ -250,6 +276,78 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb" {
250276
}
251277
`
252278

279+
const testAccMongodbShardingInstanceMongos = tcacctest.DefaultMongoDBSpec + `
280+
resource "tencentcloud_vpc" "vpc" {
281+
name = "mongodb-sharding-vpc"
282+
cidr_block = "10.0.0.0/16"
283+
}
284+
285+
resource "tencentcloud_subnet" "subnet" {
286+
vpc_id = tencentcloud_vpc.vpc.id
287+
name = "mongodb-sharding-subnet"
288+
cidr_block = "10.0.0.0/16"
289+
availability_zone = "ap-guangzhou-3"
290+
}
291+
292+
resource "tencentcloud_mongodb_sharding_instance" "mongodb" {
293+
instance_name = "tf-mongodb-sharding"
294+
shard_quantity = 2
295+
nodes_per_shard = 3
296+
memory = local.sharding_memory
297+
volume = local.sharding_volume
298+
engine_version = local.sharding_engine_version
299+
machine_type = local.sharding_machine_type
300+
security_groups = [local.security_group_id]
301+
available_zone = "ap-guangzhou-3"
302+
project_id = 0
303+
password = "test1234"
304+
mongos_cpu = 1
305+
mongos_memory = 2
306+
mongos_node_num = 3
307+
tags = {
308+
test = "test"
309+
}
310+
vpc_id = tencentcloud_vpc.vpc.id
311+
subnet_id = tencentcloud_subnet.subnet.id
312+
}
313+
`
314+
315+
const testAccMongodbShardingInstanceMongosUpdate = tcacctest.DefaultMongoDBSpec + `
316+
resource "tencentcloud_vpc" "vpc" {
317+
name = "mongodb-sharding-vpc"
318+
cidr_block = "10.0.0.0/16"
319+
}
320+
321+
resource "tencentcloud_subnet" "subnet" {
322+
vpc_id = tencentcloud_vpc.vpc.id
323+
name = "mongodb-sharding-subnet"
324+
cidr_block = "10.0.0.0/16"
325+
availability_zone = "ap-guangzhou-3"
326+
}
327+
328+
resource "tencentcloud_mongodb_sharding_instance" "mongodb" {
329+
instance_name = "tf-mongodb-sharding"
330+
shard_quantity = 2
331+
nodes_per_shard = 3
332+
memory = local.sharding_memory
333+
volume = local.sharding_volume
334+
engine_version = local.sharding_engine_version
335+
machine_type = local.sharding_machine_type
336+
security_groups = [local.security_group_id]
337+
available_zone = "ap-guangzhou-3"
338+
project_id = 0
339+
password = "test1234"
340+
mongos_cpu = 2
341+
mongos_memory = 4
342+
mongos_node_num = 3
343+
tags = {
344+
test = "test"
345+
}
346+
vpc_id = tencentcloud_vpc.vpc.id
347+
subnet_id = tencentcloud_subnet.subnet.id
348+
}
349+
`
350+
253351
const testAccMongodbShardingInstancePrepaid = tcacctest.DefaultMongoDBSpec + `
254352
resource "tencentcloud_vpc" "vpc" {
255353
name = "mongodb-sharding-prepaid-vpc"

tencentcloud/services/mongodb/service_tencentcloud_mongodb.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,48 @@ func (me *MongodbService) ResetInstancePassword(ctx context.Context, instanceId,
118118
return nil
119119
}
120120

121+
func (me *MongodbService) ModifyMongosMemory(ctx context.Context, instanceId string, mongosMemory int) (dealId string, errRet error) {
122+
logId := tccommon.GetLogId(ctx)
123+
request := mongodb.NewModifyDBInstanceSpecRequest()
124+
request.InstanceId = &instanceId
125+
request.MongosMemory = helper.String(helper.IntToStr(mongosMemory))
126+
127+
var response *mongodb.ModifyDBInstanceSpecResponse
128+
tradeError := false
129+
err := resource.Retry(6*tccommon.WriteRetryTimeout, func() *resource.RetryError {
130+
ratelimit.Check(request.GetAction())
131+
result, e := me.client.UseMongodbClient().ModifyDBInstanceSpec(request)
132+
if e != nil {
133+
// request might be accepted between "InvalidParameterValue.InvalidTradeOperation" and "InvalidParameterValue.StatusAbnormal" error
134+
if ee, ok := e.(*sdkErrors.TencentCloudSDKError); ok {
135+
if ee.Code == "InvalidParameterValue.InvalidTradeOperation" {
136+
tradeError = true
137+
return resource.RetryableError(e)
138+
} else if ee.Code == "InvalidParameterValue.StatusAbnormal" && tradeError {
139+
response = result
140+
return nil
141+
} else {
142+
return resource.NonRetryableError(e)
143+
}
144+
}
145+
log.Printf("[CRITAL]%s api[%s] fail, reason:%s", logId, request.GetAction(), e.Error())
146+
return resource.NonRetryableError(e)
147+
}
148+
response = result
149+
return nil
150+
})
151+
if err != nil {
152+
errRet = err
153+
return
154+
}
155+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]",
156+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
157+
158+
if response != nil && response.Response != nil && response.Response.DealId != nil {
159+
dealId = *response.Response.DealId
160+
}
161+
return
162+
}
121163
func (me *MongodbService) UpgradeInstance(ctx context.Context, instanceId string, memory int, volume int, params map[string]interface{}) (dealId string, errRet error) {
122164
logId := tccommon.GetLogId(ctx)
123165
request := mongodb.NewModifyDBInstanceSpecRequest()

0 commit comments

Comments
 (0)