Skip to content

Commit 3bbc7a6

Browse files
authored
feat(rdb): add update encryption at rest (#2829)
1 parent c8119b6 commit 3bbc7a6

File tree

3 files changed

+2037
-1
lines changed

3 files changed

+2037
-1
lines changed

internal/services/rdb/instance.go

+15-1
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,6 @@ func ResourceInstance() *schema.Resource {
307307
"encryption_at_rest": {
308308
Type: schema.TypeBool,
309309
Optional: true,
310-
ForceNew: true,
311310
Description: "Enable or disable encryption at rest for the database instance",
312311
},
313312
// Common
@@ -662,6 +661,21 @@ func ResourceRdbInstanceUpdate(ctx context.Context, d *schema.ResourceData, m in
662661
}
663662
}
664663

664+
if d.HasChange("encryption_at_rest") {
665+
oldValue, newValue := d.GetChange("encryption_at_rest")
666+
667+
if oldValue.(bool) && !newValue.(bool) {
668+
return diag.FromErr(errors.New("disabling encryption_at_rest is not supported once it has been enabled"))
669+
}
670+
671+
upgradeInstanceRequests = append(upgradeInstanceRequests,
672+
rdb.UpgradeInstanceRequest{
673+
Region: region,
674+
InstanceID: ID,
675+
EnableEncryption: scw.BoolPtr(newValue.(bool)),
676+
})
677+
}
678+
665679
// Carry out the upgrades
666680
for i := range upgradeInstanceRequests {
667681
_, err = waitForRDBInstance(ctx, rdbAPI, region, ID, d.Timeout(schema.TimeoutUpdate))

internal/services/rdb/instance_test.go

+55
Original file line numberDiff line numberDiff line change
@@ -1328,6 +1328,61 @@ func TestAccInstance_EncryptionAtRestFalse(t *testing.T) {
13281328
})
13291329
}
13301330

1331+
func TestAccInstance_UpdateEncryptionAtRest(t *testing.T) {
1332+
tt := acctest.NewTestTools(t)
1333+
defer tt.Cleanup()
1334+
1335+
latestEngineVersion := rdbchecks.GetLatestEngineVersion(tt, postgreSQLEngineName)
1336+
1337+
resource.ParallelTest(t, resource.TestCase{
1338+
PreCheck: func() { acctest.PreCheck(t) },
1339+
ProviderFactories: tt.ProviderFactories,
1340+
CheckDestroy: rdbchecks.IsInstanceDestroyed(tt),
1341+
Steps: []resource.TestStep{
1342+
// Step 1: Create without encryption
1343+
{
1344+
Config: fmt.Sprintf(`
1345+
resource scaleway_rdb_instance main {
1346+
name = "test-rdb-update-encryption"
1347+
node_type = "db-dev-s"
1348+
engine = %q
1349+
is_ha_cluster = false
1350+
disable_backup = true
1351+
user_name = "user_no_enc"
1352+
password = "thiZ_is_v&ry_s3cret"
1353+
encryption_at_rest = false
1354+
tags = [ "terraform-test", "no-encryption" ]
1355+
}
1356+
`, latestEngineVersion),
1357+
Check: resource.ComposeTestCheckFunc(
1358+
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1359+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "encryption_at_rest", "false"),
1360+
),
1361+
},
1362+
// Step 2: Update encryption to true
1363+
{
1364+
Config: fmt.Sprintf(`
1365+
resource scaleway_rdb_instance main {
1366+
name = "test-rdb-update-encryption"
1367+
node_type = "db-dev-s"
1368+
engine = %q
1369+
is_ha_cluster = false
1370+
disable_backup = true
1371+
user_name = "user_enc"
1372+
password = "thiZ_is_v&ry_s3cret"
1373+
encryption_at_rest = true
1374+
tags = [ "terraform-test", "with-encryption" ]
1375+
}
1376+
`, latestEngineVersion),
1377+
Check: resource.ComposeTestCheckFunc(
1378+
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1379+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "encryption_at_rest", "true"),
1380+
),
1381+
},
1382+
},
1383+
})
1384+
}
1385+
13311386
func isInstancePresent(tt *acctest.TestTools, n string) resource.TestCheckFunc {
13321387
return func(s *terraform.State) error {
13331388
rs, ok := s.RootModule().Resources[n]

internal/services/rdb/testdata/instance-update-encryption-at-rest.cassette.yaml

+1,967
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)