Skip to content

Commit 5a72e8c

Browse files
tongyimingmikatong
andauthored
mongodb sharding support availability_zone_list (#1582)
* mongodb sharding support availability_zone_list * add changelog * update --------- Co-authored-by: mikatong <mikatong@tencent.com>
1 parent be5e29a commit 5a72e8c

File tree

14 files changed

+261
-65
lines changed

14 files changed

+261
-65
lines changed

.changelog/1582.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
resource/tencentcloud_mongodb_sharding_instance: support `availability_zone_list` and `hidden_zone`.
3+
```

go.mod

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ require (
3636
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/clb v1.0.599
3737
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cloudaudit v1.0.544
3838
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cls v1.0.412
39-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.600
39+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.606
4040
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553
4141
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589
4242
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cynosdb v1.0.572
@@ -54,7 +54,7 @@ require (
5454
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/lighthouse v1.0.413
5555
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/live v1.0.535
5656
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mariadb v1.0.532
57-
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.600
57+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.606
5858
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.518
5959
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.584
6060
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/organization v1.0.540

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.599 h1:9rMF
531531
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.599/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
532532
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.600 h1:rYI1ZQUubjG6r87H65nn5Zwfo5J03rcFxefmVek+Wis=
533533
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.600/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
534+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.606 h1:3Y3xlzSikB9BfKIfrTXQpwzeW97cxetqyq1kuMaMc08=
535+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.606/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
534536
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553 h1:Pl1kYgFhJp0QSoVFSzRsiGk+HfEAkBTQg7+O60tytNA=
535537
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cvm v1.0.553/go.mod h1:dnnqPxXYK+kax3e1MKo/PI3iWJtytm6ogWKQHJS7SGE=
536538
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/cwp v1.0.589 h1:LZihgirMH0vsaGScYexxwY0fTss9vHaSZs/YOQUVESg=
@@ -570,6 +572,8 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.588 h1:VfI
570572
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.588/go.mod h1:bAyanoZH6UqaapJOc6hTZACz/hi5AWJw2sa6oCQ5u0Y=
571573
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.600 h1:lcKfsxsVw2PnU8CzCAOrrteEVC5dPwzGUCxSTYdC5ys=
572574
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.600/go.mod h1:xdx+BE6goMwlA9R0S4xCGT4R9C5uIJ1qRPhmc1xVnt8=
575+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.606 h1:Fs1WyS5uw0MMVdKufxNSOEBe4DkybSiBkMAy1131/gg=
576+
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb v1.0.606/go.mod h1:XrotKKNeP8jLqt4I9LSoIGpLt1UPd2MnLpxFNrJrts4=
573577
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.518 h1:XClo3Xa5F9pko91olHT85aZXXcRkQiOYBCMqm8+tHG8=
574578
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/monitor v1.0.518/go.mod h1:WDTvvrrc90KE+90iizkoSQRsoSSQ3881eBC6NeypmTI=
575579
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mps v1.0.584 h1:FJxYOAolkBhXjQMWoiTek9Ag0bslcKFHyrM7w2Jsxos=

tencentcloud/basic_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,10 @@ locals {
725725
// End of TKE Service
726726

727727
// MongoDB
728+
const (
729+
defaultMongoDBVPCId = "vpc-rwj54lfr"
730+
defaultMongoDBSubnetId = "subnet-nyt57zps"
731+
)
728732
const defaultMongoDBSecurityGroupId = "sg-if748odn"
729733
const DefaultMongoDBSpec = `
730734
data "tencentcloud_mongodb_zone_config" "zone_config" {
@@ -741,6 +745,12 @@ variable "engine_versions" {
741745
variable "sg_id" {
742746
default = "` + defaultMongoDBSecurityGroupId + `"
743747
}
748+
variable "vpc_id" {
749+
default = "` + defaultMongoDBVPCId + `"
750+
}
751+
variable "subnet_id" {
752+
default = "` + defaultMongoDBSubnetId + `"
753+
}
744754
745755
locals {
746756
filtered_spec = [for i in data.tencentcloud_mongodb_zone_config.zone_config.list: i if lookup(i, "machine_type") == "HIO10G" && lookup(i, "engine_version") != "3.2"]

tencentcloud/resource_tc_mongodb_sharding_instance.go

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,27 @@ func resourceTencentCloudMongodbShardingInstance() *schema.Resource {
6464
ValidateFunc: validateIntegerInRange(3, 5),
6565
Description: "Number of nodes per shard, at least 3(one master and two slaves).",
6666
},
67+
"availability_zone_list": {
68+
Type: schema.TypeList,
69+
Optional: true,
70+
Computed: true,
71+
Elem: &schema.Schema{
72+
Type: schema.TypeString,
73+
},
74+
RequiredWith: []string{"hidden_zone"},
75+
Description: `A list of nodes deployed in multiple availability zones. For more information, please use the API DescribeSpecInfo.
76+
- Multi-availability zone deployment nodes can only be deployed in 3 different availability zones. It is not supported to deploy most nodes of the cluster in the same availability zone. For example, a 3-node cluster does not support the deployment of 2 nodes in the same zone.
77+
- Version 4.2 and above are not supported.
78+
- Read-only disaster recovery instances are not supported.
79+
- Basic network cannot be selected.`,
80+
},
81+
"hidden_zone": {
82+
Type: schema.TypeString,
83+
Optional: true,
84+
Computed: true,
85+
RequiredWith: []string{"availability_zone_list"},
86+
Description: "The availability zone to which the Hidden node belongs. This parameter must be configured to deploy instances across availability zones.",
87+
},
6788
}
6889
basic := TencentMongodbBasicInfo()
6990
for k, v := range basic {
@@ -166,6 +187,13 @@ func mongodbAllShardingInstanceReqSet(requestInter interface{}, d *schema.Resour
166187
if v, ok := d.GetOk("mongos_node_num"); ok {
167188
value.FieldByName("MongosNodeNum").Set(reflect.ValueOf(helper.IntUint64(v.(int))))
168189
}
190+
if v, ok := d.GetOk("availability_zone_list"); ok {
191+
availabilityZoneList := helper.InterfacesStringsPoint(v.([]interface{}))
192+
value.FieldByName("AvailabilityZoneList").Set(reflect.ValueOf(availabilityZoneList))
193+
}
194+
if v, ok := d.GetOk("hidden_zone"); ok {
195+
value.FieldByName("HiddenZone").Set(reflect.ValueOf(helper.String(v.(string))))
196+
}
169197
return nil
170198
}
171199

@@ -385,6 +413,23 @@ func resourceMongodbShardingInstanceRead(d *schema.ResourceData, meta interface{
385413
}
386414
_ = d.Set("security_groups", groupIds)
387415

416+
replicateSets, err := mongodbService.DescribeDBInstanceNodeProperty(ctx, instanceId)
417+
if err != nil {
418+
return err
419+
}
420+
if len(replicateSets) > 1 {
421+
var hiddenZone string
422+
availabilityZoneList := make([]string, 0, 3)
423+
for _, replicate := range replicateSets[0].Nodes {
424+
itemZone := *replicate.Zone
425+
if *replicate.Hidden {
426+
hiddenZone = itemZone
427+
}
428+
availabilityZoneList = append(availabilityZoneList, itemZone)
429+
}
430+
_ = d.Set("hidden_zone", hiddenZone)
431+
_ = d.Set("availability_zone_list", availabilityZoneList)
432+
}
388433
tags := make(map[string]string, len(instance.Tags))
389434
for _, tag := range instance.Tags {
390435
if tag.TagKey == nil {
@@ -418,8 +463,11 @@ func resourceMongodbShardingInstanceUpdate(d *schema.ResourceData, meta interfac
418463
region := client.Region
419464

420465
d.Partial(true)
466+
if d.HasChange("availability_zone_list") || d.HasChange("hidden_zone") {
467+
return fmt.Errorf("setting of the field[availability_zone_list, hidden_zone] does not support update")
468+
}
421469
if d.HasChange("mongos_cpu") || d.HasChange("mongos_memory") || d.HasChange("mongos_node_num") {
422-
return fmt.Errorf("setting of the field[mongos_cpu, mongos_memory, mongos_node_numZ] does not support update")
470+
return fmt.Errorf("setting of the field[mongos_cpu, mongos_memory, mongos_node_num] does not support update")
423471
}
424472
if d.HasChange("memory") || d.HasChange("volume") {
425473
memory := d.Get("memory").(int)

tencentcloud/resource_tc_mongodb_sharding_instance_test.go

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ func TestAccTencentCloudMongodbShardingInstanceResource_postpaid(t *testing.T) {
2727
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb", "volume"),
2828
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb", "engine_version"),
2929
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb", "machine_type"),
30-
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "available_zone", "ap-guangzhou-6"),
30+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "available_zone", "ap-guangzhou-3"),
3131
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "project_id", "0"),
3232
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb", "status"),
3333
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb", "vip"),
@@ -36,7 +36,9 @@ func TestAccTencentCloudMongodbShardingInstanceResource_postpaid(t *testing.T) {
3636
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "tags.test", "test"),
3737
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "charge_type", MONGODB_CHARGE_TYPE_POSTPAID),
3838
resource.TestCheckNoResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "prepaid_period"),
39-
resource.TestCheckNoResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "security_groups"),
39+
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb", "security_groups.#"),
40+
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb", "hidden_zone"),
41+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb", "availability_zone_list.#", "3"),
4042
),
4143
},
4244
{
@@ -72,7 +74,7 @@ func TestAccTencentCloudMongodbShardingInstanceResource_prepaid(t *testing.T) {
7274
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "instance_name", "tf-mongodb-sharding-prepaid"),
7375
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "shard_quantity", "2"),
7476
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "nodes_per_shard", "3"),
75-
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "available_zone", "ap-guangzhou-6"),
77+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "available_zone", "ap-guangzhou-3"),
7678
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "project_id", "0"),
7779
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "status"),
7880
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "vip"),
@@ -82,6 +84,8 @@ func TestAccTencentCloudMongodbShardingInstanceResource_prepaid(t *testing.T) {
8284
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "charge_type", MONGODB_CHARGE_TYPE_PREPAID),
8385
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "prepaid_period", "1"),
8486
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "auto_renew_flag", "0"),
87+
resource.TestCheckResourceAttrSet("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "hidden_zone"),
88+
resource.TestCheckResourceAttr("tencentcloud_mongodb_sharding_instance.mongodb_prepaid", "availability_zone_list.#", "3"),
8589
),
8690
},
8791
{
@@ -130,7 +134,7 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb" {
130134
volume = local.sharding_volume
131135
engine_version = local.sharding_engine_version
132136
machine_type = local.sharding_machine_type
133-
available_zone = "ap-guangzhou-6"
137+
available_zone = "ap-guangzhou-3"
134138
project_id = 0
135139
password = "test1234"
136140
mongos_cpu = 1
@@ -140,6 +144,10 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb" {
140144
test = "test"
141145
}
142146
security_groups = [var.sg_id]
147+
vpc_id = var.vpc_id
148+
subnet_id = var.subnet_id
149+
availability_zone_list = ["ap-guangzhou-3", "ap-guangzhou-4", "ap-guangzhou-6"]
150+
hidden_zone = "ap-guangzhou-6"
143151
}
144152
`
145153

@@ -152,7 +160,7 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb" {
152160
volume = local.sharding_volume
153161
engine_version = local.sharding_engine_version
154162
machine_type = local.sharding_machine_type
155-
available_zone = "ap-guangzhou-6"
163+
available_zone = "ap-guangzhou-3"
156164
project_id = 0
157165
password = "test1234update"
158166
mongos_cpu = 1
@@ -163,6 +171,10 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb" {
163171
abc = "abc"
164172
}
165173
security_groups = [var.sg_id]
174+
vpc_id = var.vpc_id
175+
subnet_id = var.subnet_id
176+
availability_zone_list = ["ap-guangzhou-3", "ap-guangzhou-4", "ap-guangzhou-6"]
177+
hidden_zone = "ap-guangzhou-6"
166178
}
167179
`
168180

