Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(gaussdb): gaussdb support replica num #2936

Merged
merged 1 commit into from
Apr 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions docs/resources/gaussdb_opengauss_instance.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
Expand All @@ -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"),
Expand Down Expand Up @@ -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

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

Expand All @@ -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 {
Expand All @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,9 +164,6 @@ func ResourceOpenGaussInstance() *schema.Resource {
2, 3,
}),
Default: 3,
ConflictsWith: []string{
"sharding_num", "coordinator_num",
},
},
"security_group_id": {
Type: schema.TypeString,
Expand Down Expand Up @@ -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),
Expand Down