Skip to content

Commit 0812829

Browse files
committed
fix: reverting computed true and custom forcediffs
1 parent fd52aad commit 0812829

File tree

1 file changed

+0
-100
lines changed

1 file changed

+0
-100
lines changed

provider/resource_rediscloud_active_active_database.go

Lines changed: 0 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,6 @@ func resourceRedisCloudActiveActiveDatabase() *schema.Resource {
6666
}
6767
}
6868

69-
// Force update when enable_default_user is removed from config
70-
// (Computed fields don't trigger updates when removed, but we need to clear API override)
71-
if diff.Id() != "" { // Only during updates, not creates
72-
if err := forceUpdateWhenEnableDefaultUserRemoved(ctx, diff); err != nil {
73-
return err
74-
}
75-
}
76-
7769
return nil
7870
},
7971

@@ -280,7 +272,6 @@ func resourceRedisCloudActiveActiveDatabase() *schema.Resource {
280272
Description: "When 'true', enables connecting to the database with the 'default' user. If not specified, the region inherits the value from global_enable_default_user.",
281273
Type: schema.TypeBool,
282274
Optional: true,
283-
Computed: true,
284275
},
285276
"remote_backup": {
286277
Description: "An object that specifies the backup options for the database in this region",
@@ -1274,94 +1265,3 @@ func isEnableDefaultUserInActualPersistedState(d *schema.ResourceData, regionNam
12741265
return found
12751266
}
12761267

1277-
// forceUpdateWhenEnableDefaultUserRemoved detects when enable_default_user is removed from config
1278-
// and forces an update so the API override can be cleared. This is necessary because Computed fields
1279-
// don't trigger updates when removed from config - Terraform carries forward the old value.
1280-
func forceUpdateWhenEnableDefaultUserRemoved(ctx context.Context, diff *schema.ResourceDiff) error {
1281-
// Get actual config (not the merged diff with Computed fields carried forward)
1282-
rawConfig := diff.GetRawConfig()
1283-
if rawConfig.IsNull() || !rawConfig.IsKnown() {
1284-
return nil
1285-
}
1286-
1287-
// Find regions in CONFIG that don't have enable_default_user
1288-
configRegionsWithoutField := make(map[string]bool)
1289-
1290-
if rawConfig.Type().HasAttribute("override_region") {
1291-
overrideRegions := rawConfig.GetAttr("override_region")
1292-
if !overrideRegions.IsNull() && overrideRegions.IsKnown() {
1293-
iter := overrideRegions.ElementIterator()
1294-
for iter.Next() {
1295-
_, regionVal := iter.Element()
1296-
1297-
if !regionVal.Type().HasAttribute("name") {
1298-
continue
1299-
}
1300-
1301-
regionName := regionVal.GetAttr("name").AsString()
1302-
1303-
// Check if enable_default_user is in config for this region
1304-
hasField := false
1305-
if regionVal.Type().HasAttribute("enable_default_user") {
1306-
fieldAttr := regionVal.GetAttr("enable_default_user")
1307-
if !fieldAttr.IsNull() {
1308-
hasField = true
1309-
}
1310-
}
1311-
1312-
if !hasField {
1313-
configRegionsWithoutField[regionName] = true
1314-
}
1315-
}
1316-
}
1317-
}
1318-
1319-
// Check old state to see which regions HAD the field
1320-
oldOverrideRegion, _ := diff.GetChange("override_region")
1321-
if oldOverrideRegion != nil {
1322-
oldSet := oldOverrideRegion.(*schema.Set)
1323-
for _, oldRegion := range oldSet.List() {
1324-
oldMap := oldRegion.(map[string]interface{})
1325-
regionName := oldMap["name"].(string)
1326-
1327-
_, hadFieldInState := oldMap["enable_default_user"]
1328-
fieldRemovedFromConfig := configRegionsWithoutField[regionName]
1329-
1330-
if hadFieldInState && fieldRemovedFromConfig {
1331-
// Field was in state but removed from config!
1332-
log.Printf("[DEBUG] CustomizeDiff: enable_default_user removed from config for region %s, forcing update", regionName)
1333-
1334-
// Since override_region is not Computed, we can't use SetNewComputed
1335-
// Instead, rebuild the set without the removed field and use SetNew to force a diff
1336-
newRegionSet := make([]interface{}, 0, oldSet.Len())
1337-
for _, region := range oldSet.List() {
1338-
regionMap := region.(map[string]interface{})
1339-
regionName := regionMap["name"].(string)
1340-
1341-
// Create a new map for this region
1342-
newRegionMap := make(map[string]interface{})
1343-
for k, v := range regionMap {
1344-
// Copy all fields except enable_default_user if it should be removed
1345-
if k == "enable_default_user" && configRegionsWithoutField[regionName] {
1346-
// Skip this field - it was removed from config
1347-
continue
1348-
}
1349-
newRegionMap[k] = v
1350-
}
1351-
newRegionSet = append(newRegionSet, newRegionMap)
1352-
}
1353-
1354-
// Set the new value to force Terraform to detect a change
1355-
if err := diff.SetNew("override_region", newRegionSet); err != nil {
1356-
return fmt.Errorf("failed to set new override_region for region %s: %w", regionName, err)
1357-
}
1358-
1359-
log.Printf("[DEBUG] CustomizeDiff: Rebuilt override_region set without enable_default_user for removed regions")
1360-
// Only need to rebuild once for all removals
1361-
break
1362-
}
1363-
}
1364-
}
1365-
1366-
return nil
1367-
}

0 commit comments

Comments
 (0)