Skip to content

Commit

Permalink
testcase: Adds a new test case for resource alicloud_db_instance
Browse files Browse the repository at this point in the history
  • Loading branch information
thisnihonglei authored and xiaozhu36 committed Jan 24, 2022
1 parent 2516004 commit 7d5a8a8
Show file tree
Hide file tree
Showing 3 changed files with 148 additions and 1 deletion.
4 changes: 3 additions & 1 deletion alicloud/resource_alicloud_db_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package alicloud

import (
"fmt"
"log"
"strings"
"time"

Expand Down Expand Up @@ -1364,7 +1365,8 @@ func resourceAlicloudDBInstanceDelete(d *schema.ResourceData, meta interface{})
return WrapError(err)
}
if PayType(instance["PayType"].(string)) == Prepaid {
return WrapError(Error("At present, 'Prepaid' instance cannot be deleted and must wait it to be expired and release it automatically."))
log.Printf("[WARN] Cannot destroy Subscription resource: alicloud_db_instance. Terraform will remove this resource from the state file, however resources may remain.")
return nil
}
action := "DeleteDBInstance"
request := map[string]interface{}{
Expand Down
139 changes: 139 additions & 0 deletions alicloud/resource_alicloud_db_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1494,6 +1494,133 @@ func TestAccAlicloudRdsDBInstanceMultiAZ(t *testing.T) {

}

func TestAccAlicloudRdsDBInstanceBasic(t *testing.T) {
var instance map[string]interface{}
var ips []map[string]interface{}
resourceId := "alicloud_db_instance.default"
ra := resourceAttrInit(resourceId, instanceBasicMap3)
rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} {
return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)}
}, "DescribeDBInstance")
rac := resourceAttrCheckInit(rc, ra)

testAccCheck := rac.resourceAttrMapUpdateSet()
name := "tf-testAccDBInstanceConfig_slave_zone"
testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceHighAvailabilityConfigDependence1)

resource.Test(t, resource.TestCase{
PreCheck: func() {
testAccPreCheck(t)
},

// module name
IDRefreshName: resourceId,

Providers: testAccProviders,
CheckDestroy: nil,
Steps: []resource.TestStep{
{
Config: testAccConfig(map[string]interface{}{
"engine": "MySQL",
"engine_version": "8.0",
"instance_type": "${data.alicloud_db_instance_classes.default.instance_classes.0.instance_class}",
"instance_storage": "${data.alicloud_db_instance_classes.default.instance_classes.0.storage_range.min}",
"instance_charge_type": "Prepaid",
"period": "1",
"instance_name": "${var.name}",
"db_instance_storage_type": "local_ssd",
"zone_id": "${local.zone_id}",
//"zone_id_slave_a": "${local.zone_id}",
"zone_id_slave_b": "${local.zone_id}",
"vswitch_id": "${local.vswitch_id}",
"monitoring_period": "60",
"security_group_ids": "${alicloud_security_group.default.*.id}",
"encryption_key": "${alicloud_kms_key.default.id}",
"security_ips": []string{"10.168.1.12", "100.69.7.112"},
"db_time_zone": "America/New_York",
"resource_group_id": "${data.alicloud_resource_manager_resource_groups.default.ids.0}",
}),
Check: resource.ComposeTestCheckFunc(
testAccCheckKeyValueInMaps(ips, "security ip", "security_ips", "10.168.1.12,100.69.7.112"),
testAccCheck(map[string]string{
"engine": "MySQL",
"engine_version": "8.0",
"db_instance_storage_type": "local_ssd",
"db_time_zone": "America/New_York",
"resource_group_id": CHECKSET,
}),
),
},
{
ResourceName: resourceId,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{"force_restart", "period", "encryption_key", "zone_id_slave_b"},
},
},
})
}

func resourceDBInstanceHighAvailabilityConfigDependence1(name string) string {
return fmt.Sprintf(`
variable "name" {
default = "%s"
}
data "alicloud_db_zones" "default"{
engine = "MySQL"
engine_version = "8.0"
instance_charge_type = "PostPaid"
category = "HighAvailability"
db_instance_storage_type = "local_ssd"
}
data "alicloud_db_instance_classes" "default" {
zone_id = data.alicloud_db_zones.default.zones.0.id
engine = "MySQL"
engine_version = "8.0"
category = "HighAvailability"
db_instance_storage_type = "local_ssd"
instance_charge_type = "PostPaid"
}
data "alicloud_vpcs" "default" {
name_regex = "^default-NODELETING"
}
data "alicloud_vswitches" "default" {
vpc_id = data.alicloud_vpcs.default.ids.0
zone_id = data.alicloud_db_zones.default.zones.0.id
}
resource "alicloud_vswitch" "this" {
count = length(data.alicloud_vswitches.default.ids) > 0 ? 0 : 1
vswitch_name = var.name
vpc_id = data.alicloud_vpcs.default.ids.0
zone_id = data.alicloud_db_zones.default.ids.0
cidr_block = cidrsubnet(data.alicloud_vpcs.default.vpcs.0.cidr_block, 8, 4)
}
locals {
vswitch_id = length(data.alicloud_vswitches.default.ids) > 0 ? data.alicloud_vswitches.default.ids.0 : concat(alicloud_vswitch.this.*.id, [""])[0]
zone_id = data.alicloud_db_zones.default.ids.0
}
data "alicloud_resource_manager_resource_groups" "default" {
status = "OK"
}
resource "alicloud_security_group" "default" {
name = var.name
vpc_id = data.alicloud_vpcs.default.ids.0
}
resource "alicloud_kms_key" "default" {
description = var.name
pending_window_in_days = 7
key_state = "Enabled"
}
`, name)
}

func resourceDBInstanceMysqlAZConfigDependence(name string) string {
return fmt.Sprintf(`
variable "name" {
Expand Down Expand Up @@ -1617,3 +1744,15 @@ var instanceBasicMap2 = map[string]string{
"connection_string": CHECKSET,
"port": CHECKSET,
}

var instanceBasicMap3 = map[string]string{
"engine": "MySQL",
"engine_version": "8.0",
"instance_type": CHECKSET,
"instance_storage": "5",
"instance_name": "tf-testAccDBInstanceConfig_slave_zone",
"monitoring_period": "60",
"zone_id": CHECKSET,
"connection_string": CHECKSET,
"port": CHECKSET,
}
6 changes: 6 additions & 0 deletions website/docs/r/db_instance.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -207,6 +207,12 @@ resource "alicloud_db_instance" "example" {
}
```

### Deleting `alicloud_db_instance` or removing it from your configuration

The `alicloud_db_instance` resource allows you to manage `instance_charge_type = "Prepaid"` db instance, but Terraform cannot destroy it.
Deleting the subscription resource or removing it from your configuration will remove it from your statefile and management, but will not destroy the DB Instance.
You can resume managing the subscription db instance via the AlibabaCloud Console.

## Argument Reference

The following arguments are supported:
Expand Down

0 comments on commit 7d5a8a8

Please sign in to comment.