Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions tencentcloud/basic_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
43 changes: 2 additions & 41 deletions tencentcloud/data_source_tc_mongodb_instances_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,52 +16,13 @@ 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.#"),
),
},
},
})
}

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" {}
`
6 changes: 3 additions & 3 deletions tencentcloud/data_source_tc_mongodb_zone_config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand All @@ -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
}
`
2 changes: 1 addition & 1 deletion tencentcloud/extension_mongodb.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
139 changes: 104 additions & 35 deletions tencentcloud/resource_tc_mongodb_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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) },
Expand All @@ -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"),
Expand All @@ -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"),
Expand All @@ -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"},
},
},
})
}
Expand Down Expand Up @@ -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"

Expand All @@ -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"

Expand All @@ -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"
Expand All @@ -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"
Expand Down
2 changes: 1 addition & 1 deletion website/docs/r/mongodb_instance.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
2 changes: 1 addition & 1 deletion website/docs/r/mongodb_sharding_instance.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down