Skip to content

Commit

Permalink
feat(rdb): add support for sbs_5k volume type (#2391)
Browse files Browse the repository at this point in the history
  • Loading branch information
yfodil authored Feb 2, 2024
1 parent 8af88e8 commit cca019e
Show file tree
Hide file tree
Showing 5 changed files with 3,847 additions and 9 deletions.
4 changes: 2 additions & 2 deletions docs/resources/rdb_instance.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,9 @@ and if you are using `bssd` storage, you should increase the volume size before

~> **Important:** Updates to `engine` will recreate the Database Instance.

- `volume_type` - (Optional, default to `lssd`) Type of volume where data are stored (`bssd` or `lssd`).
- `volume_type` - (Optional, default to `lssd`) Type of volume where data are stored (`bssd`, `lssd` or `sbs_5k`).

- `volume_size_in_gb` - (Optional) Volume size (in GB) when `volume_type` is set to `bssd`.
- `volume_size_in_gb` - (Optional) Volume size (in GB). Cannot be used when `volume_type` is set to `lssd`.

~> **Important:** Once your instance reaches `disk_full` status, you should increase the volume size before making any other change to your instance.

Expand Down
16 changes: 9 additions & 7 deletions scaleway/resource_rdb_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,14 +124,16 @@ func resourceScalewayRdbInstance() *schema.Resource {
ValidateFunc: validation.StringInSlice([]string{
rdb.VolumeTypeLssd.String(),
rdb.VolumeTypeBssd.String(),
rdb.VolumeTypeSbs5k.String(),
}, false),
Description: "Type of volume where data are stored",
},
"volume_size_in_gb": {
Type: schema.TypeInt,
Optional: true,
Computed: true,
Description: "Volume size (in GB) when volume_type is not lssd",
Type: schema.TypeInt,
Optional: true,
Computed: true,
Description: "Volume size (in GB) when volume_type is not lssd",
ValidateFunc: validation.IntDivisibleBy(5),
},
"private_network": {
Type: schema.TypeList,
Expand Down Expand Up @@ -323,8 +325,8 @@ func resourceScalewayRdbInstanceCreate(ctx context.Context, d *schema.ResourceDa
}

if size, ok := d.GetOk("volume_size_in_gb"); ok {
if createReq.VolumeType != rdb.VolumeTypeBssd {
return diag.FromErr(fmt.Errorf("volume_size_in_gb should be used with volume_type %s only", rdb.VolumeTypeBssd.String()))
if createReq.VolumeType == rdb.VolumeTypeLssd {
return diag.FromErr(fmt.Errorf("volume_size_in_gb should not be used with volume_type %s", rdb.VolumeTypeLssd.String()))
}
createReq.VolumeSize = scw.Size(uint64(size.(int)) * uint64(scw.GB))
}
Expand Down Expand Up @@ -503,7 +505,7 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
// Volume type and size
if d.HasChanges("volume_type", "volume_size_in_gb") {
switch volType {
case rdb.VolumeTypeBssd:
case rdb.VolumeTypeBssd, rdb.VolumeTypeSbs5k:
if d.HasChange("volume_type") {
upgradeInstanceRequests = append(upgradeInstanceRequests,
rdb.UpgradeInstanceRequest{
Expand Down
118 changes: 118 additions & 0 deletions scaleway/resource_rdb_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -877,6 +877,124 @@ func TestAccScalewayRdbInstance_Volume(t *testing.T) {
})
}

func TestAccScalewayRdbInstance_SBSVolume(t *testing.T) {
tt := NewTestTools(t)
defer tt.Cleanup()

latestEngineVersion := testAccCheckScalewayRdbEngineGetLatestVersion(tt, postgreSQLEngineName)

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: tt.ProviderFactories,
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
Steps: []resource.TestStep{
{
Config: fmt.Sprintf(`
resource scaleway_rdb_instance main {
name = "test-rdb-instance-volume"
node_type = "db-play2-pico"
engine = %q
is_ha_cluster = false
disable_backup = true
user_name = "my_initial_user"
password = "thiZ_is_v&ry_s3cret"
region= "nl-ams"
tags = [ "terraform-test", "scaleway_rdb_instance", "sdb-volume" ]
volume_type = "sbs_5k"
volume_size_in_gb = 10
}
`, latestEngineVersion),
Check: resource.ComposeTestCheckFunc(
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "sbs_5k"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "10"),
),
},
{
Config: fmt.Sprintf(`
resource scaleway_rdb_instance main {
name = "test-rdb-instance-volume"
node_type = "db-play2-pico"
engine = %q
is_ha_cluster = false
disable_backup = true
user_name = "my_initial_user"
password = "thiZ_is_v&ry_s3cret"
region= "nl-ams"
tags = [ "terraform-test", "scaleway_rdb_instance", "volume" ]
volume_type = "sbs_5k"
volume_size_in_gb = 20
}
`, latestEngineVersion),
Check: resource.ComposeTestCheckFunc(
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "sbs_5k"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "20"),
),
},
},
})
}

func TestAccScalewayRdbInstance_ChangeVolumeType(t *testing.T) {
tt := NewTestTools(t)
defer tt.Cleanup()

latestEngineVersion := testAccCheckScalewayRdbEngineGetLatestVersion(tt, postgreSQLEngineName)

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: tt.ProviderFactories,
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
Steps: []resource.TestStep{
{
Config: fmt.Sprintf(`
resource scaleway_rdb_instance main {
name = "test-rdb-instance-volume"
node_type = "db-play2-pico"
engine = %q
is_ha_cluster = false
disable_backup = true
user_name = "my_initial_user"
password = "thiZ_is_v&ry_s3cret"
region= "nl-ams"
tags = [ "terraform-test", "scaleway_rdb_instance", "sdb-volume" ]
volume_type = "bssd"
volume_size_in_gb = 10
}
`, latestEngineVersion),
Check: resource.ComposeTestCheckFunc(
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "bssd"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "10"),
),
},
{
Config: fmt.Sprintf(`
resource scaleway_rdb_instance main {
name = "test-rdb-instance-volume"
node_type = "db-play2-pico"
engine = %q
is_ha_cluster = false
disable_backup = true
user_name = "my_initial_user"
password = "thiZ_is_v&ry_s3cret"
region= "nl-ams"
tags = [ "terraform-test", "scaleway_rdb_instance", "volume" ]
volume_type = "sbs_5k"
volume_size_in_gb = 20
}
`, latestEngineVersion),
Check: resource.ComposeTestCheckFunc(
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "sbs_5k"),
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "20"),
),
},
},
})
}

func TestAccScalewayRdbInstance_Endpoints(t *testing.T) {
tt := NewTestTools(t)
defer tt.Cleanup()
Expand Down
Loading

0 comments on commit cca019e

Please sign in to comment.