Skip to content

Commit 1f00731

Browse files
authored
feat(rdb): fix read replica service_ip to return CIDR format instead of IP only (#3475)
1 parent 1d2fc00 commit 1f00731

File tree

4 files changed

+1449
-2
lines changed

4 files changed

+1449
-2
lines changed

internal/services/rdb/instance_test.go

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,6 +1441,68 @@ func TestAccInstance_PrivateNetworkCleanup(t *testing.T) {
14411441
})
14421442
}
14431443

1444+
func TestAccInstance_PrivateNetworkWithIPAMCIDR(t *testing.T) {
1445+
tt := acctest.NewTestTools(t)
1446+
defer tt.Cleanup()
1447+
1448+
latestEngineVersion := rdbchecks.GetLatestEngineVersion(tt, postgreSQLEngineName)
1449+
1450+
resource.ParallelTest(t, resource.TestCase{
1451+
ProtoV6ProviderFactories: tt.ProviderFactories,
1452+
CheckDestroy: rdbchecks.IsInstanceDestroyed(tt),
1453+
Steps: []resource.TestStep{
1454+
{
1455+
Config: fmt.Sprintf(`
1456+
resource "scaleway_vpc" "main" {
1457+
name = "test-rdb-ipam-cidr"
1458+
}
1459+
1460+
resource "scaleway_vpc_private_network" "pn" {
1461+
vpc_id = scaleway_vpc.main.id
1462+
name = "test-rdb-ipam-cidr"
1463+
ipv4_subnet {
1464+
subnet = "10.213.254.0/24"
1465+
}
1466+
}
1467+
1468+
resource "scaleway_ipam_ip" "db_ip" {
1469+
source {
1470+
private_network_id = scaleway_vpc_private_network.pn.id
1471+
}
1472+
address = "10.213.254.10"
1473+
}
1474+
1475+
resource "scaleway_rdb_instance" "main" {
1476+
name = "test-rdb-ipam-cidr"
1477+
node_type = "db-dev-s"
1478+
engine = %q
1479+
is_ha_cluster = false
1480+
disable_backup = true
1481+
user_name = "test_user"
1482+
password = "thiZ_is_v&ry_s3cret"
1483+
tags = ["terraform-test", "rdb-ipam-cidr"]
1484+
volume_type = "sbs_5k"
1485+
volume_size_in_gb = 10
1486+
1487+
private_network {
1488+
pn_id = scaleway_vpc_private_network.pn.id
1489+
ip_net = scaleway_ipam_ip.db_ip.address_cidr
1490+
}
1491+
}
1492+
`, latestEngineVersion),
1493+
Check: resource.ComposeTestCheckFunc(
1494+
isInstancePresent(tt, "scaleway_rdb_instance.main"),
1495+
vpcchecks.IsPrivateNetworkPresent(tt, "scaleway_vpc_private_network.pn"),
1496+
resource.TestCheckResourceAttrSet("scaleway_ipam_ip.db_ip", "address_cidr"),
1497+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "private_network.#", "1"),
1498+
resource.TestCheckResourceAttrPair("scaleway_rdb_instance.main", "private_network.0.ip_net", "scaleway_ipam_ip.db_ip", "address_cidr"),
1499+
resource.TestCheckResourceAttr("scaleway_rdb_instance.main", "private_network.0.enable_ipam", "false"),
1500+
),
1501+
},
1502+
},
1503+
})
1504+
}
1505+
14441506
func TestAccInstance_EndpointErrorHandling(t *testing.T) {
14451507
tt := acctest.NewTestTools(t)
14461508
defer tt.Cleanup()

internal/services/rdb/read_replica_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ func TestAccReadReplica_PrivateNetwork(t *testing.T) {
8585
resource "scaleway_vpc_private_network" "pn" {}
8686
8787
resource "scaleway_rdb_read_replica" "replica" {
88-
instance_id = scaleway_rdb_instance.instance.id
88+
instance_id = scaleway_rdb_instance.instance.id
8989
private_network {
9090
private_network_id = scaleway_vpc_private_network.pn.id
9191
service_ip = "10.12.1.0/20"
@@ -97,6 +97,7 @@ func TestAccReadReplica_PrivateNetwork(t *testing.T) {
9797
resource.TestCheckResourceAttrSet("scaleway_rdb_read_replica.replica", "private_network.0.ip"),
9898
resource.TestCheckResourceAttrSet("scaleway_rdb_read_replica.replica", "private_network.0.port"),
9999
resource.TestCheckResourceAttrSet("scaleway_rdb_read_replica.replica", "private_network.0.endpoint_id"),
100+
resource.TestCheckResourceAttr("scaleway_rdb_read_replica.replica", "private_network.0.service_ip", "10.12.1.0/20"),
100101
),
101102
},
102103
},

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

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

internal/services/rdb/types.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,8 +223,13 @@ func flattenReadReplicaEndpoints(endpoints []*rdb.Endpoint) (directAccess, priva
223223
enableIpam = true
224224
}
225225

226+
serviceIP, err := types.FlattenIPNet(endpoint.PrivateNetwork.ServiceIP)
227+
if err != nil {
228+
return nil, nil
229+
}
230+
226231
rawEndpoint["private_network_id"] = pnRegionalID
227-
rawEndpoint["service_ip"] = endpoint.PrivateNetwork.ServiceIP.String()
232+
rawEndpoint["service_ip"] = serviceIP
228233
rawEndpoint["zone"] = endpoint.PrivateNetwork.Zone
229234
rawEndpoint["enable_ipam"] = enableIpam
230235
privateNetwork = rawEndpoint

0 commit comments

Comments
 (0)