Skip to content

Commit 11826f5

Browse files
Merge pull request #683 from RedisLabs/fix/fix-incorrect-connection-flattening
fix: connections object has a mismatch when destroying
2 parents 5e94a52 + 4bf917f commit 11826f5

12 files changed

+215
-79
lines changed

.github/workflows/terraform_provider_main.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,17 @@ jobs:
179179
go-version-file: go.mod
180180
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAcc(DataSource|Resource)RedisCloud(TransitGatewayAttachment|PaymentMethod).*"'
181181

182+
go_unit_test:
183+
name: go unit test
184+
needs: [go_build]
185+
runs-on: ubuntu-latest
186+
steps:
187+
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
188+
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
189+
with:
190+
go-version-file: go.mod
191+
- run: go test ./... -run="^TestUnit" # Runs tests starting with TestUnit
192+
182193
tfproviderlint:
183194
name: tfproviderlint
184195
needs: [go_build]

.github/workflows/terraform_provider_pr.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,17 @@ jobs:
183183
- run: EXECUTE_TESTS=true make testacc TESTARGS='-run="TestAccResourceRedisCloudPrivateLink_CRUDI"'
184184

185185

186+
go_unit_test:
187+
name: go unit test
188+
needs: [go_build]
189+
runs-on: ubuntu-latest
190+
steps:
191+
- uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
192+
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
193+
with:
194+
go-version-file: go.mod
195+
- run: go test ./... -run="^TestUnit" # Runs tests starting with TestUnit
196+
186197
tfproviderlint:
187198
name: tfproviderlint
188199
needs: [go_build]

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,13 @@
33
All notable changes to this project will be documented in this file.
44
See updating [Changelog example here](https://keepachangelog.com/en/1.0.0/)
55

6+
7+
# 2.4.4 (3rd October 2025)
8+
9+
## Changed:
10+
- Fixed AA endpoint script calling wrong method
11+
- Fixed connection flattening not aligning to schema
12+
613
# 2.4.3 (1st October 2025)
714

815
## Added:

provider/privatelink/datasource_rediscloud_active_active_endpoint_script.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
func DataSourceActiveActivePrivateLinkEndpointScript() *schema.Resource {
1414
return &schema.Resource{
1515
Description: "The Active Active PrivateLink Endpoint Script data source allows users to request an endpoint script for an Active Active Subscription PrivateLink",
16-
ReadContext: dataSourcePrivateLinkRead,
16+
ReadContext: dataSourceActiveActivePrivateLinkScriptRead,
1717

1818
Schema: map[string]*schema.Schema{
1919
"subscription_id": {
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
locals {
2+
rediscloud_subscription_name = "%s"
3+
rediscloud_cloud_account = "%s"
4+
rediscloud_private_link_share_name = "%s"
5+
}
6+
7+
data "rediscloud_payment_method" "card" {
8+
card_type = "Visa"
9+
last_four_numbers = "5556"
10+
}
11+
12+
data "rediscloud_cloud_account" "account" {
13+
exclude_internal_account = true
14+
provider_type = "AWS"
15+
name = local.rediscloud_cloud_account
16+
}
17+
18+
resource "rediscloud_subscription" "pro_subscription" {
19+
name = local.rediscloud_subscription_name
20+
payment_method_id = data.rediscloud_payment_method.card.id
21+
22+
cloud_provider {
23+
provider = data.rediscloud_cloud_account.account.provider_type
24+
cloud_account_id = data.rediscloud_cloud_account.account.id
25+
region {
26+
region = "eu-west-1"
27+
networking_deployment_cidr = "10.0.0.0/24"
28+
preferred_availability_zones = ["eu-west-1a"]
29+
}
30+
}
31+
32+
creation_plan {
33+
dataset_size_in_gb = 15
34+
quantity = 1
35+
replication = true
36+
throughput_measurement_by = "operations-per-second"
37+
throughput_measurement_value = 20000
38+
}
39+
}
40+
41+
resource "rediscloud_private_link" "private_link" {
42+
subscription_id = rediscloud_subscription.pro_subscription.id
43+
share_name = local.rediscloud_private_link_share_name
44+
45+
# principal {
46+
# principal = local.rediscloud_principal_1
47+
# principal_type = "aws_account"
48+
# principal_alias = "terraform test aws account"
49+
# }
50+
51+
principal {
52+
principal = "234567890123"
53+
principal_type = "aws_account"
54+
principal_alias = "terraform test aws account 2"
55+
}
56+
}
57+
58+
data "rediscloud_private_link" "private_link" {
59+
subscription_id = rediscloud_private_link.private_link.subscription_id
60+
}

provider/privatelink/testdata/testPrivateLink.tf renamed to provider/privatelink/testdata/pro_private_link.tf

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ locals {
22
rediscloud_subscription_name = "%s"
33
rediscloud_cloud_account = "%s"
44
rediscloud_private_link_share_name = "%s"
5+
rediscloud_database_password = "%s"
56
}
67

78
data "rediscloud_payment_method" "card" {
@@ -38,6 +39,19 @@ resource "rediscloud_subscription" "pro_subscription" {
3839
}
3940
}
4041

42+
## this will give some connections and databases in the output
43+
resource "rediscloud_subscription_database" "pro_database" {
44+
subscription_id = rediscloud_subscription.pro_subscription.id
45+
name = "db"
46+
memory_limit_in_gb = 1
47+
password = local.rediscloud_database_password
48+
protocol = "redis"
49+
data_persistence = "none"
50+
throughput_measurement_by = "operations-per-second"
51+
throughput_measurement_value = 10000
52+
}
53+
54+
4155
resource "rediscloud_private_link" "pro_private_link" {
4256
subscription_id = rediscloud_subscription.pro_subscription.id
4357
share_name = local.rediscloud_private_link_share_name

provider/privatelink/testdata/testPrivateLinkUpdate.tf

Lines changed: 0 additions & 66 deletions
This file was deleted.

provider/privatelink/utils.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ func flattenConnections(connections []*pl.PrivateLinkConnection) []map[string]in
159159
tf := map[string]interface{}{
160160
"association_id": redis.StringValue(connection.AssociationId),
161161
"connection_id": redis.StringValue(connection.ConnectionId),
162-
"type": redis.StringValue(connection.Type),
162+
"connection_type": redis.StringValue(connection.Type),
163163
"owner_id": redis.StringValue(connection.OwnerId),
164164
"association_date": redis.StringValue(connection.AssociationDate),
165165
}

provider/privatelink/utils_test.go

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package privatelink
2+
3+
import (
4+
"testing"
5+
6+
"github.com/RedisLabs/rediscloud-go-api/redis"
7+
pl "github.com/RedisLabs/rediscloud-go-api/service/privatelink"
8+
"github.com/stretchr/testify/assert"
9+
)
10+
11+
func TestUnitFlattenConnections(t *testing.T) {
12+
// Test that flattenConnections produces keys that match the schema
13+
connections := []*pl.PrivateLinkConnection{
14+
{
15+
AssociationId: redis.String("assoc-123"),
16+
ConnectionId: redis.String("conn-456"),
17+
Type: redis.String("vpc-endpoint"),
18+
OwnerId: redis.String("owner-789"),
19+
AssociationDate: redis.String("2024-01-01"),
20+
},
21+
}
22+
23+
result := flattenConnections(connections)
24+
25+
assert.Len(t, result, 1)
26+
27+
conn := result[0]
28+
assert.Contains(t, conn, "association_id")
29+
assert.Contains(t, conn, "connection_id")
30+
assert.Contains(t, conn, "connection_type")
31+
assert.Contains(t, conn, "owner_id")
32+
assert.Contains(t, conn, "association_date")
33+
34+
assert.Equal(t, "assoc-123", conn["association_id"])
35+
assert.Equal(t, "conn-456", conn["connection_id"])
36+
assert.Equal(t, "vpc-endpoint", conn["connection_type"])
37+
assert.Equal(t, "owner-789", conn["owner_id"])
38+
assert.Equal(t, "2024-01-01", conn["association_date"])
39+
}
40+
41+
func TestUnitFlattenConnectionsEmpty(t *testing.T) {
42+
result := flattenConnections([]*pl.PrivateLinkConnection{})
43+
assert.Len(t, result, 0)
44+
}
45+
46+
func TestUnitFlattenDatabases(t *testing.T) {
47+
databases := []*pl.PrivateLinkDatabase{
48+
{
49+
DatabaseId: redis.Int(12345),
50+
Port: redis.Int(16379),
51+
ResourceLinkEndpoint: redis.String("endpoint.example.com"),
52+
},
53+
}
54+
55+
result := flattenDatabases(databases)
56+
57+
assert.Len(t, result, 1)
58+
59+
db := result[0]
60+
assert.Contains(t, db, "database_id")
61+
assert.Contains(t, db, "port")
62+
assert.Contains(t, db, "resource_link_endpoint")
63+
64+
assert.Equal(t, 12345, db["database_id"])
65+
assert.Equal(t, 16379, db["port"])
66+
assert.Equal(t, "endpoint.example.com", db["resource_link_endpoint"])
67+
}
68+
69+
func TestUnitFlattenPrincipals(t *testing.T) {
70+
principals := []*pl.PrivateLinkPrincipal{
71+
{
72+
Principal: redis.String("arn:aws:iam::123456789012:root"),
73+
Type: redis.String("aws_account"),
74+
Alias: redis.String("my-account"),
75+
},
76+
{
77+
Principal: redis.String("arn:aws:iam::987654321098:root"),
78+
Type: redis.String("aws_account"),
79+
Alias: redis.String("another-account"),
80+
},
81+
}
82+
83+
result := flattenPrincipals(principals)
84+
85+
assert.Len(t, result, 2)
86+
87+
// Verify keys
88+
for _, p := range result {
89+
assert.Contains(t, p, "principal")
90+
assert.Contains(t, p, "principal_type")
91+
assert.Contains(t, p, "principal_alias")
92+
}
93+
94+
// Results should be sorted by principal
95+
assert.Equal(t, "arn:aws:iam::123456789012:root", result[0]["principal"])
96+
assert.Equal(t, "arn:aws:iam::987654321098:root", result[1]["principal"])
97+
}

0 commit comments

Comments
 (0)