Skip to content

Commit 1e7fb46

Browse files
fix google_access_context_manager_service_perimeters permadiff (#10965) (#18520)
[upstream:fb2c2dc57b1b378c5b0567498de681b58043dcd5] Signed-off-by: Modular Magician <[email protected]>
1 parent e91d507 commit 1e7fb46

File tree

3 files changed

+29
-13
lines changed

3 files changed

+29
-13
lines changed

.changelog/10965.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
accesscontextmanager: Implement custom flatten for google_access_context_manager_service_perimeters as ordering my change server side which can cause a permadiff.
3+
```

google/services/accesscontextmanager/resource_access_context_manager_service_perimeters.go

+14-4
Original file line numberDiff line numberDiff line change
@@ -1099,14 +1099,13 @@ func flattenAccessContextManagerServicePerimetersServicePerimeters(v interface{}
10991099
return v
11001100
}
11011101
l := v.([]interface{})
1102-
transformed := make([]interface{}, 0, len(l))
1102+
apiData := make([]map[string]interface{}, 0, len(l))
11031103
for _, raw := range l {
11041104
original := raw.(map[string]interface{})
11051105
if len(original) < 1 {
1106-
// Do not include empty json objects coming back from the api
11071106
continue
11081107
}
1109-
transformed = append(transformed, map[string]interface{}{
1108+
apiData = append(apiData, map[string]interface{}{
11101109
"name": flattenAccessContextManagerServicePerimetersServicePerimetersName(original["name"], d, config),
11111110
"title": flattenAccessContextManagerServicePerimetersServicePerimetersTitle(original["title"], d, config),
11121111
"description": flattenAccessContextManagerServicePerimetersServicePerimetersDescription(original["description"], d, config),
@@ -1118,8 +1117,19 @@ func flattenAccessContextManagerServicePerimetersServicePerimeters(v interface{}
11181117
"use_explicit_dry_run_spec": flattenAccessContextManagerServicePerimetersServicePerimetersUseExplicitDryRunSpec(original["useExplicitDryRunSpec"], d, config),
11191118
})
11201119
}
1121-
return transformed
1120+
configData := []map[string]interface{}{}
1121+
for _, item := range d.Get("service_perimeters").([]interface{}) {
1122+
configData = append(configData, item.(map[string]interface{}))
1123+
}
1124+
sorted, err := tpgresource.SortMapsByConfigOrder(configData, apiData, "name")
1125+
if err != nil {
1126+
log.Printf("[ERROR] Could not sort API response value: %s", err)
1127+
return v
1128+
}
1129+
1130+
return sorted
11221131
}
1132+
11231133
func flattenAccessContextManagerServicePerimetersServicePerimetersName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
11241134
return v
11251135
}

google/services/accesscontextmanager/resource_access_context_manager_services_perimeters_test.go

+12-9
Original file line numberDiff line numberDiff line change
@@ -28,25 +28,28 @@ func testAccAccessContextManagerServicePerimeters_basicTest(t *testing.T) {
2828
Config: testAccAccessContextManagerServicePerimeters_basic(org, "my policy", "level", "storage_perimeter", "bigtable_perimeter", "bigquery_omni_perimeter"),
2929
},
3030
{
31-
ResourceName: "google_access_context_manager_service_perimeters.test-access",
32-
ImportState: true,
33-
ImportStateVerify: true,
31+
ResourceName: "google_access_context_manager_service_perimeters.test-access",
32+
ImportState: true,
33+
ImportStateVerify: true,
34+
ImportStateVerifyIgnore: []string{"service_perimeters"},
3435
},
3536
{
3637
Config: testAccAccessContextManagerServicePerimeters_update(org, "my policy", "level", "storage_perimeter", "bigquery_perimeter", "bigtable_perimeter", "bigquery_omni_perimeter"),
3738
},
3839
{
39-
ResourceName: "google_access_context_manager_service_perimeters.test-access",
40-
ImportState: true,
41-
ImportStateVerify: true,
40+
ResourceName: "google_access_context_manager_service_perimeters.test-access",
41+
ImportState: true,
42+
ImportStateVerify: true,
43+
ImportStateVerifyIgnore: []string{"service_perimeters"},
4244
},
4345
{
4446
Config: testAccAccessContextManagerServicePerimeters_empty(org, "my policy", "level"),
4547
},
4648
{
47-
ResourceName: "google_access_context_manager_service_perimeters.test-access",
48-
ImportState: true,
49-
ImportStateVerify: true,
49+
ResourceName: "google_access_context_manager_service_perimeters.test-access",
50+
ImportState: true,
51+
ImportStateVerify: true,
52+
ImportStateVerifyIgnore: []string{"service_perimeters"},
5053
},
5154
},
5255
})

0 commit comments

Comments
 (0)