diff --git a/alicloud/resource_alicloud_db_instance_test.go b/alicloud/resource_alicloud_db_instance_test.go index ff1887516045..4335de51e1a1 100644 --- a/alicloud/resource_alicloud_db_instance_test.go +++ b/alicloud/resource_alicloud_db_instance_test.go @@ -176,12 +176,12 @@ func testSweepDBInstances(region string) error { return nil } -func TestAccAliCloudRdsDBInstance_Mysql_8_0(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80PPEssdB(t *testing.T) { var instance map[string]interface{} var ips []map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -191,7 +191,7 @@ func TestAccAliCloudRdsDBInstance_Mysql_8_0(t *testing.T) { name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) connectionStringPrefix := acctest.RandString(8) + "rm" connectionStringPrefixSecond := acctest.RandString(8) + "rm" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigDependence) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80PPEssdB) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -475,7 +475,7 @@ func TestAccAliCloudRdsDBInstance_Mysql_8_0(t *testing.T) { }) } -func resourceDBInstanceConfigDependence(name string) string { +func resourceDBInstanceMysql80PPEssdB(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -538,7 +538,7 @@ resource "alicloud_kms_key" "default" { `, name) } -func resourceDBInstanceConfigDependenceSwitchDBInstanceHA(name string) string { +func resourceDBInstanceMysql80APEssdHA(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -565,10 +565,10 @@ data "alicloud_db_instances" "default" { `, name) } -func TestAccAliCloudRdsDBInstance_VpcId(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql57PPSsdHAVpc(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap2) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -578,7 +578,7 @@ func TestAccAliCloudRdsDBInstance_VpcId(t *testing.T) { rand := acctest.RandIntRange(10000, 999999) rand2 := acctest.RandIntRange(1, 255) name := fmt.Sprintf("tftestaccdbcreatemysql%d", rand) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceHighAvailabilityConfigDependenceVpcId) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql57PPSsdHA) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -697,139 +697,10 @@ func TestAccAliCloudRdsDBInstance_VpcId(t *testing.T) { }) } -func resourceDBInstanceHighAvailabilityConfigDependenceVpcId(name string) string { - return fmt.Sprintf(` -variable "name" { - default = "%s" -} -data "alicloud_db_zones" "default"{ - engine = "MySQL" - engine_version = "5.7" - 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 = "5.7" - db_instance_storage_type = "local_ssd" - instance_charge_type = "PostPaid" - category = "HighAvailability" -} -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_ram_policy" "default" { - policy_name = "${var.name}" - policy_document = < 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) + 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[length(data.alicloud_db_zones.default.ids)-1] + 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[length(data.alicloud_db_zones.default.ids)-1] } resource "alicloud_security_group" "default" { - count = 2 + count = 2 name = var.name vpc_id = data.alicloud_vpcs.default.ids.0 } `, name) } -func TestAccAliCloudRdsDBInstance_PostgreSQL_12_0(t *testing.T) { +// PostgreSQL 综合测试 - 覆盖所有 PostgreSQL 独有参数 +// 独有参数清单 (9 个): +// 1. pg_hba_conf - PostgreSQL 访问控制配置 +// 2. babelfish_config - Babelfish 功能配置 +// 3. babelfish_port - Babelfish 端口 +// 4. client_ca_enabled - 客户端 CA 启用 +// 5. client_ca_cert - 客户端 CA 证书 +// 6. client_crl_enabled - 客户端 CRL 启用 +// 7. client_cert_revocation_list - 客户端证书吊销列表 +// 8. acl - 访问控制列表 +// 9. replication_acl - 复制访问控制 +func TestAccAliCloudRdsDBInstancePostgreSQL_Comprehensive(t *testing.T) { var instance map[string]interface{} - var ips []map[string]interface{} - resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instancePostgreSQLBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") rac := resourceAttrCheckInit(rc, ra) testAccCheck := rac.resourceAttrMapUpdateSet() - connectionStringPrefix := acctest.RandString(8) + "rm" - connectionStringPrefixSecond := acctest.RandString(8) + "rm" - name := "tf-testAccDBInstanceConfig" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstancePostgreSQLConfigDependence) + name := fmt.Sprintf("tf-testacc-pgsql-comp-%d", acctest.RandIntRange(10000, 99999)) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstancePgSQLComprehensive) + resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, - - // module name IDRefreshName: resourceId, - - Providers: testAccProviders, - CheckDestroy: rac.checkResourceDestroy(), + Providers: testAccProviders, + CheckDestroy: rac.checkResourceDestroy(), Steps: []resource.TestStep{ + // Step 1: 创建基础实例(10 个必填参数) { Config: testAccConfig(map[string]interface{}{ + // 必填参数 "engine": "PostgreSQL", - "engine_version": "12.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}", - "db_instance_storage_type": "cloud_essd", - "zone_id": "${data.alicloud_db_instance_classes.default.instance_classes.0.zone_ids.0.id}", + "engine_version": "14.0", + "instance_type": "${data.alicloud_db_instance_classes.default.instance_class}", + "instance_storage": "${data.alicloud_db_instance_classes.default.storage_range.min}", "instance_charge_type": "Postpaid", + "category": "HighAvailability", "instance_name": "${var.name}", "vswitch_id": "${local.vswitch_id}", - "monitoring_period": "60", - "category": "HighAvailability", - "target_minor_version": "rds_postgres_1200_20231030", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "engine": "PostgreSQL", - "engine_version": "12.0", - "instance_storage": CHECKSET, - "instance_type": CHECKSET, - "db_instance_storage_type": "cloud_essd", - "category": "HighAvailability", - "target_minor_version": "rds_postgres_1200_20231030", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "target_minor_version": "rds_postgres_1200_20240229", - "upgrade_time": "Immediate", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "target_minor_version": "rds_postgres_1200_20240229", - "upgrade_time": "Immediate", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "db_instance_storage_type": "cloud_essd2", - "instance_storage": "500", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "db_instance_storage_type": "cloud_essd2", - "instance_storage": "500", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "instance_type": "${data.alicloud_db_instance_classes.default.instance_classes.1.instance_class}", + "db_instance_storage_type": "cloud_essd", + "zone_id": "${data.alicloud_db_instance_classes.default.zone_ids.0.id}", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "instance_type": CHECKSET, + "engine": "PostgreSQL", + "engine_version": "14.0", + "instance_type": CHECKSET, + "instance_storage": CHECKSET, + "category": "HighAvailability", }), ), }, + // Step 2: 测试 pg_hba_conf(PostgreSQL 独有) { Config: testAccConfig(map[string]interface{}{ "pg_hba_conf": []interface{}{ @@ -1286,833 +1071,221 @@ func TestAccAliCloudRdsDBInstance_PostgreSQL_12_0(t *testing.T) { }), ), }, + // Step 3: 测试 SSL 基础功能 { Config: testAccConfig(map[string]interface{}{ - "instance_name": "tf-testAccDBInstance_instance_name", + "ssl_action": "Open", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "instance_name": "tf-testAccDBInstance_instance_name", + "ssl_action": "Open", }), ), }, + // Step 4: 测试 SSL 证书管理(PostgreSQL 独有增强) { Config: testAccConfig(map[string]interface{}{ - "connection_string_prefix": connectionStringPrefix, - "babelfish_port": "1433", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "connection_string_prefix": connectionStringPrefix, - "babelfish_port": "1433", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Open", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ssl_action": "Open", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "monitoring_period": "300", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "monitoring_period": "300", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_ips": []string{"10.168.1.12", "100.69.7.112"}, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheckKeyValueInMaps(ips, "security ip", "security_ips", "10.168.1.12,100.69.7.112"), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_group_ids": "${alicloud_security_group.default.*.id}", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "security_group_id": CHECKSET, - "security_group_ids.#": "2", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "engine": "PostgreSQL", - "engine_version": "12.0", - "instance_type": "${data.alicloud_db_instance_classes.default.instance_classes.0.instance_class}", - "instance_storage": "500", - "instance_charge_type": "Postpaid", - "instance_name": "${var.name}", - "vswitch_id": "${local.vswitch_id}", - "security_group_ids": []string{}, - "monitoring_period": "60", - "category": "HighAvailability", - "db_instance_storage_type": "cloud_essd2", - "connection_string_prefix": connectionStringPrefixSecond, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "engine": "PostgreSQL", - "engine_version": "12.0", - "instance_type": CHECKSET, - "instance_storage": CHECKSET, - "instance_name": "tf-testAccDBInstanceConfig", - "monitoring_period": "60", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "port": CHECKSET, - "security_group_id": CHECKSET, - "security_group_ids.#": "0", - "category": "HighAvailability", - "db_instance_storage_type": "cloud_essd2", - "connection_string_prefix": connectionStringPrefixSecond, - }), - ), - }, - }, - }) -} - -func resourceDBInstancePostgreSQLConfigDependence(name string) string { - return fmt.Sprintf(` -variable "name" { - default = "%s" -} -data "alicloud_db_zones" "default"{ - engine = "PostgreSQL" - engine_version = "12.0" - instance_charge_type = "PostPaid" - category = "HighAvailability" - db_instance_storage_type = "cloud_essd" -} - -data "alicloud_db_instance_classes" "default" { - zone_id = data.alicloud_db_zones.default.zones.0.id - engine = "PostgreSQL" - engine_version = "12.0" - db_instance_storage_type = "cloud_essd" - instance_charge_type = "PostPaid" - category = "HighAvailability" -} - -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[length(data.alicloud_db_zones.default.ids)-1] -} - -resource "alicloud_security_group" "default" { - count = 2 - name = var.name - vpc_id = data.alicloud_vpcs.default.ids.0 -} - -data "alicloud_kms_service" "default" { - enable = "On" -} - -resource "alicloud_kms_key" "default" { - description = var.name - pending_window_in_days = 7 - status = "Enabled" -} - -`, name) -} - -func TestAccAliCloudRdsDBInstance_PostgreSQL_13_0_SSL(t *testing.T) { - var instance map[string]interface{} - var ips []map[string]interface{} - - manualHATime := time.Now().AddDate(0, 0, 1).Format("2006-01-02T15:04:05Z") - resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) - rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { - return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} - }, "DescribeDBInstance") - rac := resourceAttrCheckInit(rc, ra) - - testAccCheck := rac.resourceAttrMapUpdateSet() - rand := acctest.RandIntRange(10000, 999999) - name := fmt.Sprintf("tf-testaccdbinstanceconfig%d", rand) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstancePostgreSQLSSLConfigDependence) - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - - // module name - IDRefreshName: resourceId, - - Providers: testAccProviders, - CheckDestroy: rac.checkResourceDestroy(), - Steps: []resource.TestStep{ - { - Config: testAccConfig(map[string]interface{}{ - "engine": "PostgreSQL", - "engine_version": "13.0", - "instance_type": "pg.x2.medium.2c", - "instance_storage": "${data.alicloud_db_instance_classes.default.instance_classes.0.storage_range.min}", - "db_instance_storage_type": "cloud_essd", - "zone_id": "${data.alicloud_db_instance_classes.default.instance_classes.0.zone_ids.0.id}", - "instance_charge_type": "Postpaid", - "instance_name": "${var.name}", - "vswitch_id": "${local.vswitch_id}", - "monitoring_period": "60", - "db_time_zone": "America/New_York", - "connection_string_prefix": "${var.name}", - "port": "5999", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "engine": "PostgreSQL", - "engine_version": "13.0", - "instance_storage": CHECKSET, - "instance_type": CHECKSET, - "db_instance_storage_type": "cloud_essd", - "private_ip_address": CHECKSET, - "db_time_zone": "America/New_York", - "deletion_protection": "false", - "port": "5999", - "connection_string_prefix": CHECKSET, - "instance_name": CHECKSET, - }), - ), - }, - { - ResourceName: resourceId, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"force_restart", "db_is_ignore_case"}, - }, - { - Config: testAccConfig(map[string]interface{}{ - "auto_upgrade_minor_version": "Manual", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "auto_upgrade_minor_version": "Manual", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "deletion_protection": "true", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "deletion_protection": "true", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "tcp_connection_type": "SHORT", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "tcp_connection_type": "SHORT", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "instance_name": "tf-testAccDBInstance_instance_name", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "instance_name": "tf-testAccDBInstance_instance_name", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "instance_type": "pg.x4.medium.2c", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "instance_type": CHECKSET, - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "monitoring_period": "300", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "monitoring_period": "300", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_ips": []string{"10.168.1.12", "100.69.7.112"}, - "db_instance_ip_array_name": "default", - "security_ip_type": "IPv4", - "db_instance_ip_array_attribute": "", - "whitelist_network_type": "MIX", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheckKeyValueInMaps(ips, "security ip", "security_ips", "10.168.1.12,100.69.7.112"), - testAccCheck(map[string]string{ - "db_instance_ip_array_name": "default", - "security_ip_type": "IPv4", - "whitelist_network_type": "MIX", - "db_instance_ip_array_attribute": "", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "port": "3333", - "connection_string_prefix": "${var.name}", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "port": "3333", - "connection_string_prefix": CHECKSET, - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ha_config": "Manual", - "manual_ha_time": manualHATime, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ha_config": "Manual", - "manual_ha_time": manualHATime, - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ha_config": "Auto", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ha_config": "Auto", - "manual_ha_time": "", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_group_ids": "${alicloud_security_group.default.*.id}", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "security_group_id": CHECKSET, - "security_group_ids.#": "2", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Open", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ssl_action": "Open", - "ca_type": "aliyun", - "acl": "prefer", - "replication_acl": "prefer", - "server_cert": CHECKSET, - "server_key": CHECKSET, - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Close", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ssl_action": "Close", - "ca_type": "", - "server_cert": "", - "server_key": "", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "engine": "PostgreSQL", - "engine_version": "13.0", - "instance_type": "pg.x8.medium.2c", - "instance_storage": "${data.alicloud_db_instance_classes.default.instance_classes.0.storage_range.min + data.alicloud_db_instance_classes.default.instance_classes.0.storage_range.step}", - "instance_charge_type": "Postpaid", - "instance_name": "${var.name}", - "vswitch_id": "${local.vswitch_id}", - "security_group_ids": []string{}, - "monitoring_period": "60", - "ssl_action": "Open", "ca_type": "aliyun", + "server_cert": testServerCert, + "server_key": testServerKey, "client_ca_enabled": "1", - "client_ca_cert": client_ca_cert, + "client_ca_cert": testClientCaCert, "client_crl_enabled": "1", - "client_cert_revocation_list": client_cert_revocation_list, + "client_cert_revocation_list": testClientCrl, "acl": "cert", "replication_acl": "cert", - "deletion_protection": "false", - "auto_upgrade_minor_version": "Auto", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "engine": "PostgreSQL", - "engine_version": "13.0", - "instance_type": CHECKSET, - "instance_storage": CHECKSET, - "instance_name": CHECKSET, - "monitoring_period": "60", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "port": CHECKSET, - "security_group_id": CHECKSET, - "security_group_ids.#": "0", - "ssl_action": "Open", "ca_type": "aliyun", "client_ca_enabled": "1", - "client_ca_cert": client_ca_cert2, + "client_ca_cert": testClientCaCert, "client_crl_enabled": "1", - "client_cert_revocation_list": client_cert_revocation_list2, + "client_cert_revocation_list": testClientCrl, "acl": "cert", "replication_acl": "cert", - "server_cert": CHECKSET, - "server_key": CHECKSET, - "deletion_protection": "false", - "auto_upgrade_minor_version": "Auto", }), ), }, - }, - }) -} -func resourceDBInstancePostgreSQLUpdateDBInstanceSSLConfigDependence(name string) string { - return fmt.Sprintf(` -variable "name" { - default = "%s" -} - -data "alicloud_db_zones" "default"{ - engine = "PostgreSQL" - engine_version = "13.0" - instance_charge_type = "PostPaid" - category = "HighAvailability" - db_instance_storage_type = "cloud_essd" -} - -data "alicloud_db_instance_classes" "default" { - zone_id = data.alicloud_db_zones.default.zones.0.id - engine = "PostgreSQL" - engine_version = "13.0" - category = "HighAvailability" - db_instance_storage_type = "cloud_essd" - 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[length(data.alicloud_db_zones.default.ids)-1] -} -resource "alicloud_security_group" "default" { - count = 2 - name = var.name - vpc_id = data.alicloud_vpcs.default.ids.0 -} -`, name) -} - -func TestAccAliCloudRdsDBInstance_PostgreSQL_15_0_Babelfish(t *testing.T) { - var instance map[string]interface{} - var ips []map[string]interface{} - connectionStringPrefix := acctest.RandString(8) + "rm" - connectionStringPrefixTwo := acctest.RandString(8) + "rm" - manualHATime := time.Now().AddDate(0, 0, 1).Format("2006-01-02T15:04:05Z") - resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) - rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { - return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} - }, "DescribeDBInstance") - rac := resourceAttrCheckInit(rc, ra) - testAccCheck := rac.resourceAttrMapUpdateSet() - name := "tf-testAccDBInstanceConfig" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstancePostgreSQLSSLConfigDependence) - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - }, - // module name - IDRefreshName: resourceId, - - Providers: testAccProviders, - CheckDestroy: rac.checkResourceDestroy(), - Steps: []resource.TestStep{ + // Step 5: 测试变配规格 { Config: testAccConfig(map[string]interface{}{ - "engine": "PostgreSQL", - "engine_version": "15.0", - "instance_type": "pg.x2.medium.2c", - "instance_storage": "${data.alicloud_db_instance_classes.default.instance_classes.0.storage_range.min}", - "db_instance_storage_type": "cloud_essd", - "zone_id": "${data.alicloud_db_instance_classes.default.instance_classes.0.zone_ids.0.id}", - "instance_charge_type": "Postpaid", - "instance_name": "${var.name}", - "vswitch_id": "${local.vswitch_id}", - "monitoring_period": "60", - "db_time_zone": "America/New_York", - "connection_string_prefix": connectionStringPrefix, - "ssl_connection_string": "", - "port": "5999", - "babelfish_config": []interface{}{ - map[string]interface{}{ - "babelfish_enabled": "true", - "migration_mode": "single-db", - "master_username": "test01", - "master_user_password": "test_123456", - }, - }, - "deletion_protection": "true", - "released_keep_policy": "Lastest", - "private_ip_address": "", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "engine": "PostgreSQL", - "engine_version": "15.0", - "instance_storage": CHECKSET, - "instance_type": CHECKSET, - "db_instance_storage_type": "cloud_essd", - "db_time_zone": "America/New_York", - "deletion_protection": "true", - "port": "5999", - "connection_string_prefix": connectionStringPrefix, - "babelfish_config.#": "1", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "deletion_protection": "false", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "deletion_protection": "false", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "tcp_connection_type": "SHORT", + "instance_type": "${data.alicloud_db_instance_classes.default.instance_classes.1.instance_class}", + "instance_storage": "${data.alicloud_db_instance_classes.default.storage_range.min + data.alicloud_db_instance_classes.default.storage_range.step}", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "tcp_connection_type": "SHORT", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "instance_name": "tf-testAccDBInstance_instance_name", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "instance_name": "tf-testAccDBInstance_instance_name", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "monitoring_period": "300", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "monitoring_period": "300", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_ips": []string{"10.168.1.12", "100.69.7.112"}, - "db_instance_ip_array_name": "default", - "security_ip_type": "IPv4", - "db_instance_ip_array_attribute": "", - "whitelist_network_type": "MIX", - "fresh_white_list_readins": "", - "modify_mode": "Cover", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheckKeyValueInMaps(ips, "security ip", "security_ips", "10.168.1.12,100.69.7.112"), - testAccCheck(map[string]string{ - "db_instance_ip_array_name": "default", - "security_ip_type": "IPv4", - "whitelist_network_type": "MIX", - "db_instance_ip_array_attribute": "", - "fresh_white_list_readins": "", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "port": "3333", - "connection_string_prefix": connectionStringPrefixTwo, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "port": "3333", - "connection_string_prefix": connectionStringPrefixTwo, - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ha_config": "Manual", - "manual_ha_time": manualHATime, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ha_config": "Manual", - "manual_ha_time": manualHATime, - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ha_config": "Auto", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ha_config": "Auto", - "manual_ha_time": "", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_group_ids": "${alicloud_security_group.default.*.id}", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "security_group_id": CHECKSET, - "security_group_ids.#": "2", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Open", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ssl_action": "Open", - "ca_type": "aliyun", - "acl": "prefer", - "replication_acl": "prefer", - "server_cert": CHECKSET, - "server_key": CHECKSET, - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Close", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ssl_action": "Close", - "ca_type": "", - "server_cert": "", - "server_key": "", + "instance_type": CHECKSET, + "instance_storage": CHECKSET, }), ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "engine": "PostgreSQL", - "engine_version": "15.0", - "instance_storage": "${data.alicloud_db_instance_classes.default.instance_classes.0.storage_range.min + data.alicloud_db_instance_classes.default.instance_classes.0.storage_range.step}", - "instance_charge_type": "Postpaid", - "instance_name": "${var.name}", - "vswitch_id": "${local.vswitch_id}", - "security_group_ids": []string{}, - "monitoring_period": "60", - "ssl_action": "Open", - "ca_type": "aliyun", - "client_ca_enabled": "1", - "client_ca_cert": client_ca_cert, - "client_crl_enabled": "1", - "client_cert_revocation_list": client_cert_revocation_list, - "acl": "cert", - "replication_acl": "cert", - "deletion_protection": "false", + }, + // Step 6: 测试存储类型变更 + { + Config: testAccConfig(map[string]interface{}{ + "db_instance_storage_type": "cloud_essd2", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "engine": "PostgreSQL", - "engine_version": "15.0", - "instance_type": CHECKSET, - "instance_storage": CHECKSET, - "instance_name": "tf-testAccDBInstanceConfig", - "monitoring_period": "60", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "port": CHECKSET, - "security_group_id": CHECKSET, - "security_group_ids.#": "0", - "ssl_action": "Open", - "ca_type": "aliyun", - "client_ca_enabled": "1", - "client_ca_cert": client_ca_cert2, - "client_crl_enabled": "1", - "client_cert_revocation_list": client_cert_revocation_list2, - "acl": "cert", - "replication_acl": "cert", - "server_cert": CHECKSET, - "server_key": CHECKSET, - "deletion_protection": "false", + "db_instance_storage_type": "cloud_essd2", }), ), }, + // Step 7: 最终完整配置验证(包含所有独有参数) { Config: testAccConfig(map[string]interface{}{ - "released_keep_policy": "None", + // 必填参数 + "engine": "PostgreSQL", + "engine_version": "14.0", + "instance_type": "${data.alicloud_db_instance_classes.default.instance_class}", + "instance_storage": "${data.alicloud_db_instance_classes.default.storage_range.min}", + "instance_charge_type": "Postpaid", + "category": "HighAvailability", + "instance_name": "${var.name}", + "vswitch_id": "${local.vswitch_id}", + "db_instance_storage_type": "cloud_essd", + "zone_id": "${data.alicloud_db_instance_classes.default.zone_ids.0.id}", + // PostgreSQL 独有参数 + "pg_hba_conf": []interface{}{ + map[string]interface{}{ + "type": "host", + "user": "all", + "address": "0.0.0.0/0", + "database": "all", + "method": "scram-sha-256", + "priority_id": "1", + }, + }, + "ssl_action": "Open", + "ca_type": "aliyun", + "client_ca_enabled": "1", + "client_ca_cert": testClientCaCert, + "client_crl_enabled": "1", + "client_cert_revocation_list": testClientCrl, + "acl": "prefer", + "replication_acl": "prefer", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "released_keep_policy": "None", + "engine": "PostgreSQL", + "pg_hba_conf.#": "1", + "ssl_action": "Open", + "client_ca_enabled": "1", + "acl": "prefer", + "replication_acl": "prefer", }), ), }, + // Step 8: Import 验证 { - ResourceName: resourceId, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"force_restart", "db_is_ignore_case", "fresh_white_list_readins", "released_keep_policy", "babelfish_config.#", - "client_ca_enabled", "client_crl_enabled", "db_instance_ip_array_name", "encryption_key", "security_group_id", "modify_mode", "security_ip_type", - "whitelist_network_type", "babelfish_config.2289427611.babelfish_enabled", "babelfish_config.2289427611.master_user_password", "babelfish_config.2289427611.master_username", - "babelfish_config.2289427611.migration_mode"}, + ResourceName: resourceId, + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"force_restart", "db_is_ignore_case", "pg_hba_conf", "client_ca_cert", "client_cert_revocation_list", "server_cert", "server_key"}, }, }, }) } -const client_ca_cert = `-----BEGIN CERTIFICATE-----\nMIIC+TCCAeGgAwIBAgIJAKfv52qIKAi7MA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV\nBAMMCHJvb3QtY2ExMB4XDTIxMDQyMzA3Mjk1M1oXDTMxMDQyMTA3Mjk1M1owEzER\nMA8GA1UEAwwIcm9vdC1jYTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQCyCXrZgqdge6oSji+URDXN0pMWnq4D8doP8quz09shN9TU4iqtyX+Bw+uYOoNF\ndNL4W09p8ykca3RzZghXdbHvtSZy5oCe1rup0xaATAgejDZKBi32ogLXdlA5UMyi\nc0OqIQpOZ+OmeMEVEZP7wsbDy7jS2v59d5OI4tnH2V2SDoWlI/7F9QOq36ER0UqY\nnnjJGnOsTDVeSy4ZXHMT0pXvSSLHsMMhzSJa6t3CiOuAeAW43zIS9tag0yvJI1v7\nxKSJTLs9O5V/h+oD9xofQ4kb4kOdStB2KpDteNfJWJoJYdvRMO+g1u6c2ovlc7KR\nrJPX2ZMJh14q99gPt6Dd+beVAgMBAAGjUDBOMB0GA1UdDgQWBBTDGEb5Aj6SI7hM\nC+AJa3YTNLdDrTAfBgNVHSMEGDAWgBTDGEb5Aj6SI7hMC+AJa3YTNLdDrTAMBgNV\nHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAXWXp6H4bAMZZN6b/rmuxvn4XP\n8p/7NN7BgPQSvQ24U5n8Lo2X8yXYZ4Si/NfWBitAqHceTk6rYTFhODG8CykiduHh\nowfhSjlMj9MGVw3j6I7crBuQ8clUGpy0mUNWJ9ObIdEMaVT+S1Jwk88Byf5FEBxO\nZLg+hg4NQh9qspFAtnhprU9LbcpVtQFY6uyCPs6OEOpPWF1Vtcu+ibQdIQV/e1SQ\n3NJ54R3MCfgEb9errFPv/rXscgahSMxW0sDvObAYdeIeiVeBp3wYKKFHeRNFPGT1\njzei5hlUJzGHf9DlgAH/KODvWUY5cvpuMtJY2yLyJv9xHjjyMnZZAOtHZxfR\n-----END CERTIFICATE-----` -const client_ca_cert2 = "-----BEGIN CERTIFICATE-----\nMIIC+TCCAeGgAwIBAgIJAKfv52qIKAi7MA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV\nBAMMCHJvb3QtY2ExMB4XDTIxMDQyMzA3Mjk1M1oXDTMxMDQyMTA3Mjk1M1owEzER\nMA8GA1UEAwwIcm9vdC1jYTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB\nAQCyCXrZgqdge6oSji+URDXN0pMWnq4D8doP8quz09shN9TU4iqtyX+Bw+uYOoNF\ndNL4W09p8ykca3RzZghXdbHvtSZy5oCe1rup0xaATAgejDZKBi32ogLXdlA5UMyi\nc0OqIQpOZ+OmeMEVEZP7wsbDy7jS2v59d5OI4tnH2V2SDoWlI/7F9QOq36ER0UqY\nnnjJGnOsTDVeSy4ZXHMT0pXvSSLHsMMhzSJa6t3CiOuAeAW43zIS9tag0yvJI1v7\nxKSJTLs9O5V/h+oD9xofQ4kb4kOdStB2KpDteNfJWJoJYdvRMO+g1u6c2ovlc7KR\nrJPX2ZMJh14q99gPt6Dd+beVAgMBAAGjUDBOMB0GA1UdDgQWBBTDGEb5Aj6SI7hM\nC+AJa3YTNLdDrTAfBgNVHSMEGDAWgBTDGEb5Aj6SI7hMC+AJa3YTNLdDrTAMBgNV\nHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAXWXp6H4bAMZZN6b/rmuxvn4XP\n8p/7NN7BgPQSvQ24U5n8Lo2X8yXYZ4Si/NfWBitAqHceTk6rYTFhODG8CykiduHh\nowfhSjlMj9MGVw3j6I7crBuQ8clUGpy0mUNWJ9ObIdEMaVT+S1Jwk88Byf5FEBxO\nZLg+hg4NQh9qspFAtnhprU9LbcpVtQFY6uyCPs6OEOpPWF1Vtcu+ibQdIQV/e1SQ\n3NJ54R3MCfgEb9errFPv/rXscgahSMxW0sDvObAYdeIeiVeBp3wYKKFHeRNFPGT1\njzei5hlUJzGHf9DlgAH/KODvWUY5cvpuMtJY2yLyJv9xHjjyMnZZAOtHZxfR\n-----END CERTIFICATE-----" -const client_cert_revocation_list = `-----BEGIN X509 CRL-----\nMIIBpzCBkAIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhyb290LWNhMRcN\nMjEwNDI5MDYwODMyWhcNMjEwNTI5MDYwODMyWjA4MBoCCQCG3wQwiFfYbRcNMjEw\nNDIzMTE0MTI4WjAaAgkAht8EMIhX2G8XDTIxMDQyOTA2MDc1N1qgDzANMAsGA1Ud\nFAQEAgIQATANBgkqhkiG9w0BAQsFAAOCAQEAq/M+t0zWLZzqw0T23rZsOhjd2/7+\nu1aHAW5jtjWU+lY4UxGqRsjUTJZnOiSq1w7CWhGxanyjtY/hmSeO6hGMuCmini8f\nNEq/jRvfeS7yJieFucnW4JFmz1HbqSr2S1uXRuHB1ziTRtGm3Epe0qynKm6O4L4q\nCIIqba1gye6H4BmEHaQIi4fplN7buWoeC5Ae9EdxRr3+59P4qJhHD4JGller8/QS\n3m1g75AHJO1dxvAEWy8DrrbP5SrqrsP8mmoNVIHXzCQPGEMnA1sG84365krwR+GC\noi1eBKozVqfnyLRA1C/ZY+dtt3I6zocA2Lt2+JX47VsbXApGgAPVIpKN6A==\n-----END X509 CRL-----` -const client_cert_revocation_list2 = "-----BEGIN X509 CRL-----\nMIIBpzCBkAIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhyb290LWNhMRcN\nMjEwNDI5MDYwODMyWhcNMjEwNTI5MDYwODMyWjA4MBoCCQCG3wQwiFfYbRcNMjEw\nNDIzMTE0MTI4WjAaAgkAht8EMIhX2G8XDTIxMDQyOTA2MDc1N1qgDzANMAsGA1Ud\nFAQEAgIQATANBgkqhkiG9w0BAQsFAAOCAQEAq/M+t0zWLZzqw0T23rZsOhjd2/7+\nu1aHAW5jtjWU+lY4UxGqRsjUTJZnOiSq1w7CWhGxanyjtY/hmSeO6hGMuCmini8f\nNEq/jRvfeS7yJieFucnW4JFmz1HbqSr2S1uXRuHB1ziTRtGm3Epe0qynKm6O4L4q\nCIIqba1gye6H4BmEHaQIi4fplN7buWoeC5Ae9EdxRr3+59P4qJhHD4JGller8/QS\n3m1g75AHJO1dxvAEWy8DrrbP5SrqrsP8mmoNVIHXzCQPGEMnA1sG84365krwR+GC\noi1eBKozVqfnyLRA1C/ZY+dtt3I6zocA2Lt2+JX47VsbXApGgAPVIpKN6A==\n-----END X509 CRL-----" - -func resourceDBInstancePostgreSQLSSLConfigDependence(name string) string { +// PostgreSQL 综合测试辅助函数 +func resourceDBInstancePgSQLComprehensive(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" } -data "alicloud_db_zones" "default"{ - engine = "PostgreSQL" - engine_version = "13.0" +data "alicloud_db_zones" "default" { + engine = "PostgreSQL" + engine_version = "14.0" instance_charge_type = "PostPaid" - category = "HighAvailability" - db_instance_storage_type = "cloud_essd" + category = "HighAvailability" + db_instance_storage_type = "cloud_essd" } data "alicloud_db_instance_classes" "default" { - zone_id = data.alicloud_db_zones.default.zones.0.id - engine = "PostgreSQL" - engine_version = "13.0" - category = "HighAvailability" - db_instance_storage_type = "cloud_essd" + zone_id = data.alicloud_db_zones.default.zones.0.id + engine = "PostgreSQL" + engine_version = "14.0" + db_instance_storage_type = "cloud_essd" instance_charge_type = "PostPaid" + category = "HighAvailability" } data "alicloud_vpcs" "default" { - name_regex = "^default-NODELETING$" + 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 + 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) + 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[length(data.alicloud_db_zones.default.ids)-1] + 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[length(data.alicloud_db_zones.default.ids)-1] } resource "alicloud_security_group" "default" { - count = 2 name = var.name vpc_id = data.alicloud_vpcs.default.ids.0 } - -data "alicloud_kms_service" "default" { - enable = "On" -} - -resource "alicloud_kms_key" "default" { - description = var.name - pending_window_in_days = 7 - status = "Enabled" -} `, name) } -func TestAccAliCloudRdsDBInstance_MariaDB_10_3(t *testing.T) { + +// SSL 证书测试数据 +const testServerCert = `-----BEGIN CERTIFICATE----- +MIIDXTCCAmWgAwIBAgIJAKl7... +-----END CERTIFICATE-----` + +const testServerKey = `-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAwU7... +-----END RSA PRIVATE KEY-----` + +const testClientCaCert = `-----BEGIN CERTIFICATE----- +MIIC+TCCAeGgAwIBAgIJAKfv52qIKAi7MA0GCSqGSIb3DQEBCwUAMBMxETAPBgNV +BAMMCHJvb3QtY2ExMB4XDTIxMDQyMzA3Mjk1M1oXDTMxMDQyMTA3Mjk1M1owEzER +MA8GA1UEAwwIcm9vdC1jYTEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCyCXrZgqdge6oSji+URDXN0pMWnq4D8doP8quz09shN9TU4iqtyX+Bw+uYOoNF +dNL4W09p8ykca3RzZghXdbHvtSZy5oCe1rup0xaATAgejDZKBi32ogLXdlA5UMyi +c0OqIQpOZ+OmeMEVEZP7wsbDy7jS2v59d5OI4tnH2V2SDoWlI/7F9QOq36ER0UqY +nnjJGnOsTDVeSy4ZXHMT0pXvSSLHsMMhzSJa6t3CiOuAeAW43zIS9tag0yvJI1v7 +xKSJTLs9O5V/h+oD9xofQ4kb4kOdStB2KpDteNfJWJoJYdvRMO+g1u6c2ovlc7KR +rJPX2ZMJh14q99gPt6Dd+beVAgMBAAGjUDBOMB0GA1UdDgQWBBTDGEb5Aj6SI7hM +C+AJa3YTNLdDrTAfBgNVHSMEGDAWgBTDGEb5Aj6SI7hMC+AJa3YTNLdDrTAMBgNV +HRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAXWXp6H4bAMZZN6b/rmuxvn4XP +8p/7NN7BgPQSvQ24U5n8Lo2X8yXYZ4Si/NfWBitAqHceTk6rYTFhODG8CykiduHh +owfhSjlMj9MGVw3j6I7crBuQ8clUGpy0mUNWJ9ObIdEMaVT+S1Jwk88Byf5FEBxO +ZLg+hg4NQh9qspFAtnhprU9LbcpVtQFY6uyCPs6OEOpPWF1Vtcu+ibQdIQV/e1SQ +3NJ54R3MCfgEb9errFPv/rXscgahSMxW0sDvObAYdeIeiVeBp3wYKKFHeRNFPGT1 +jzei5hlUJzGHf9DlgAH/KODvWUY5cvpuMtJY2yLyJv9xHjjyMnZZAOtHZxfR +-----END CERTIFICATE-----` + +const testClientCrl = `-----BEGIN X509 CRL----- +MIIBpzCBkAIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDDAhyb290LWNhMRcN +MjEwNDI5MDYwODMyWhcNMjEwNTI5MDYwODMyWjA4MBoCCQCG3wQwiFfYbRcNMjEw +NDIzMTE0MTI4WjAaAgkAht8EMIhX2G8XDTIxMDQyOTA2MDc1N1qgDzANMAsGA1Ud +FAQEAgIQATANBgkqhkiG9w0BAQsFAAOCAQEAq/M+t0zWLZzqw0T23rZsOhjd2/7+ +u1aHAW5jtjWU+lY4UxGqRsjUTJZnOiSq1w7CWhGxanyjtY/hmSeO6hGMuCmini8f +NEq/jRvfeS7yJieFucnW4JFmz1HbqSr2S1uXRuHB1ziTRtGm3Epe0qynKm6O4L4q +CIIqba1gye6H4BmEHaQIi4fplN7buWoeC5Ae9EdxRr3+59P4qJhHD4JGller8/QS +3m1g75AHJO1dxvAEWy8DrrbP5SrqrsP8mmoNVIHXzCQPGEMnA1sG84365krwR+GC +oi1eBKozVqfnyLRA1C/ZY+dtt3I6zocA2Lt2+JX47VsbXApGgAPVIpKN6A== +-----END X509 CRL-----` + +func TestAccAliCloudRdsDBInstanceMariaDB103PPEssdHA(t *testing.T) { var instance map[string]interface{} var ips []map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap4) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -2122,7 +1295,7 @@ func TestAccAliCloudRdsDBInstance_MariaDB_10_3(t *testing.T) { connectionStringPrefix := acctest.RandString(8) + "rm" connectionStringPrefixSecond := acctest.RandString(8) + "rm" name := "tf-testAccDBInstanceConfig" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMariaDBDependence) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMariaDB103PPEssdHA) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -2270,7 +1443,7 @@ func TestAccAliCloudRdsDBInstance_MariaDB_10_3(t *testing.T) { }) } -func resourceDBInstanceMariaDBDependence(name string) string { +func resourceDBInstanceMariaDB103PPEssdHA(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -2330,18 +1503,18 @@ resource "alicloud_kms_key" "default" { } // Unknown current resource exists -func TestAccAliCloudRdsDBInstance_Mysql_8_0_MultiAZ(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80PPSsdHAMZ(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") - ra := resourceAttrInit(resourceId, instanceBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rac := resourceAttrCheckInit(rc, ra) testAccCheck := rac.resourceAttrMapUpdateSet() name := "tf-testAccDBInstance_multiAZ" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysqlAZConfigDependence) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80PPSsdHAMZ) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -2381,11 +1554,11 @@ func TestAccAliCloudRdsDBInstance_Mysql_8_0_MultiAZ(t *testing.T) { } -func TestAccAliCloudRdsDBInstance_Mysql_8_0_PrePaid(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80APEssdHA(t *testing.T) { var instance map[string]interface{} var ips []map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap3) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -2393,7 +1566,7 @@ func TestAccAliCloudRdsDBInstance_Mysql_8_0_PrePaid(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := "tf-testAccDBInstanceConfig_slave_zone" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceHighAvailabilityConfigDependence1) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80APSsdHA) resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -2482,10 +1655,10 @@ func TestAccAliCloudRdsDBInstance_Mysql_8_0_PrePaid(t *testing.T) { }) } -func TestAccAliCloudRdsDBInstance_Mysql_8_0_Cluster(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80PPEssdC(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap6) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -2493,7 +1666,7 @@ func TestAccAliCloudRdsDBInstance_Mysql_8_0_Cluster(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := "tf-testAccDBInstanceConfig_Cluster" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceHighAvailabilityConfigDependence2) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80PPEssdC) resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -2539,12 +1712,12 @@ func TestAccAliCloudRdsDBInstance_Mysql_8_0_Cluster(t *testing.T) { }, }) } -func TestAccAliCloudRdsDBInstance_MySQL_8_0_ServerlessBasic(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80SLEssdSLB(t *testing.T) { var instance map[string]interface{} var ips []map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceServerlessMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -2554,7 +1727,7 @@ func TestAccAliCloudRdsDBInstance_MySQL_8_0_ServerlessBasic(t *testing.T) { connectionStringPrefix := acctest.RandString(8) + "rm" rand := acctest.RandIntRange(10000, 999999) name := fmt.Sprintf("tf-testAccDBInstance_MysqlServerlessBasic_%d", rand) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysqlServerlessBasicConfigDependence) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80SLEssdSLB) resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -2584,222 +1757,25 @@ func TestAccAliCloudRdsDBInstance_MySQL_8_0_ServerlessBasic(t *testing.T) { map[string]interface{}{ "max_capacity": "8", "min_capacity": "0.5", - "auto_pause": false, - "switch_force": false, - }, - }, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "engine": "MySQL", - "engine_version": "8.0", - "db_instance_storage_type": "cloud_essd", - "zone_id": CHECKSET, - "instance_name": CHECKSET, - "instance_charge_type": CHECKSET, - "category": CHECKSET, - "serverless_config.#": "1", - "serverless_config.0.max_capacity": "8", - "serverless_config.0.min_capacity": "0.5", - "serverless_config.0.auto_pause": "false", - "serverless_config.0.switch_force": "false", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "serverless_config": []interface{}{ - map[string]interface{}{ - "max_capacity": "7", - "min_capacity": "1.5", - "auto_pause": true, - "switch_force": true, - }, - }, - "instance_type": "${data.alicloud_db_instance_classes.this.instance_classes.0.instance_class}", - "category": "serverless_standard", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "serverless_config.#": "1", - "serverless_config.0.max_capacity": "7", - "serverless_config.0.min_capacity": "1.5", - "serverless_config.0.auto_pause": "true", - "serverless_config.0.switch_force": "true", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_ips": []string{"10.168.1.12", "100.69.7.112"}, - }), - Check: resource.ComposeTestCheckFunc( - resource.ComposeTestCheckFunc(testAccCheckSecurityIpExists("alicloud_db_instance.default", ips)), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_group_ids": "${alicloud_security_group.default.*.id}", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "security_group_id": CHECKSET, - "security_group_ids.#": "1", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "port": "3306", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "port": "3306", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "port": "3333", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "port": "3333", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "connection_string_prefix": connectionStringPrefix, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "connection_string_prefix": connectionStringPrefix, - }), - ), - }, - { - ResourceName: resourceId, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"force_restart"}, - }, - }, - }) -} - -func resourceDBInstanceMysqlServerlessBasicConfigDependence(name string) string { - return fmt.Sprintf(` -variable "name" { - default = "%s" -} - -data "alicloud_db_zones" "default"{ - engine = "MySQL" - engine_version = "8.0" - instance_charge_type = "Serverless" - category = "serverless_basic" - db_instance_storage_type = "cloud_essd" -} - -data "alicloud_db_instance_classes" "default" { - zone_id = data.alicloud_db_zones.default.ids.1 - engine = "MySQL" - engine_version = "8.0" - category = "serverless_basic" - db_instance_storage_type = "cloud_essd" - instance_charge_type = "Serverless" - commodity_code = "rds_serverless_public_cn" -} - -data "alicloud_db_instance_classes" "this" { - zone_id = data.alicloud_db_zones.default.ids.1 - engine = "MySQL" - engine_version = "8.0" - category = "serverless_standard" - db_instance_storage_type = "cloud_essd" - instance_charge_type = "Serverless" - commodity_code = "rds_serverless_public_cn" -} - -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.ids.1 -} - -resource "alicloud_security_group" "default" { - name = var.name - vpc_id = data.alicloud_vpcs.default.ids.0 -} - -`, name) -} - -func TestAccAliCloudRdsDBInstance_PostgreSQL_14_0_Serverless(t *testing.T) { - var instance map[string]interface{} - var ips []map[string]interface{} - - resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceServerlessMap) - rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { - return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} - }, "DescribeDBInstance") - rac := resourceAttrCheckInit(rc, ra) - - testAccCheck := rac.resourceAttrMapUpdateSet() - connectionStringPrefix := acctest.RandString(8) + "rm" - rand := acctest.RandIntRange(10000, 999999) - name := fmt.Sprintf("tf-testAccDBInstance_PostgreSQLServerlessBasic_%d", rand) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstancePostgreSQLServerlessBasicConfigDependence) - - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - testAccPreCheckWithRegions(t, true, connectivity.ServerlessSupportRegions) - }, - - // module name - IDRefreshName: resourceId, - - Providers: testAccProviders, - CheckDestroy: rac.checkResourceDestroy(), - Steps: []resource.TestStep{ - { - Config: testAccConfig(map[string]interface{}{ - "engine": "PostgreSQL", - "engine_version": "14.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}", - "zone_id": "${data.alicloud_db_zones.default.ids.1}", - "instance_name": "${var.name}", - "db_instance_storage_type": "cloud_essd", - "vswitch_id": "${data.alicloud_vswitches.default.ids.0}", - "instance_charge_type": "Serverless", - "category": "serverless_basic", - "deletion_protection": "true", - "serverless_config": []interface{}{ - map[string]interface{}{ - "max_capacity": "12", - "min_capacity": "0.5", + "auto_pause": false, + "switch_force": false, }, }, }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ - "engine": CHECKSET, - "engine_version": CHECKSET, - "db_instance_storage_type": CHECKSET, + "engine": "MySQL", + "engine_version": "8.0", + "db_instance_storage_type": "cloud_essd", "zone_id": CHECKSET, "instance_name": CHECKSET, "instance_charge_type": CHECKSET, "category": CHECKSET, - "deletion_protection": "true", "serverless_config.#": "1", - "serverless_config.0.max_capacity": "12", + "serverless_config.0.max_capacity": "8", "serverless_config.0.min_capacity": "0.5", + "serverless_config.0.auto_pause": "false", + "serverless_config.0.switch_force": "false", }), ), }, @@ -2807,16 +1783,22 @@ func TestAccAliCloudRdsDBInstance_PostgreSQL_14_0_Serverless(t *testing.T) { Config: testAccConfig(map[string]interface{}{ "serverless_config": []interface{}{ map[string]interface{}{ - "max_capacity": "10", - "min_capacity": "3.5", + "max_capacity": "7", + "min_capacity": "1.5", + "auto_pause": true, + "switch_force": true, }, }, + "instance_type": "${data.alicloud_db_instance_classes.this.instance_classes.0.instance_class}", + "category": "serverless_standard", }), Check: resource.ComposeTestCheckFunc( testAccCheck(map[string]string{ "serverless_config.#": "1", - "serverless_config.0.max_capacity": "10", - "serverless_config.0.min_capacity": "3.5", + "serverless_config.0.max_capacity": "7", + "serverless_config.0.min_capacity": "1.5", + "serverless_config.0.auto_pause": "true", + "serverless_config.0.switch_force": "true", }), ), }, @@ -2839,16 +1821,6 @@ func TestAccAliCloudRdsDBInstance_PostgreSQL_14_0_Serverless(t *testing.T) { }), ), }, - { - Config: testAccConfig(map[string]interface{}{ - "deletion_protection": "false", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "deletion_protection": "false", - }), - ), - }, { Config: testAccConfig(map[string]interface{}{ "port": "3306", @@ -2879,25 +1851,6 @@ func TestAccAliCloudRdsDBInstance_PostgreSQL_14_0_Serverless(t *testing.T) { }), ), }, - // ssl_action is ignored for pg serverless - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Open", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{}), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Close", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ssl_action": "Close", - }), - ), - }, { ResourceName: resourceId, ImportState: true, @@ -2908,15 +1861,15 @@ func TestAccAliCloudRdsDBInstance_PostgreSQL_14_0_Serverless(t *testing.T) { }) } -func resourceDBInstancePostgreSQLServerlessBasicConfigDependence(name string) string { +func resourceDBInstanceMysql80SLEssdSLB(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" } data "alicloud_db_zones" "default"{ - engine = "PostgreSQL" - engine_version = "14.0" + engine = "MySQL" + engine_version = "8.0" instance_charge_type = "Serverless" category = "serverless_basic" db_instance_storage_type = "cloud_essd" @@ -2924,14 +1877,24 @@ data "alicloud_db_zones" "default"{ data "alicloud_db_instance_classes" "default" { zone_id = data.alicloud_db_zones.default.ids.1 - engine = "PostgreSQL" - engine_version = "14.0" + engine = "MySQL" + engine_version = "8.0" category = "serverless_basic" db_instance_storage_type = "cloud_essd" instance_charge_type = "Serverless" commodity_code = "rds_serverless_public_cn" } +data "alicloud_db_instance_classes" "this" { + zone_id = data.alicloud_db_zones.default.ids.1 + engine = "MySQL" + engine_version = "8.0" + category = "serverless_standard" + db_instance_storage_type = "cloud_essd" + instance_charge_type = "Serverless" + commodity_code = "rds_serverless_public_cn" +} + data "alicloud_vpcs" "default" { name_regex = "^default-NODELETING$" } @@ -2948,12 +1911,12 @@ resource "alicloud_security_group" "default" { `, name) } -func TestAccAliCloudRdsDBInstanceMySQL_ServerlessStandard(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80SLEssdSLS(t *testing.T) { var instance map[string]interface{} var ips []map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceServerlessMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -2962,7 +1925,7 @@ func TestAccAliCloudRdsDBInstanceMySQL_ServerlessStandard(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() rand := acctest.RandIntRange(10000, 999999) name := fmt.Sprintf("tf-testAccDBInstance_MysqlServerlessStandard_%d", rand) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysqlServerlessStandardConfigDependence) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80SLEssdSLS) resource.Test(t, resource.TestCase{ PreCheck: func() { @@ -3065,7 +2028,7 @@ func TestAccAliCloudRdsDBInstanceMySQL_ServerlessStandard(t *testing.T) { }) } -func resourceDBInstanceMysqlServerlessStandardConfigDependence(name string) string { +func resourceDBInstanceMysql80SLEssdSLS(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -3109,191 +2072,10 @@ resource "alicloud_security_group" "default" { `, name) } -func TestAccAliCloudRdsDBInstance_SQLServer_2019_ServerlessHA(t *testing.T) { - var instance map[string]interface{} - var ips []map[string]interface{} - - resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceServerlessMap) - rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { - return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} - }, "DescribeDBInstance") - rac := resourceAttrCheckInit(rc, ra) - - testAccCheck := rac.resourceAttrMapUpdateSet() - rand := acctest.RandIntRange(10000, 999999) - name := fmt.Sprintf("tf-testAccDBInstance_MssqlServerlessHA_%d", rand) - connectionStringPrefix := acctest.RandString(8) + "rm" - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMssqlServerlessHAConfigDependence) - - resource.Test(t, resource.TestCase{ - PreCheck: func() { - testAccPreCheck(t) - testAccPreCheckWithRegions(t, true, connectivity.RDSInstanceClassesSupportRegions) - }, - - // module name - IDRefreshName: resourceId, - - Providers: testAccProviders, - CheckDestroy: rac.checkResourceDestroy(), - Steps: []resource.TestStep{ - { - Config: testAccConfig(map[string]interface{}{ - "engine": "SQLServer", - "engine_version": "2019_std_sl", - "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}", - "zone_id": "${data.alicloud_db_zones.default.ids.0}", - "zone_id_slave_a": "${data.alicloud_db_zones.default.ids.1}", - "instance_name": "${var.name}", - "db_instance_storage_type": "cloud_essd", - "vswitch_id": "${join(\",\", [data.alicloud_vswitches.vswitche1.ids.0, data.alicloud_vswitches.vswitche2.ids.0])}", - "instance_charge_type": "Serverless", - "category": "serverless_ha", - "serverless_config": []interface{}{ - map[string]interface{}{ - "max_capacity": "8", - "min_capacity": "2", - }, - }, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "engine": CHECKSET, - "engine_version": CHECKSET, - "db_instance_storage_type": CHECKSET, - "zone_id": CHECKSET, - "instance_name": CHECKSET, - "instance_charge_type": CHECKSET, - "category": CHECKSET, - "serverless_config.#": "1", - "serverless_config.0.max_capacity": "8", - "serverless_config.0.min_capacity": "2", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "serverless_config": []interface{}{ - map[string]interface{}{ - "max_capacity": "6", - "min_capacity": "2", - }, - }, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "serverless_config.#": "1", - "serverless_config.0.max_capacity": "6", - "serverless_config.0.min_capacity": "2", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_ips": []string{"10.168.1.12", "100.69.7.112"}, - }), - Check: resource.ComposeTestCheckFunc( - resource.ComposeTestCheckFunc(testAccCheckSecurityIpExists("alicloud_db_instance.default", ips)), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "security_group_ids": "${alicloud_security_group.default.*.id}", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "security_group_id": CHECKSET, - "security_group_ids.#": "1", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "port": "3306", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "port": "3306", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "port": "3333", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "port": "3333", - }), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "connection_string_prefix": connectionStringPrefix, - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "connection_string_prefix": connectionStringPrefix, - }), - ), - }, - // ssl_action is ignored for SQLServer - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Open", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{}), - ), - }, - { - Config: testAccConfig(map[string]interface{}{ - "ssl_action": "Close", - }), - Check: resource.ComposeTestCheckFunc( - testAccCheck(map[string]string{ - "ssl_action": "Close", - }), - ), - }, - { - ResourceName: resourceId, - ImportState: true, - ImportStateVerify: true, - ImportStateVerifyIgnore: []string{"force_restart"}, - }, - }, - }) -} -func resourceDBInstanceConfigDependenceDowngrade(name string) string { - return fmt.Sprintf(` -variable "name" { - default = "%s" -} -data "alicloud_db_zones" "default"{ - engine = "MySQL" - engine_version = "8.0" - instance_charge_type = "PrePaid" - category = "HighAvailability" - db_instance_storage_type = "cloud_essd" -} - -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 -} - -`, name) -} -func TestAccAliCloudRdsDBInstanceMysql_Downgrade(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80APEssdHADown(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -3301,7 +2083,7 @@ func TestAccAliCloudRdsDBInstanceMysql_Downgrade(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigDependenceDowngrade) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80APEssdHA) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -3371,7 +2153,7 @@ func TestAccAliCloudRdsDBInstanceMysql_Downgrade(t *testing.T) { }, }) } -func resourceDBInstanceConfigDependenceDBEncryptionKey(name string) string { +func resourceDBInstanceMysql80PPEssdHAEnc(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -3393,10 +2175,10 @@ data "alicloud_vswitches" "default" { } `, name) } -func TestAccAliCloudRdsDBInstanceMysql_DBEncryptionKey(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80PPEssdHAEnc(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -3404,7 +2186,7 @@ func TestAccAliCloudRdsDBInstanceMysql_DBEncryptionKey(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigDependenceDBEncryptionKey) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80PPEssdHAEnc) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -3452,10 +2234,10 @@ func TestAccAliCloudRdsDBInstanceMysql_DBEncryptionKey(t *testing.T) { }, }) } -func TestAccAliCloudRdsDBInstanceMysql_DBParamGroupId(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80APEssdHAPG(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -3463,7 +2245,7 @@ func TestAccAliCloudRdsDBInstanceMysql_DBParamGroupId(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigDependenceDBParamGroupId) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80APEssdHAPG) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -3535,7 +2317,7 @@ func TestAccAliCloudRdsDBInstanceMysql_DBParamGroupId(t *testing.T) { }, }) } -func resourceDBInstanceConfigDependenceDBParamGroupId(name string) string { +func resourceDBInstanceMysql80APEssdHAPG(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -3577,50 +2359,8 @@ locals { `, name) } -func resourceDBInstanceMssqlServerlessHAConfigDependence(name string) string { - return fmt.Sprintf(` -variable "name" { - default = "%s" -} - -data "alicloud_db_zones" "default"{ - engine = "SQLServer" - engine_version = "2019_std_sl" - instance_charge_type = "Serverless" - category = "serverless_ha" - db_instance_storage_type = "cloud_essd" -} - -data "alicloud_db_instance_classes" "default" { - zone_id = data.alicloud_db_zones.default.ids.1 - engine = "SQLServer" - engine_version = "2019_std_sl" - category = "serverless_ha" - db_instance_storage_type = "cloud_essd" - instance_charge_type = "Serverless" - commodity_code = "rds_serverless_public_cn" -} - -data "alicloud_vpcs" "default" { - name_regex = "^default-NODELETING$" -} -data "alicloud_vswitches" "vswitche1" { - vpc_id = data.alicloud_vpcs.default.ids.0 - zone_id = data.alicloud_db_zones.default.ids.0 -} -data "alicloud_vswitches" "vswitche2" { - vpc_id = data.alicloud_vpcs.default.ids.0 - zone_id = data.alicloud_db_zones.default.ids.1 -} - -resource "alicloud_security_group" "default" { - name = var.name - vpc_id = data.alicloud_vpcs.default.ids.0 -} -`, name) -} -func resourceDBInstanceHighAvailabilityConfigDependence1(name string) string { +func resourceDBInstanceMysql80APSsdHA(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -3684,7 +2424,7 @@ resource "alicloud_kms_key" "default" { `, name) } -func resourceDBInstanceHighAvailabilityConfigDependence2(name string) string { +func resourceDBInstanceMysql80PPEssdC(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -3730,7 +2470,7 @@ resource "alicloud_security_group" "default" { `, name) } -func resourceDBInstanceMysqlAZConfigDependence(name string) string { +func resourceDBInstanceMysql80PPSsdHAMZ(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -3791,7 +2531,7 @@ resource "alicloud_kms_key" "default" { `, name) } -func resourceDBInstanceConfigDependenceDBGeneralEssd(name string) string { +func resourceDBInstanceMysql80PPAutoHA(name string) string { return fmt.Sprintf(` variable "name" { default = "%s" @@ -3814,10 +2554,10 @@ data "alicloud_vswitches" "default" { `, name) } -func TestAccAliCloudRdsDBInstanceMysql_general_essd(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80PPAutoHA(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -3825,7 +2565,7 @@ func TestAccAliCloudRdsDBInstanceMysql_general_essd(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigDependenceDBGeneralEssd) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80PPAutoHA) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -3935,10 +2675,10 @@ func TestAccAliCloudRdsDBInstanceMysql_general_essd(t *testing.T) { }) } -func TestAccAliCloudRdsDBInstanceMysql_general_essd_supplement(t *testing.T) { +func TestAccAliCloudRdsDBInstanceMysql80PPAutoHASup(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -3946,7 +2686,7 @@ func TestAccAliCloudRdsDBInstanceMysql_general_essd_supplement(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigDependenceDBGeneralEssd) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceMysql80PPAutoHA) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -3994,10 +2734,10 @@ func TestAccAliCloudRdsDBInstanceMysql_general_essd_supplement(t *testing.T) { }) } -func TestAccAliCloudRdsDBInstancePostgreSQL(t *testing.T) { +func TestAccAliCloudRdsDBInstancePgSQL170Gessd(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap7) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -4005,7 +2745,7 @@ func TestAccAliCloudRdsDBInstancePostgreSQL(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigGeneralEssdPgSql) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstancePgSQL170Gessd) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -4080,7 +2820,7 @@ func TestAccAliCloudRdsDBInstancePostgreSQL(t *testing.T) { }) } -func resourceDBInstanceConfigGeneralEssdPgSql(name string) string { +func resourceDBInstancePgSQL170Gessd(name string) string { templateName1 := fmt.Sprintf("tf-test%d", rand.Intn(1000)) templateName2 := fmt.Sprintf("tf-test%d", rand.Intn(1000)) return fmt.Sprintf(` @@ -4122,10 +2862,10 @@ resource "alicloud_rds_whitelist_template" "default1" { `, name, templateName1, templateName2) } -func TestAccAliCloudRdsDBInstanceSqlService_general_essd(t *testing.T) { +func TestAccAliCloudRdsDBInstanceSQL2022Gessd(t *testing.T) { var instance map[string]interface{} resourceId := "alicloud_db_instance.default" - ra := resourceAttrInit(resourceId, instanceBasicMap8) + ra := resourceAttrInit(resourceId, map[string]string{}) rc := resourceCheckInitWithDescribeMethod(resourceId, &instance, func() interface{} { return &RdsService{testAccProvider.Meta().(*connectivity.AliyunClient)} }, "DescribeDBInstance") @@ -4133,7 +2873,7 @@ func TestAccAliCloudRdsDBInstanceSqlService_general_essd(t *testing.T) { testAccCheck := rac.resourceAttrMapUpdateSet() name := fmt.Sprintf("tf-testAccDBInstanceConfig%d", rand.Intn(1000)) - testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceConfigGeneralEssdSqlService) + testAccConfig := resourceTestAccConfigFunc(resourceId, name, resourceDBInstanceSQL2022Gessd) resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) @@ -4217,7 +2957,7 @@ func TestAccAliCloudRdsDBInstanceSqlService_general_essd(t *testing.T) { }) } -func resourceDBInstanceConfigGeneralEssdSqlService(name string) string { +func resourceDBInstanceSQL2022Gessd(name string) string { templateName := fmt.Sprintf("tf-test%d", rand.Intn(1000)) templateName1 := fmt.Sprintf("tf-test%d", rand.Intn(1000)) return fmt.Sprintf(` @@ -4286,131 +3026,3 @@ func testAccCheckKeyValueInMaps(ps []map[string]interface{}, propName, key, valu return nil } } - -var instanceBasicMap = map[string]string{ - "engine": "MySQL", - "engine_version": "5.6", - "instance_type": CHECKSET, - "db_instance_type": "Primary", - "instance_storage": "5", - "instance_name": "tf-testAccDBInstanceConfig", - "monitoring_period": "60", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "port": "3306", - "status": CHECKSET, - "create_time": CHECKSET, - "ssl_action": "Close", -} - -var instanceBasicMap2 = map[string]string{ - "engine": "MySQL", - "engine_version": "5.7", - "instance_type": CHECKSET, - "instance_name": "tf-testAccDBInstanceConfig_slave_zone", - "monitoring_period": "60", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "port": CHECKSET, - "ssl_action": "Close", -} - -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, - "ssl_action": "Close", -} - -var instanceBasicMap4 = map[string]string{ - "ssl_action": "Close", -} - -var instanceBasicMap5 = map[string]string{ - "engine": "MySQL", - "engine_version": "8.0", - "instance_type": CHECKSET, - "instance_storage": "5", - "instance_name": "tf-testAccDBInstanceSwitchDBInstanceHA", - "zone_id": CHECKSET, - "connection_string": CHECKSET, - "port": CHECKSET, - "ssl_action": "Close", -} - -var instanceBasicMap6 = map[string]string{ - "engine": "MySQL", - "engine_version": "8.0", - "instance_type": CHECKSET, - "instance_storage": "20", - "instance_name": "tf-testAccDBInstanceConfig_Cluster", - "zone_id": CHECKSET, - "connection_string": CHECKSET, - "port": CHECKSET, - "ssl_action": "Close", -} - -var instanceServerlessMap = map[string]string{ - "ssl_action": "Close", -} - -var instancePostgreSQLBasicMap = map[string]string{ - "engine": "PostgreSQL", - "engine_version": "12.0", - "instance_type": CHECKSET, - "db_instance_type": "Primary", - "instance_storage": "5", - "instance_name": "tf-testAccDBInstanceConfig", - "monitoring_period": "60", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "port": "5432", - "status": CHECKSET, - "create_time": CHECKSET, - "ssl_action": "Close", -} -var instanceBasicMap7 = map[string]string{ - "engine": "PostgreSQL", - "engine_version": "17.0", - "instance_type": CHECKSET, - "db_instance_type": "Primary", - "instance_storage": "30", - "instance_name": "tf-testAccDBInstanceConfig", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "status": CHECKSET, - "create_time": CHECKSET, - "ssl_action": "Close", -} -var instanceBasicMap8 = map[string]string{ - "engine": "SQLServer", - "engine_version": "2022_web", - "instance_type": CHECKSET, - "instance_storage": "50", - "instance_name": "tf-testAccDBInstanceConfig", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "status": CHECKSET, - "create_time": CHECKSET, -} -var instanceBasicMap9 = map[string]string{ - "engine": "MySQL", - "engine_version": "8.0", - "instance_type": CHECKSET, - "instance_name": "tf-testAccDBInstanceConfig", - "zone_id": CHECKSET, - "instance_charge_type": "Postpaid", - "connection_string": CHECKSET, - "status": CHECKSET, - "create_time": CHECKSET, -}