Skip to content

Commit d888258

Browse files
authored
fix(rdb): return endpoint deletion errors to prevent ghost instances (#3277)
1 parent 1d18128 commit d888258

File tree

4 files changed

+3873
-2
lines changed

4 files changed

+3873
-2
lines changed

internal/services/rdb/instance.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1036,7 +1036,7 @@ func ResourceRdbInstanceUpdate(ctx context.Context, d *schema.ResourceData, m an
10361036
},
10371037
scw.WithContext(ctx))
10381038
if err != nil {
1039-
diag.FromErr(err)
1039+
return diag.FromErr(err)
10401040
}
10411041
}
10421042
}
@@ -1084,7 +1084,7 @@ func ResourceRdbInstanceUpdate(ctx context.Context, d *schema.ResourceData, m an
10841084
Region: region,
10851085
}, scw.WithContext(ctx))
10861086
if err != nil {
1087-
diag.FromErr(err)
1087+
return diag.FromErr(err)
10881088
}
10891089
}
10901090
}

internal/services/rdb/instance_test.go

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1378,6 +1378,139 @@ func TestAccInstance_FromSnapshotWithPrivateNetwork(t *testing.T) {
13781378
})
13791379
}
13801380

1381+
func TestAccInstance_PrivateNetworkCleanup(t *testing.T) {
1382+
tt := acctest.NewTestTools(t)
1383+
defer tt.Cleanup()
1384+
1385+
latestEngineVersion := rdbchecks.GetLatestEngineVersion(tt, postgreSQLEngineName)
1386+
1387+
resource.ParallelTest(t, resource.TestCase{
1388+
PreCheck: func() { acctest.PreCheck(t) },
1389+
ProviderFactories: tt.ProviderFactories,
1390+
CheckDestroy: resource.ComposeTestCheckFunc(
1391+
rdbchecks.IsInstanceDestroyed(tt),
1392+
vpcchecks.CheckPrivateNetworkDestroy(tt),
1393+
),
1394+
Steps: []resource.TestStep{
1395+
{
1396+
Config: fmt.Sprintf(`
1397+
resource "scaleway_vpc_private_network" "pn" {
1398+
name = "test-rdb-cleanup"
1399+
}
1400+
1401+
resource "scaleway_rdb_instance" "main" {
1402+
name = "test-rdb-cleanup"
1403+
node_type = "db-dev-s"
1404+
engine = %q
1405+
is_ha_cluster = false
1406+
disable_backup = true
1407+
user_name = "test_user"
1408+
password = "thiZ_is_v&ry_s3cret"
1409+
tags = ["terraform-test", "rdb-cleanup"]
1410+
volume_type = "sbs_5k"
1411+
volume_size_in_gb = 10
1412+
1413+
private_network {
1414+
pn_id = scaleway_vpc_private_network.pn.id
1415+
enable_ipam = true
1416+
}
1417+
}
1418+
`, latestEngineVersion),
1419+
Check: resource.ComposeTestCheckFunc(
1420+
vpcchecks.IsPrivateNetworkPresent(tt, "scaleway_vpc_private_network.pn"),
1421+
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1422+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "private_network.#", "1"),
1423+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "private_network.0.enable_ipam", "true"),
1424+
resource.TestCheckResourceAttrPair("scaleway_rdb_instance.main", "private_network.0.pn_id", "scaleway_vpc_private_network.pn", "id"),
1425+
),
1426+
},
1427+
},
1428+
})
1429+
}
1430+
1431+
func TestAccInstance_EndpointErrorHandling(t *testing.T) {
1432+
tt := acctest.NewTestTools(t)
1433+
defer tt.Cleanup()
1434+
1435+
latestEngineVersion := rdbchecks.GetLatestEngineVersion(tt, postgreSQLEngineName)
1436+
1437+
resource.ParallelTest(t, resource.TestCase{
1438+
PreCheck: func() { acctest.PreCheck(t) },
1439+
ProviderFactories: tt.ProviderFactories,
1440+
CheckDestroy: resource.ComposeTestCheckFunc(
1441+
rdbchecks.IsInstanceDestroyed(tt),
1442+
vpcchecks.CheckPrivateNetworkDestroy(tt),
1443+
),
1444+
Steps: []resource.TestStep{
1445+
{
1446+
Config: fmt.Sprintf(`
1447+
resource "scaleway_vpc_private_network" "pn" {
1448+
name = "test-rdb-error-handling"
1449+
}
1450+
1451+
resource "scaleway_rdb_instance" "main" {
1452+
name = "test-rdb-error-handling"
1453+
node_type = "db-dev-s"
1454+
engine = %q
1455+
is_ha_cluster = false
1456+
disable_backup = true
1457+
user_name = "test_user"
1458+
password = "thiZ_is_v&ry_s3cret"
1459+
tags = ["terraform-test", "rdb-error-handling"]
1460+
volume_type = "sbs_5k"
1461+
volume_size_in_gb = 10
1462+
1463+
private_network {
1464+
pn_id = scaleway_vpc_private_network.pn.id
1465+
enable_ipam = true
1466+
}
1467+
}
1468+
`, latestEngineVersion),
1469+
Check: resource.ComposeTestCheckFunc(
1470+
vpcchecks.IsPrivateNetworkPresent(tt, "scaleway_vpc_private_network.pn"),
1471+
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1472+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "private_network.#", "1"),
1473+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "private_network.0.enable_ipam", "true"),
1474+
),
1475+
},
1476+
// Test endpoint update to verify error handling is working
1477+
{
1478+
Config: fmt.Sprintf(`
1479+
resource "scaleway_vpc_private_network" "pn" {
1480+
name = "test-rdb-error-handling"
1481+
}
1482+
1483+
resource "scaleway_rdb_instance" "main" {
1484+
name = "test-rdb-error-handling"
1485+
node_type = "db-dev-s"
1486+
engine = %q
1487+
is_ha_cluster = false
1488+
disable_backup = true
1489+
user_name = "test_user"
1490+
password = "thiZ_is_v&ry_s3cret"
1491+
tags = ["terraform-test", "rdb-error-handling-updated"]
1492+
volume_type = "sbs_5k"
1493+
volume_size_in_gb = 10
1494+
1495+
private_network {
1496+
pn_id = scaleway_vpc_private_network.pn.id
1497+
enable_ipam = true
1498+
}
1499+
1500+
load_balancer {}
1501+
}
1502+
`, latestEngineVersion),
1503+
Check: resource.ComposeTestCheckFunc(
1504+
vpcchecks.IsPrivateNetworkPresent(tt, "scaleway_vpc_private_network.pn"),
1505+
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1506+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "private_network.#", "1"),
1507+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "load_balancer.#", "1"),
1508+
),
1509+
},
1510+
},
1511+
})
1512+
}
1513+
13811514
func isInstancePresent(tt *acctest.TestTools, n string) resource.TestCheckFunc {
13821515
return func(s *terraform.State) error {
13831516
rs, ok := s.RootModule().Resources[n]

internal/services/rdb/testdata/instance-endpoint-error-handling.cassette.yaml

Lines changed: 2361 additions & 0 deletions
Large diffs are not rendered by default.

internal/services/rdb/testdata/instance-private-network-cleanup.cassette.yaml

Lines changed: 1377 additions & 0 deletions
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)