Skip to content

Commit c53a9b8

Browse files
committed
fix: suppresses diffs for redis 8
1 parent d423839 commit c53a9b8

File tree

2 files changed

+57
-2
lines changed

2 files changed

+57
-2
lines changed

provider/pro/resource_rediscloud_pro_database.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -251,8 +251,9 @@ func ResourceRedisCloudProDatabase() *schema.Resource {
251251
ConfigMode: schema.SchemaConfigModeAttr,
252252
Optional: true,
253253
// The API doesn't allow updating/delete modules. Unless we recreate the database.
254-
ForceNew: true,
255-
MinItems: 1,
254+
ForceNew: true,
255+
MinItems: 1,
256+
DiffSuppressFunc: modulesDiffSuppressFunc,
256257
Elem: &schema.Resource{
257258
Schema: map[string]*schema.Schema{
258259
"name": {
@@ -1068,6 +1069,30 @@ func shouldWarnRedis8Modules(version string, hasModules bool) bool {
10681069
return false
10691070
}
10701071

1072+
// shouldSuppressModuleDiffsForRedis8 checks if module diffs should be suppressed for Redis 8.0 or higher
1073+
// In Redis 8.0+, modules are bundled by default, so we should ignore changes to explicitly configured modules
1074+
func shouldSuppressModuleDiffsForRedis8(version string) bool {
1075+
if len(version) == 0 {
1076+
return false
1077+
}
1078+
majorVersionStr := strings.Split(version, ".")[0]
1079+
if majorVersion, err := strconv.Atoi(majorVersionStr); err == nil {
1080+
return majorVersion >= 8
1081+
}
1082+
return false
1083+
}
1084+
1085+
// modulesDiffSuppressFunc returns a DiffSuppressFunc that suppresses module diffs for Redis 8.0+
1086+
// This prevents Terraform from showing module changes as "forces replacement" when upgrading to Redis 8.0+
1087+
func modulesDiffSuppressFunc(k, oldValue, newValue string, d *schema.ResourceData) bool {
1088+
redisVersion, ok := d.GetOk("redis_version")
1089+
if !ok {
1090+
return false
1091+
}
1092+
version := redisVersion.(string)
1093+
return shouldSuppressModuleDiffsForRedis8(version)
1094+
}
1095+
10711096
func validateModulesForRedis8() schema.CustomizeDiffFunc {
10721097
return func(ctx context.Context, diff *schema.ResourceDiff, meta interface{}) error {
10731098
redisVersion, versionExists := diff.GetOk("redis_version")

provider/pro/resource_rediscloud_pro_database_validation_test.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,33 @@ func TestUnitShouldWarnRedis8Modules_Redis10WithModules(t *testing.T) {
6565
result := shouldWarnRedis8Modules("10.0.0", true)
6666
assert.True(t, result, "should warn for Redis 10.0.0 with modules (modules bundled in 8.0+)")
6767
}
68+
69+
// TestUnitShouldSuppressModuleDiffsForRedis8_Redis8 tests that module diffs are suppressed for Redis 8.0
70+
func TestUnitShouldSuppressModuleDiffsForRedis8_Redis8(t *testing.T) {
71+
result := shouldSuppressModuleDiffsForRedis8("8.0")
72+
assert.True(t, result, "should suppress module diffs for Redis 8.0")
73+
}
74+
75+
// TestUnitShouldSuppressModuleDiffsForRedis8_Redis82 tests that module diffs are suppressed for Redis 8.2
76+
func TestUnitShouldSuppressModuleDiffsForRedis8_Redis82(t *testing.T) {
77+
result := shouldSuppressModuleDiffsForRedis8("8.2")
78+
assert.True(t, result, "should suppress module diffs for Redis 8.2")
79+
}
80+
81+
// TestUnitShouldSuppressModuleDiffsForRedis8_Redis9 tests that module diffs are suppressed for Redis 9.0
82+
func TestUnitShouldSuppressModuleDiffsForRedis8_Redis9(t *testing.T) {
83+
result := shouldSuppressModuleDiffsForRedis8("9.0")
84+
assert.True(t, result, "should suppress module diffs for Redis 9.0")
85+
}
86+
87+
// TestUnitShouldSuppressModuleDiffsForRedis8_Redis7 tests that module diffs are NOT suppressed for Redis 7.x
88+
func TestUnitShouldSuppressModuleDiffsForRedis8_Redis7(t *testing.T) {
89+
result := shouldSuppressModuleDiffsForRedis8("7.4")
90+
assert.False(t, result, "should not suppress module diffs for Redis 7.4")
91+
}
92+
93+
// TestUnitShouldSuppressModuleDiffsForRedis8_Redis6 tests that module diffs are NOT suppressed for Redis 6.x
94+
func TestUnitShouldSuppressModuleDiffsForRedis8_Redis6(t *testing.T) {
95+
result := shouldSuppressModuleDiffsForRedis8("6.2")
96+
assert.False(t, result, "should not suppress module diffs for Redis 6.2")
97+
}

0 commit comments

Comments
 (0)