From 6e8bb240b952ce6978ed6cf329c2d9c513b30f3f Mon Sep 17 00:00:00 2001 From: Kagashino Date: Fri, 6 May 2022 19:07:55 +0800 Subject: [PATCH 1/2] fix: mongodb - testcases and engine desc --- tencentcloud/basic_test.go | 28 ++++ .../data_source_tc_mongodb_instances_test.go | 42 +----- ...data_source_tc_mongodb_zone_config_test.go | 6 +- tencentcloud/extension_mongodb.go | 2 +- .../resource_tc_mongodb_instance_test.go | 139 +++++++++++++----- website/docs/r/mongodb_instance.html.markdown | 2 +- .../r/mongodb_sharding_instance.html.markdown | 2 +- 7 files changed, 140 insertions(+), 81 deletions(-) diff --git a/tencentcloud/basic_test.go b/tencentcloud/basic_test.go index 7a4244a986..602a42cd74 100644 --- a/tencentcloud/basic_test.go +++ b/tencentcloud/basic_test.go @@ -557,3 +557,31 @@ locals { ` // End of TKE Service + +// MongoDB + +const DefaultMongoDBSpec = ` +data "tencentcloud_mongodb_zone_config" "zone_config" { + available_zone = "ap-guangzhou-6" +} + +variable "engine_versions" { + default = { + "3.6": "MONGO_36_WT", + "4.0": "MONGO_40_WT", + "4.2": "MONGO_42_WT" + } +} + +locals { + 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"] + spec = concat(local.filtered_spec, data.tencentcloud_mongodb_zone_config.zone_config.list) + machine_type = local.spec.0.machine_type + cluster_type = local.spec.0.cluster_type + memory = local.spec.0.memory / 1024 + volume = local.spec.0.min_storage / 1024 + engine_version = lookup(var.engine_versions, local.spec.0.engine_version) +} +` + +// End of MongoDB diff --git a/tencentcloud/data_source_tc_mongodb_instances_test.go b/tencentcloud/data_source_tc_mongodb_instances_test.go index bd69c14189..92e52d7e8d 100644 --- a/tencentcloud/data_source_tc_mongodb_instances_test.go +++ b/tencentcloud/data_source_tc_mongodb_instances_test.go @@ -17,26 +17,7 @@ func TestAccTencentCloudMongodbInstancesDataSource(t *testing.T) { Config: testAccMongodbInstancesDataSource, Check: resource.ComposeAggregateTestCheckFunc( testAccCheckMongodbInstanceExists("tencentcloud_mongodb_instance.mongodb_instance"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.#", "1"), - resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.instance_id"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.instance_name", "tf-mongodb-test"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.project_id", "0"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.cluster_type", MONGODB_CLUSTER_TYPE_REPLSET), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.available_zone", "ap-guangzhou-3"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.vpc_id", ""), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.subnet_id", ""), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.status", "2"), - resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.vip"), - resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.vport"), - resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.create_time"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.engine_version", "MONGO_40_WT"), - resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.cpu"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.memory", "4"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.volume", "100"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.machine_type", MONGODB_MACHINE_TYPE_HIO10G), - resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.shard_quantity"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.tags.test", "test"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.0.charge_type", "POSTPAID_BY_HOUR"), + resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.#"), ), }, }, @@ -44,24 +25,5 @@ func TestAccTencentCloudMongodbInstancesDataSource(t *testing.T) { } const testAccMongodbInstancesDataSource = ` -resource "tencentcloud_mongodb_instance" "mongodb_instance" { - instance_name = "tf-mongodb-test" - memory = 4 - volume = 100 - engine_version = "MONGO_40_WT" - machine_type = "TGIO" - available_zone = "ap-guangzhou-3" - project_id = 0 - password = "test1234" - - tags = { - "test" = "test" - } -} - -data "tencentcloud_mongodb_instances" "mongodb_instances" { - instance_id = tencentcloud_mongodb_instance.mongodb_instance.id - - tags = tencentcloud_mongodb_instance.mongodb_instance.tags -} +data "tencentcloud_mongodb_instances" "mongodb_instances" {} ` diff --git a/tencentcloud/data_source_tc_mongodb_zone_config_test.go b/tencentcloud/data_source_tc_mongodb_zone_config_test.go index 86cd4a40f6..292d8cea3c 100644 --- a/tencentcloud/data_source_tc_mongodb_zone_config_test.go +++ b/tencentcloud/data_source_tc_mongodb_zone_config_test.go @@ -16,7 +16,7 @@ func TestAccTencentCloudMongodbZoneConfigDataSource(t *testing.T) { Config: testAccMongodbZoneConfigDataSource, Check: resource.ComposeAggregateTestCheckFunc( resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_zone_config.zone_config", "list.#"), - resource.TestCheckResourceAttr("data.tencentcloud_mongodb_zone_config.zone_config", "list.0.available_zone", "ap-guangzhou-3"), + resource.TestCheckResourceAttr("data.tencentcloud_mongodb_zone_config.zone_config", "list.0.available_zone", defaultAZone), resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_zone_config.zone_config", "list.0.cluster_type"), resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_zone_config.zone_config", "list.0.machine_type"), resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_zone_config.zone_config", "list.0.cpu"), @@ -31,8 +31,8 @@ func TestAccTencentCloudMongodbZoneConfigDataSource(t *testing.T) { }) } -const testAccMongodbZoneConfigDataSource = ` +const testAccMongodbZoneConfigDataSource = defaultAzVariable + ` data "tencentcloud_mongodb_zone_config" "zone_config" { - available_zone = "ap-guangzhou-3" + available_zone = var.default_az } ` diff --git a/tencentcloud/extension_mongodb.go b/tencentcloud/extension_mongodb.go index 0d14099c5f..4bf78e9758 100644 --- a/tencentcloud/extension_mongodb.go +++ b/tencentcloud/extension_mongodb.go @@ -89,7 +89,7 @@ func TencentMongodbBasicInfo() map[string]*schema.Schema { Type: schema.TypeString, Required: true, ForceNew: true, - Description: "Version of the Mongodb, and available values include `MONGO_3_WT` (represents MongoDB 3.2 WiredTiger Edition), `MONGO_3_ROCKS` (represents MongoDB 3.2 RocksDB Edition), `MONGO_36_WT` (represents MongoDB 3.6 WiredTiger Edition) and `MONGO_40_WT` (represents MongoDB 4.0 WiredTiger Edition).", + Description: "Version of the Mongodb, and available values include `MONGO_36_WT` (MongoDB 3.6 WiredTiger Edition), `MONGO_40_WT` (MongoDB 4.0 WiredTiger Edition) and `MONGO_42_WT` (MongoDB 4.2 WiredTiger Edition). NOTE: `MONGO_3_WT` (MongoDB 3.2 WiredTiger Edition) and `MONGO_3_ROCKS` (MongoDB 3.2 RocksDB Edition) will deprecated.", }, "machine_type": { Type: schema.TypeString, diff --git a/tencentcloud/resource_tc_mongodb_instance_test.go b/tencentcloud/resource_tc_mongodb_instance_test.go index 61357b2773..61d8e4e392 100644 --- a/tencentcloud/resource_tc_mongodb_instance_test.go +++ b/tencentcloud/resource_tc_mongodb_instance_test.go @@ -3,13 +3,65 @@ package tencentcloud import ( "context" "fmt" + "log" "testing" + "time" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/terraform" ) -func TestAccTencentCloudMongodbInstanceResource(t *testing.T) { +func init() { + // go test -v ./tencentcloud -sweep=ap-guangzhou -sweep-run=tencentcloud_mongodb_instance + resource.AddTestSweepers("tencentcloud_mongodb_instance", &resource.Sweeper{ + Name: "tencentcloud_mongodb_instance", + F: func(r string) error { + logId := getLogId(contextNil) + ctx := context.WithValue(context.TODO(), logIdKey, logId) + cli, _ := sharedClientForRegion(r) + client := cli.(*TencentCloudClient).apiV3Conn + service := MongodbService{client} + + instances, err := service.DescribeInstancesByFilter(ctx, "", -1) + if err != nil { + return err + } + + var isolated []string + + for i := range instances { + ins := instances[i] + id := *ins.InstanceId + name := *ins.InstanceName + created, err := time.Parse("2006-01-02 15:04:05", *ins.CreateTime) + if err != nil { + created = time.Time{} + } + if isResourcePersist(name, &created) { + continue + } + log.Printf("%s (%s) will Isolated", id, name) + err = service.IsolateInstance(ctx, id) + if err != nil { + continue + } + isolated = append(isolated, id) + } + + log.Printf("Offline isolated instance %v", isolated) + for _, id := range isolated { + err = service.OfflineIsolatedDBInstance(ctx, id) + if err != nil { + continue + } + } + + return nil + }, + }) +} + +func TestAccTencentCloudMongodbInstanceResourcePostPaid(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -21,11 +73,11 @@ func TestAccTencentCloudMongodbInstanceResource(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckMongodbInstanceExists("tencentcloud_mongodb_instance.mongodb"), resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "instance_name", "tf-mongodb-test"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "memory", "4"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "volume", "100"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "engine_version", "MONGO_36_WT"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "machine_type", MONGODB_MACHINE_TYPE_HIO), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "available_zone", "ap-guangzhou-2"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "memory"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "volume"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "engine_version"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "machine_type"), + resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "available_zone", "ap-guangzhou-6"), resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb", "project_id", "0"), resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "status"), resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "vip"), @@ -52,16 +104,27 @@ func TestAccTencentCloudMongodbInstanceResource(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{"security_groups", "password", "auto_renew_flag"}, }, + }, + }) +} + +func TestAccTencentCloudMongodbInstanceResourcePrepaid(t *testing.T) { + // Avoid to set Parallel to make sure EnvVar secure + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheckCommon(t, ACCOUNT_TYPE_PREPAY) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckMongodbInstanceDestroy, + Steps: []resource.TestStep{ { Config: testAccMongodbInstancePrepaid, Check: resource.ComposeTestCheckFunc( testAccCheckMongodbInstanceExists("tencentcloud_mongodb_instance.mongodb_prepaid"), resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "instance_name", "tf-mongodb-test-prepaid"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "memory", "8"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "volume", "200"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "engine_version", "MONGO_40_WT"), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "machine_type", MONGODB_MACHINE_TYPE_HIO10G), - resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "available_zone", "ap-guangzhou-3"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "memory"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "volume"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "engine_version"), + resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb", "machine_type"), + resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "available_zone", "ap-guangzhou-6"), resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "project_id", "0"), resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb_prepaid", "status"), resource.TestCheckResourceAttrSet("tencentcloud_mongodb_instance.mongodb_prepaid", "vip"), @@ -83,6 +146,12 @@ func TestAccTencentCloudMongodbInstanceResource(t *testing.T) { resource.TestCheckResourceAttr("tencentcloud_mongodb_instance.mongodb_prepaid", "tags.prepaid", "prepaid"), ), }, + { + ResourceName: "tencentcloud_mongodb_instance.mongodb", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"security_groups", "password", "auto_renew_flag"}, + }, }, }) } @@ -137,14 +206,14 @@ func testAccCheckMongodbInstanceExists(n string) resource.TestCheckFunc { } } -const testAccMongodbInstance = ` +const testAccMongodbInstance = DefaultMongoDBSpec + ` resource "tencentcloud_mongodb_instance" "mongodb" { instance_name = "tf-mongodb-test" - memory = 4 - volume = 100 - engine_version = "MONGO_36_WT" - machine_type = "GIO" - available_zone = "ap-guangzhou-2" + memory = local.memory + volume = local.volume + engine_version = local.engine_version + machine_type = local.machine_type + available_zone = "ap-guangzhou-6" project_id = 0 password = "test1234" @@ -154,14 +223,14 @@ resource "tencentcloud_mongodb_instance" "mongodb" { } ` -const testAccMongodbInstance_update = ` +const testAccMongodbInstance_update = DefaultMongoDBSpec + ` resource "tencentcloud_mongodb_instance" "mongodb" { instance_name = "tf-mongodb-update" - memory = 8 - volume = 200 - engine_version = "MONGO_36_WT" - machine_type = "GIO" - available_zone = "ap-guangzhou-2" + memory = local.memory * 2 + volume = local.volume * 2 + engine_version = local.engine_version + machine_type = local.machine_type + available_zone = "ap-guangzhou-6" project_id = 0 password = "test1234update" @@ -171,14 +240,14 @@ resource "tencentcloud_mongodb_instance" "mongodb" { } ` -const testAccMongodbInstancePrepaid = ` +const testAccMongodbInstancePrepaid = DefaultMongoDBSpec + ` resource "tencentcloud_mongodb_instance" "mongodb_prepaid" { instance_name = "tf-mongodb-test-prepaid" - memory = 8 - volume = 200 - engine_version = "MONGO_40_WT" - machine_type = "HIO10G" - available_zone = "ap-guangzhou-3" + memory = local.memory + volume = local.volume + engine_version = local.engine_version + machine_type = local.machine_type + available_zone = "ap-guangzhou-6" project_id = 0 password = "test1234" charge_type = "PREPAID" @@ -191,14 +260,14 @@ resource "tencentcloud_mongodb_instance" "mongodb_prepaid" { } ` -const testAccMongodbInstancePrepaid_update = ` +const testAccMongodbInstancePrepaid_update = DefaultMongoDBSpec + ` resource "tencentcloud_mongodb_instance" "mongodb_prepaid" { instance_name = "tf-mongodb-test-prepaid-update" - memory = 4 - volume = 100 - engine_version = "MONGO_40_WT" - machine_type = "HIO10G" - available_zone = "ap-guangzhou-3" + memory = local.memory + volume = local.volume + engine_version = local.engine_version + machine_type = local.machine_type + available_zone = "ap-guangzhou-6" project_id = 0 password = "test1234update" charge_type = "PREPAID" diff --git a/website/docs/r/mongodb_instance.html.markdown b/website/docs/r/mongodb_instance.html.markdown index da26c70845..fb2d80129d 100644 --- a/website/docs/r/mongodb_instance.html.markdown +++ b/website/docs/r/mongodb_instance.html.markdown @@ -33,7 +33,7 @@ resource "tencentcloud_mongodb_instance" "mongodb" { The following arguments are supported: * `available_zone` - (Required, ForceNew) The available zone of the Mongodb. -* `engine_version` - (Required, ForceNew) Version of the Mongodb, and available values include `MONGO_3_WT` (represents MongoDB 3.2 WiredTiger Edition), `MONGO_3_ROCKS` (represents MongoDB 3.2 RocksDB Edition), `MONGO_36_WT` (represents MongoDB 3.6 WiredTiger Edition) and `MONGO_40_WT` (represents MongoDB 4.0 WiredTiger Edition). +* `engine_version` - (Required, ForceNew) Version of the Mongodb, and available values include `MONGO_36_WT` (MongoDB 3.6 WiredTiger Edition), `MONGO_40_WT` (MongoDB 4.0 WiredTiger Edition) and `MONGO_42_WT` (MongoDB 4.2 WiredTiger Edition). NOTE: `MONGO_3_WT` (MongoDB 3.2 WiredTiger Edition) and `MONGO_3_ROCKS` (MongoDB 3.2 RocksDB Edition) will deprecated. * `instance_name` - (Required) Name of the Mongodb instance. * `machine_type` - (Required, ForceNew) Type of Mongodb instance, and available values include `HIO`(or `GIO` which will be deprecated, represents high IO) and `HIO10G`(or `TGIO` which will be deprecated, represents 10-gigabit high IO). * `memory` - (Required) Memory size. The minimum value is 2, and unit is GB. Memory and volume must be upgraded or degraded simultaneously. diff --git a/website/docs/r/mongodb_sharding_instance.html.markdown b/website/docs/r/mongodb_sharding_instance.html.markdown index 9b5c25a35f..ca54942fd8 100644 --- a/website/docs/r/mongodb_sharding_instance.html.markdown +++ b/website/docs/r/mongodb_sharding_instance.html.markdown @@ -35,7 +35,7 @@ resource "tencentcloud_mongodb_sharding_instance" "mongodb" { The following arguments are supported: * `available_zone` - (Required, ForceNew) The available zone of the Mongodb. -* `engine_version` - (Required, ForceNew) Version of the Mongodb, and available values include `MONGO_3_WT` (represents MongoDB 3.2 WiredTiger Edition), `MONGO_3_ROCKS` (represents MongoDB 3.2 RocksDB Edition), `MONGO_36_WT` (represents MongoDB 3.6 WiredTiger Edition) and `MONGO_40_WT` (represents MongoDB 4.0 WiredTiger Edition). +* `engine_version` - (Required, ForceNew) Version of the Mongodb, and available values include `MONGO_36_WT` (MongoDB 3.6 WiredTiger Edition), `MONGO_40_WT` (MongoDB 4.0 WiredTiger Edition) and `MONGO_42_WT` (MongoDB 4.2 WiredTiger Edition). NOTE: `MONGO_3_WT` (MongoDB 3.2 WiredTiger Edition) and `MONGO_3_ROCKS` (MongoDB 3.2 RocksDB Edition) will deprecated. * `instance_name` - (Required) Name of the Mongodb instance. * `machine_type` - (Required, ForceNew) Type of Mongodb instance, and available values include `HIO`(or `GIO` which will be deprecated, represents high IO) and `HIO10G`(or `TGIO` which will be deprecated, represents 10-gigabit high IO). * `memory` - (Required) Memory size. The minimum value is 2, and unit is GB. Memory and volume must be upgraded or degraded simultaneously. From bc6dc5cd0ec467c3b38cbf497fe3d6077615254f Mon Sep 17 00:00:00 2001 From: Kagashino Date: Fri, 6 May 2022 19:17:53 +0800 Subject: [PATCH 2/2] fix: mongo - remove data testcase exist checking --- tencentcloud/data_source_tc_mongodb_instances_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/tencentcloud/data_source_tc_mongodb_instances_test.go b/tencentcloud/data_source_tc_mongodb_instances_test.go index 92e52d7e8d..9f45425878 100644 --- a/tencentcloud/data_source_tc_mongodb_instances_test.go +++ b/tencentcloud/data_source_tc_mongodb_instances_test.go @@ -16,7 +16,6 @@ func TestAccTencentCloudMongodbInstancesDataSource(t *testing.T) { { Config: testAccMongodbInstancesDataSource, Check: resource.ComposeAggregateTestCheckFunc( - testAccCheckMongodbInstanceExists("tencentcloud_mongodb_instance.mongodb_instance"), resource.TestCheckResourceAttrSet("data.tencentcloud_mongodb_instances.mongodb_instances", "instance_list.#"), ), },