diff --git a/docs/data-sources/redis_cluster.md b/docs/data-sources/redis_cluster.md index 5f58b2e2fb..9170d5b46a 100644 --- a/docs/data-sources/redis_cluster.md +++ b/docs/data-sources/redis_cluster.md @@ -50,6 +50,8 @@ In addition to all above arguments, the following attributes are exported: - `public_network` - Public network details. - `private_network` - List of private networks endpoints of the Redis Cluster. - `endpoint_id` - The ID of the endpoint. +- `port` - TCP port of the endpoint. +- `ips` - List of IPv4 addresses of the endpoint. - `tls_enabled` - Whether TLS is enabled or not. - `acl` - List of acl rules. - `settings` - Map of settings for redis cluster. diff --git a/docs/resources/redis_cluster.md b/docs/resources/redis_cluster.md index 9e30217270..cc63b42488 100644 --- a/docs/resources/redis_cluster.md +++ b/docs/resources/redis_cluster.md @@ -194,6 +194,8 @@ the form `{zone}/{id}`, e.g. `fr-par-1/11111111-1111-1111-1111-111111111111` - `endpoint_id` - The ID of the endpoint. - `zone` - The zone of the Private Network. + - `port` - TCP port of the endpoint. + - `ips` - List of IPv4 addresses of the endpoint. - `private_ips` - The list of private IPv4 addresses associated with the resource. - `id` - The ID of the IPv4 address resource. diff --git a/internal/services/redis/cluster.go b/internal/services/redis/cluster.go index e216cf0b74..d578d9d12d 100644 --- a/internal/services/redis/cluster.go +++ b/internal/services/redis/cluster.go @@ -164,6 +164,19 @@ func ResourceCluster() *schema.Resource { Computed: true, Description: "UUID of the endpoint to be connected to the cluster", }, + "port": { + Type: schema.TypeInt, + Computed: true, + Description: "TCP port of the endpoint", + }, + "ips": { + Type: schema.TypeList, + Elem: &schema.Schema{ + Type: schema.TypeString, + }, + Computed: true, + Description: "List of IPv4 addresses of the endpoint", + }, "zone": zonal.ComputedSchema(), }, }, diff --git a/internal/services/redis/cluster_test.go b/internal/services/redis/cluster_test.go index 8df5307b30..460f6cf532 100644 --- a/internal/services/redis/cluster_test.go +++ b/internal/services/redis/cluster_test.go @@ -185,6 +185,8 @@ func TestAccCluster_MigrateClusterSizeWithIPAMEndpoint(t *testing.T) { resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "cluster_size", "1"), resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "tls_enabled", "true"), resource.TestCheckResourceAttrPair("scaleway_redis_cluster.main", "private_network.0.id", "scaleway_vpc_private_network.private_network", "id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.port"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.ips.#"), acctest.CheckResourceIDPersisted("scaleway_redis_cluster.main", &clusterID), ), }, @@ -215,6 +217,8 @@ func TestAccCluster_MigrateClusterSizeWithIPAMEndpoint(t *testing.T) { resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "cluster_size", "3"), resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "tls_enabled", "true"), resource.TestCheckResourceAttrPair("scaleway_redis_cluster.main", "private_network.0.id", "scaleway_vpc_private_network.private_network", "id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.port"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.ips.#"), acctest.CheckResourceIDChanged("scaleway_redis_cluster.main", &clusterID), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_ips.0.id"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_ips.0.address"), @@ -421,7 +425,9 @@ func TestAccCluster_Endpoints_Standalone(t *testing.T) { resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "cluster_size", "1"), resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "private_network.0.service_ips.0", "10.12.1.0/20"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.endpoint_id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.ips.#"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.port"), resource.TestCheckTypeSetElemAttrPair("scaleway_redis_cluster.main", "private_network.0.id", "scaleway_vpc_private_network.pn", "id"), ), }, @@ -467,8 +473,12 @@ func TestAccCluster_Endpoints_Standalone(t *testing.T) { resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "cluster_size", "1"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.id"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.endpoint_id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.port"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.ips.#"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.1.id"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.1.endpoint_id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.1.port"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.1.ips.#"), privateNetworksIpsAreEither("scaleway_redis_cluster.main", "10.12.1.0/20", "192.168.1.0/20"), privateNetworksIDsAreEither("scaleway_redis_cluster.main", "scaleway_vpc_private_network.pn", "scaleway_vpc_private_network.pn2"), ), @@ -508,7 +518,9 @@ func TestAccCluster_Endpoints_Standalone(t *testing.T) { resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "cluster_size", "1"), resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "private_network.0.service_ips.0", "10.13.1.0/20"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.ips.#"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.endpoint_id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.port"), resource.TestCheckTypeSetElemAttrPair("scaleway_redis_cluster.main", "private_network.0.id", "scaleway_vpc_private_network.pn", "id"), resource.TestCheckNoResourceAttr("scaleway_redis_cluster.main", "private_network.1.service_ips.0"), resource.TestCheckNoResourceAttr("scaleway_redis_cluster.main", "private_network.1.id"), @@ -612,7 +624,9 @@ func TestAccCluster_Endpoints_ClusterMode(t *testing.T) { resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "private_network.0.service_ips.1", "10.12.1.11/24"), resource.TestCheckResourceAttr("scaleway_redis_cluster.main", "private_network.0.service_ips.2", "10.12.1.12/24"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.endpoint_id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.ips.#"), resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.id"), + resource.TestCheckResourceAttrSet("scaleway_redis_cluster.main", "private_network.0.port"), resource.TestCheckTypeSetElemAttrPair("scaleway_redis_cluster.main", "private_network.0.id", "scaleway_vpc_private_network.pn", "id"), ), }, diff --git a/internal/services/redis/types.go b/internal/services/redis/types.go index f4a95d8833..c896823647 100644 --- a/internal/services/redis/types.go +++ b/internal/services/redis/types.go @@ -130,10 +130,17 @@ func flattenPrivateNetwork(endpoints []*redis.Endpoint) (any, bool) { serviceIps = append(serviceIps, ip.String()) } + ips := []any(nil) + for _, ip := range endpoint.IPs { + ips = append(ips, ip.String()) + } + pnFlat = append(pnFlat, map[string]any{ "endpoint_id": endpoint.ID, "zone": pn.Zone, "id": pnRegionalID, + "port": int(endpoint.Port), + "ips": ips, "service_ips": serviceIps, }) }