diff --git a/docs/resources/gaussdb_opengauss_instance.md b/docs/resources/gaussdb_opengauss_instance.md index 6589dfca79..24d3db79b3 100644 --- a/docs/resources/gaussdb_opengauss_instance.md +++ b/docs/resources/gaussdb_opengauss_instance.md @@ -136,15 +136,13 @@ The following arguments are supported: Changing this parameter will create a new resource. * `sharding_num` - (Optional, Int) Specifies the sharding number. The valid value is range form `1` to `9`. - The default value is 3. This parameter is valid only when the HA mode is set to **enterprise**. + The default value is 3. * `coordinator_num` - (Optional, Int) Specifies the coordinator number. Values: 1~9. The default value is 3. The value must not be greater than twice value of `sharding_num`. - This parameter is valid only when the HA mode is set to **enterprise**. * `replica_num` - (Optional, Int, ForceNew) The replica number. The valid values are **2** and **3**, defaults to **3**. Double replicas are only available for specific users and supports only instance versions are v1.3.0 or later. - This parameter is valid only when the HA mode is set to **centralization_standard**. Changing this parameter will create a new resource. * `enterprise_project_id` - (Optional, String, ForceNew) Specifies the enterprise project ID. diff --git a/huaweicloud/services/acceptance/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance_test.go b/huaweicloud/services/acceptance/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance_test.go index 1375953076..ca88f51ff3 100644 --- a/huaweicloud/services/acceptance/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance_test.go +++ b/huaweicloud/services/acceptance/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance_test.go @@ -46,7 +46,7 @@ func TestAccOpenGaussInstance_basic(t *testing.T) { CheckDestroy: rc.CheckResourceDestroy(), Steps: []resource.TestStep{ { - Config: testAccOpenGaussInstance_basic(rName, password), + Config: testAccOpenGaussInstance_basic(rName, password, 3), Check: resource.ComposeTestCheckFunc( rc.CheckResourceExists(), resource.TestCheckResourceAttrPair(resourceName, "vpc_id", "huaweicloud_vpc.test", "id"), @@ -63,17 +63,82 @@ func TestAccOpenGaussInstance_basic(t *testing.T) { resource.TestCheckResourceAttr(resourceName, "volume.0.size", "40"), resource.TestCheckResourceAttr(resourceName, "sharding_num", "1"), resource.TestCheckResourceAttr(resourceName, "coordinator_num", "2"), + resource.TestCheckResourceAttr(resourceName, "replica_num", "3"), + resource.TestCheckResourceAttr(resourceName, "volume.0.size", "40"), + ), + }, + { + Config: testAccOpenGaussInstance_update(rName, newPassword, 3), + Check: resource.ComposeTestCheckFunc( + rc.CheckResourceExists(), + resource.TestCheckResourceAttr(resourceName, "name", fmt.Sprintf("%s-update", rName)), + resource.TestCheckResourceAttr(resourceName, "password", newPassword), + resource.TestCheckResourceAttr(resourceName, "sharding_num", "2"), + resource.TestCheckResourceAttr(resourceName, "coordinator_num", "3"), + resource.TestCheckResourceAttr(resourceName, "replica_num", "3"), + resource.TestCheckResourceAttr(resourceName, "volume.0.size", "80"), + resource.TestCheckResourceAttr(resourceName, "backup_strategy.0.start_time", "08:00-09:00"), + resource.TestCheckResourceAttr(resourceName, "backup_strategy.0.keep_days", "8"), + ), + }, + }, + }) +} + +func TestAccOpenGaussInstance_replicaNumTwo(t *testing.T) { + var ( + instance instances.GaussDBInstance + resourceName = "huaweicloud_gaussdb_opengauss_instance.test" + rName = acceptance.RandomAccResourceNameWithDash() + password = fmt.Sprintf("%s@123", acctest.RandString(5)) + newPassword = fmt.Sprintf("%sUpdate@123", acctest.RandString(5)) + ) + + rc := acceptance.InitResourceCheck( + resourceName, + &instance, + getOpenGaussInstanceFunc, + ) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { + acceptance.TestAccPreCheck(t) + acceptance.TestAccPreCheckHighCostAllow(t) + }, + ProviderFactories: acceptance.TestAccProviderFactories, + CheckDestroy: rc.CheckResourceDestroy(), + Steps: []resource.TestStep{ + { + Config: testAccOpenGaussInstance_basic(rName, password, 2), + Check: resource.ComposeTestCheckFunc( + rc.CheckResourceExists(), + resource.TestCheckResourceAttrPair(resourceName, "vpc_id", "huaweicloud_vpc.test", "id"), + resource.TestCheckResourceAttrPair(resourceName, "subnet_id", "huaweicloud_vpc_subnet.test", "id"), + resource.TestCheckResourceAttrPair(resourceName, "security_group_id", + "huaweicloud_networking_secgroup.test", "id"), + resource.TestCheckResourceAttr(resourceName, "flavor", "gaussdb.opengauss.ee.dn.m6.2xlarge.8.in"), + resource.TestCheckResourceAttr(resourceName, "name", rName), + resource.TestCheckResourceAttr(resourceName, "password", password), + resource.TestCheckResourceAttr(resourceName, "ha.0.mode", "enterprise"), + resource.TestCheckResourceAttr(resourceName, "ha.0.replication_mode", "sync"), + resource.TestCheckResourceAttr(resourceName, "ha.0.consistency", "strong"), + resource.TestCheckResourceAttr(resourceName, "volume.0.type", "ULTRAHIGH"), + resource.TestCheckResourceAttr(resourceName, "volume.0.size", "40"), + resource.TestCheckResourceAttr(resourceName, "sharding_num", "1"), + resource.TestCheckResourceAttr(resourceName, "coordinator_num", "2"), + resource.TestCheckResourceAttr(resourceName, "replica_num", "2"), resource.TestCheckResourceAttr(resourceName, "volume.0.size", "40"), ), }, { - Config: testAccOpenGaussInstance_update(rName, newPassword), + Config: testAccOpenGaussInstance_update(rName, newPassword, 2), Check: resource.ComposeTestCheckFunc( rc.CheckResourceExists(), resource.TestCheckResourceAttr(resourceName, "name", fmt.Sprintf("%s-update", rName)), resource.TestCheckResourceAttr(resourceName, "password", newPassword), resource.TestCheckResourceAttr(resourceName, "sharding_num", "2"), resource.TestCheckResourceAttr(resourceName, "coordinator_num", "3"), + resource.TestCheckResourceAttr(resourceName, "replica_num", "2"), resource.TestCheckResourceAttr(resourceName, "volume.0.size", "80"), resource.TestCheckResourceAttr(resourceName, "backup_strategy.0.start_time", "08:00-09:00"), resource.TestCheckResourceAttr(resourceName, "backup_strategy.0.keep_days", "8"), @@ -218,10 +283,18 @@ resource "huaweicloud_networking_secgroup_rule" "in_v4_tcp_opengauss" { protocol = "tcp" remote_ip_prefix = "0.0.0.0/0" } + +resource "huaweicloud_networking_secgroup_rule" "in_v4_tcp_opengauss_egress" { + security_group_id = huaweicloud_networking_secgroup.test.id + ethertype = "IPv4" + direction = "egress" + protocol = "tcp" + remote_ip_prefix = "0.0.0.0/0" +} `, common.TestBaseNetwork(rName)) } -func testAccOpenGaussInstance_basic(rName, password string) string { +func testAccOpenGaussInstance_basic(rName, password string, replicaNum int) string { return fmt.Sprintf(` %[1]s @@ -235,6 +308,7 @@ resource "huaweicloud_gaussdb_opengauss_instance" "test" { password = "%[3]s" sharding_num = 1 coordinator_num = 2 + replica_num = %[4]d availability_zone = "${data.huaweicloud_availability_zones.test.names[0]},${data.huaweicloud_availability_zones.test.names[0]},${data.huaweicloud_availability_zones.test.names[0]}" ha { @@ -248,10 +322,10 @@ resource "huaweicloud_gaussdb_opengauss_instance" "test" { size = 40 } } -`, testAccOpenGaussInstance_base(rName), rName, password) +`, testAccOpenGaussInstance_base(rName), rName, password, replicaNum) } -func testAccOpenGaussInstance_update(rName, password string) string { +func testAccOpenGaussInstance_update(rName, password string, replicaNum int) string { return fmt.Sprintf(` %[1]s @@ -265,6 +339,7 @@ resource "huaweicloud_gaussdb_opengauss_instance" "test" { password = "%[3]s" sharding_num = 2 coordinator_num = 3 + replica_num = %[4]d availability_zone = "${data.huaweicloud_availability_zones.test.names[0]},${data.huaweicloud_availability_zones.test.names[0]},${data.huaweicloud_availability_zones.test.names[0]}" ha { @@ -283,7 +358,7 @@ resource "huaweicloud_gaussdb_opengauss_instance" "test" { keep_days = 8 } } -`, testAccOpenGaussInstance_base(rName), rName, password) +`, testAccOpenGaussInstance_base(rName), rName, password, replicaNum) } func testAccOpenGaussInstance_prepaid(rName, password string) string { diff --git a/huaweicloud/services/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance.go b/huaweicloud/services/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance.go index 2f015dacfd..478589c1f4 100644 --- a/huaweicloud/services/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance.go +++ b/huaweicloud/services/gaussdb/resource_huaweicloud_gaussdb_opengauss_instance.go @@ -164,9 +164,6 @@ func ResourceOpenGaussInstance() *schema.Resource { 2, 3, }), Default: 3, - ConflictsWith: []string{ - "sharding_num", "coordinator_num", - }, }, "security_group_id": { Type: schema.TypeString, @@ -571,7 +568,7 @@ func setOpenGaussNodesAndRelatedNumbers(d *schema.ResourceData, instance instanc } if shardingNum > 0 && coordinatorNum > 0 { - *dnNum = shardingNum / 3 + *dnNum = shardingNum / d.Get("replica_num").(int) return multierror.Append(nil, d.Set("nodes", nodesList), d.Set("sharding_num", dnNum),