@@ -175,7 +187,7 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb_prepaid" {
175187
volume = local.sharding_volume
176188
engine_version = local.sharding_engine_version
177189
machine_type = local.sharding_machine_type
178-
available_zone = "ap-guangzhou-6"
190+
available_zone = "ap-guangzhou-3"
179191
project_id = 0
180192
password = "test1234"
181193
charge_type = "PREPAID"
@@ -188,6 +200,10 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb_prepaid" {
188200
tags = {
189201
test = "test-prepaid"
190202
}
203+
vpc_id = var.vpc_id
204+
subnet_id = var.subnet_id
205+
availability_zone_list = ["ap-guangzhou-3", "ap-guangzhou-4", "ap-guangzhou-6"]
206+
hidden_zone = "ap-guangzhou-6"
191207
}
192208
`
193209

@@ -200,7 +216,7 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb_prepaid" {
200216
volume = local.sharding_volume
201217
engine_version = local.sharding_engine_version
202218
machine_type = local.sharding_machine_type
203-
available_zone = "ap-guangzhou-6"
219+
available_zone = "ap-guangzhou-3"
204220
project_id = 0
205221
password = "test1234update"
206222
charge_type = "PREPAID"
@@ -213,5 +229,9 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb_prepaid" {
213229
tags = {
214230
prepaid = "prepaid"
215231
}
232+
vpc_id = var.vpc_id
233+
subnet_id = var.subnet_id
234+
availability_zone_list = ["ap-guangzhou-3", "ap-guangzhou-4", "ap-guangzhou-6"]
235+
hidden_zone = "ap-guangzhou-6"
216236
}
217237
`

tencentcloud/service_tencentcloud_mongodb.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,3 +413,22 @@ func (me *MongodbService) DescribeSecurityGroup(ctx context.Context, instanceId
413413
groups = response.Response.Groups
414414
return
415415
}
416+
417+
func (me *MongodbService) DescribeDBInstanceNodeProperty(ctx context.Context, instanceId string) (replicateSets []*mongodb.ReplicateSetInfo, errRet error) {
418+
logId := getLogId(ctx)
419+
request := mongodb.NewDescribeDBInstanceNodePropertyRequest()
420+
request.InstanceId = helper.String(instanceId)
421+
ratelimit.Check(request.GetAction())
422+
response, err := me.client.UseMongodbClient().DescribeDBInstanceNodeProperty(request)
423+
if err != nil {
424+
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]",
425+
logId, request.GetAction(), request.ToJsonString(), err.Error())
426+
errRet = err
427+
return
428+
}
429+
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]",
430+
logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
431+
432+
replicateSets = response.Response.ReplicateSets
433+
return
434+
}

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/client.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common/http/request.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vendor/github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/mongodb/v20190725/client.go

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)