Skip to content

Commit cca019e

Browse files
authored
feat(rdb): add support for sbs_5k volume type (#2391)
1 parent 8af88e8 commit cca019e

File tree

5 files changed

+3847
-9
lines changed

5 files changed

+3847
-9
lines changed

docs/resources/rdb_instance.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,9 +127,9 @@ and if you are using `bssd` storage, you should increase the volume size before
127127

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

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

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

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

scaleway/resource_rdb_instance.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,16 @@ func resourceScalewayRdbInstance() *schema.Resource {
124124
ValidateFunc: validation.StringInSlice([]string{
125125
rdb.VolumeTypeLssd.String(),
126126
rdb.VolumeTypeBssd.String(),
127+
rdb.VolumeTypeSbs5k.String(),
127128
}, false),
128129
Description: "Type of volume where data are stored",
129130
},
130131
"volume_size_in_gb": {
131-
Type: schema.TypeInt,
132-
Optional: true,
133-
Computed: true,
134-
Description: "Volume size (in GB) when volume_type is not lssd",
132+
Type: schema.TypeInt,
133+
Optional: true,
134+
Computed: true,
135+
Description: "Volume size (in GB) when volume_type is not lssd",
136+
ValidateFunc: validation.IntDivisibleBy(5),
135137
},
136138
"private_network": {
137139
Type: schema.TypeList,
@@ -323,8 +325,8 @@ func resourceScalewayRdbInstanceCreate(ctx context.Context, d *schema.ResourceDa
323325
}
324326

325327
if size, ok := d.GetOk("volume_size_in_gb"); ok {
326-
if createReq.VolumeType != rdb.VolumeTypeBssd {
327-
return diag.FromErr(fmt.Errorf("volume_size_in_gb should be used with volume_type %s only", rdb.VolumeTypeBssd.String()))
328+
if createReq.VolumeType == rdb.VolumeTypeLssd {
329+
return diag.FromErr(fmt.Errorf("volume_size_in_gb should not be used with volume_type %s", rdb.VolumeTypeLssd.String()))
328330
}
329331
createReq.VolumeSize = scw.Size(uint64(size.(int)) * uint64(scw.GB))
330332
}
@@ -503,7 +505,7 @@ func resourceScalewayRdbInstanceUpdate(ctx context.Context, d *schema.ResourceDa
503505
// Volume type and size
504506
if d.HasChanges("volume_type", "volume_size_in_gb") {
505507
switch volType {
506-
case rdb.VolumeTypeBssd:
508+
case rdb.VolumeTypeBssd, rdb.VolumeTypeSbs5k:
507509
if d.HasChange("volume_type") {
508510
upgradeInstanceRequests = append(upgradeInstanceRequests,
509511
rdb.UpgradeInstanceRequest{

scaleway/resource_rdb_instance_test.go

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,124 @@ func TestAccScalewayRdbInstance_Volume(t *testing.T) {
877877
})
878878
}
879879

880+
func TestAccScalewayRdbInstance_SBSVolume(t *testing.T) {
881+
tt := NewTestTools(t)
882+
defer tt.Cleanup()
883+
884+
latestEngineVersion := testAccCheckScalewayRdbEngineGetLatestVersion(tt, postgreSQLEngineName)
885+
886+
resource.ParallelTest(t, resource.TestCase{
887+
PreCheck: func() { testAccPreCheck(t) },
888+
ProviderFactories: tt.ProviderFactories,
889+
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
890+
Steps: []resource.TestStep{
891+
{
892+
Config: fmt.Sprintf(`
893+
resource scaleway_rdb_instance main {
894+
name = "test-rdb-instance-volume"
895+
node_type = "db-play2-pico"
896+
engine = %q
897+
is_ha_cluster = false
898+
disable_backup = true
899+
user_name = "my_initial_user"
900+
password = "thiZ_is_v&ry_s3cret"
901+
region= "nl-ams"
902+
tags = [ "terraform-test", "scaleway_rdb_instance", "sdb-volume" ]
903+
volume_type = "sbs_5k"
904+
volume_size_in_gb = 10
905+
}
906+
`, latestEngineVersion),
907+
Check: resource.ComposeTestCheckFunc(
908+
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
909+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "sbs_5k"),
910+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "10"),
911+
),
912+
},
913+
{
914+
Config: fmt.Sprintf(`
915+
resource scaleway_rdb_instance main {
916+
name = "test-rdb-instance-volume"
917+
node_type = "db-play2-pico"
918+
engine = %q
919+
is_ha_cluster = false
920+
disable_backup = true
921+
user_name = "my_initial_user"
922+
password = "thiZ_is_v&ry_s3cret"
923+
region= "nl-ams"
924+
tags = [ "terraform-test", "scaleway_rdb_instance", "volume" ]
925+
volume_type = "sbs_5k"
926+
volume_size_in_gb = 20
927+
}
928+
`, latestEngineVersion),
929+
Check: resource.ComposeTestCheckFunc(
930+
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
931+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "sbs_5k"),
932+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "20"),
933+
),
934+
},
935+
},
936+
})
937+
}
938+
939+
func TestAccScalewayRdbInstance_ChangeVolumeType(t *testing.T) {
940+
tt := NewTestTools(t)
941+
defer tt.Cleanup()
942+
943+
latestEngineVersion := testAccCheckScalewayRdbEngineGetLatestVersion(tt, postgreSQLEngineName)
944+
945+
resource.ParallelTest(t, resource.TestCase{
946+
PreCheck: func() { testAccPreCheck(t) },
947+
ProviderFactories: tt.ProviderFactories,
948+
CheckDestroy: testAccCheckScalewayRdbInstanceDestroy(tt),
949+
Steps: []resource.TestStep{
950+
{
951+
Config: fmt.Sprintf(`
952+
resource scaleway_rdb_instance main {
953+
name = "test-rdb-instance-volume"
954+
node_type = "db-play2-pico"
955+
engine = %q
956+
is_ha_cluster = false
957+
disable_backup = true
958+
user_name = "my_initial_user"
959+
password = "thiZ_is_v&ry_s3cret"
960+
region= "nl-ams"
961+
tags = [ "terraform-test", "scaleway_rdb_instance", "sdb-volume" ]
962+
volume_type = "bssd"
963+
volume_size_in_gb = 10
964+
}
965+
`, latestEngineVersion),
966+
Check: resource.ComposeTestCheckFunc(
967+
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
968+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "bssd"),
969+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "10"),
970+
),
971+
},
972+
{
973+
Config: fmt.Sprintf(`
974+
resource scaleway_rdb_instance main {
975+
name = "test-rdb-instance-volume"
976+
node_type = "db-play2-pico"
977+
engine = %q
978+
is_ha_cluster = false
979+
disable_backup = true
980+
user_name = "my_initial_user"
981+
password = "thiZ_is_v&ry_s3cret"
982+
region= "nl-ams"
983+
tags = [ "terraform-test", "scaleway_rdb_instance", "volume" ]
984+
volume_type = "sbs_5k"
985+
volume_size_in_gb = 20
986+
}
987+
`, latestEngineVersion),
988+
Check: resource.ComposeTestCheckFunc(
989+
testAccCheckScalewayRdbExists(tt, "scaleway_rdb_instance.main"),
990+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_type", "sbs_5k"),
991+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "volume_size_in_gb", "20"),
992+
),
993+
},
994+
},
995+
})
996+
}
997+
880998
func TestAccScalewayRdbInstance_Endpoints(t *testing.T) {
881999
tt := NewTestTools(t)
8821000
defer tt.Cleanup()

0 commit comments

Comments
 (0)