Skip to content

Commit 08d1f05

Browse files
Fix principal casing in a Access Context Manager Perimeter Policy causing a provider crash (#15429)
1 parent c0e21bb commit 08d1f05

19 files changed

+308
-87
lines changed

mmv1/templates/terraform/constants/access_context_manager.go.tmpl

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,43 +43,63 @@ func {{$.ResourceName}}IngressToResourcesDiffSuppressFunc(_, _, _ string, d *sch
4343
func {{$.ResourceName}}EgressFromIdentitiesDiffSuppressFunc(_, _, _ string, d *schema.ResourceData) bool {
4444
old, new := d.GetChange("egress_from.0.identities")
4545

46-
oldResources, err := tpgresource.InterfaceSliceToStringSlice(old)
46+
oldIdentities, err := tpgresource.InterfaceSliceToStringSlice(old)
4747
if err != nil {
4848
log.Printf("[ERROR] Failed to convert egress from identities config value: %s", err)
4949
return false
5050
}
5151

52-
newResources, err := tpgresource.InterfaceSliceToStringSlice(new)
52+
// Normalize IAM principal casing
53+
for i, val := range oldIdentities {
54+
oldIdentities[i] = tpgresource.NormalizeIamPrincipalCasing(val)
55+
}
56+
57+
newIdentities, err := tpgresource.InterfaceSliceToStringSlice(new)
5358
if err != nil {
5459
log.Printf("[ERROR] Failed to convert egress from identities api value: %s", err)
5560
return false
5661
}
5762

58-
sort.Strings(oldResources)
59-
sort.Strings(newResources)
63+
// Normalize IAM principal casing
64+
for i, val := range newIdentities {
65+
newIdentities[i] = tpgresource.NormalizeIamPrincipalCasing(val)
66+
}
6067

61-
return slices.Equal(oldResources, newResources)
68+
sort.Strings(oldIdentities)
69+
sort.Strings(newIdentities)
70+
71+
return slices.Equal(oldIdentities, newIdentities)
6272
}
6373

6474
func {{$.ResourceName}}IngressFromIdentitiesDiffSuppressFunc(_, _, _ string, d *schema.ResourceData) bool {
6575
old, new := d.GetChange("ingress_from.0.identities")
6676

67-
oldResources, err := tpgresource.InterfaceSliceToStringSlice(old)
77+
oldIdentities, err := tpgresource.InterfaceSliceToStringSlice(old)
6878
if err != nil {
6979
log.Printf("[ERROR] Failed to convert ingress from identities config value: %s", err)
7080
return false
7181
}
7282

73-
newResources, err := tpgresource.InterfaceSliceToStringSlice(new)
83+
// Normalize IAM principal casing
84+
for i, val := range oldIdentities {
85+
oldIdentities[i] = tpgresource.NormalizeIamPrincipalCasing(val)
86+
}
87+
88+
newIdentities, err := tpgresource.InterfaceSliceToStringSlice(new)
7489
if err != nil {
7590
log.Printf("[ERROR] Failed to convert ingress from identities api value: %s", err)
7691
return false
7792
}
7893

79-
sort.Strings(oldResources)
80-
sort.Strings(newResources)
94+
// Normalize IAM principal casing
95+
for i, val := range newIdentities {
96+
newIdentities[i] = tpgresource.NormalizeIamPrincipalCasing(val)
97+
}
8198

82-
return slices.Equal(oldResources, newResources)
99+
sort.Strings(oldIdentities)
100+
sort.Strings(newIdentities)
101+
102+
return slices.Equal(oldIdentities, newIdentities)
83103
}
84104

85105
func {{$.ResourceName}}IdentityTypeDiffSuppressFunc(_, old, new string, _ *schema.ResourceData) bool {

mmv1/templates/terraform/custom_flatten/accesscontextmanager_egress_policy_from_identities_custom_flatten.go.tmpl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ func flatten{{$.GetPrefix}}{{$.TitlelizeProperty}}(v interface{}, d *schema.Reso
66
log.Printf("[ERROR] Failed to convert egress from identities config value: %s", err)
77
return v
88
}
9+
10+
// Normalize IAM principal casing
11+
for i, val := range configValue {
12+
configValue[i] = tpgresource.NormalizeIamPrincipalCasing(val)
13+
}
14+
915
sortedConfigValue := append([]string{}, configValue...)
1016
sort.Strings(sortedConfigValue)
1117

@@ -15,6 +21,12 @@ func flatten{{$.GetPrefix}}{{$.TitlelizeProperty}}(v interface{}, d *schema.Reso
1521
log.Printf("[ERROR] Failed to convert egress from identities API value: %s", err)
1622
return v
1723
}
24+
25+
// Normalize IAM principal casing
26+
for i, val := range apiValue {
27+
apiValue[i] = tpgresource.NormalizeIamPrincipalCasing(val)
28+
}
29+
1830
sortedApiValue := append([]string{}, apiValue...)
1931
sort.Strings(sortedApiValue)
2032

@@ -23,4 +35,4 @@ func flatten{{$.GetPrefix}}{{$.TitlelizeProperty}}(v interface{}, d *schema.Reso
2335
}
2436

2537
return apiValue
26-
}
38+
}

mmv1/templates/terraform/custom_flatten/accesscontextmanager_ingress_policy_from_identities_custom_flatten.go.tmpl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@ func flatten{{$.GetPrefix}}{{$.TitlelizeProperty}}(v interface{}, d *schema.Reso
66
log.Printf("[ERROR] Failed to convert ingress from identities config value: %s", err)
77
return v
88
}
9+
10+
// Normalize IAM principal casing
11+
for i, val := range configValue {
12+
configValue[i] = tpgresource.NormalizeIamPrincipalCasing(val)
13+
}
14+
915
sortedConfigValue := append([]string{}, configValue...)
1016
sort.Strings(sortedConfigValue)
1117

@@ -15,6 +21,12 @@ func flatten{{$.GetPrefix}}{{$.TitlelizeProperty}}(v interface{}, d *schema.Reso
1521
log.Printf("[ERROR] Failed to convert ingress from identities API value: %s", err)
1622
return v
1723
}
24+
25+
// Normalize IAM principal casing
26+
for i, val := range apiValue {
27+
apiValue[i] = tpgresource.NormalizeIamPrincipalCasing(val)
28+
}
29+
1830
sortedApiValue := append([]string{}, apiValue...)
1931
sort.Strings(sortedApiValue)
2032

@@ -23,4 +35,4 @@ func flatten{{$.GetPrefix}}{{$.TitlelizeProperty}}(v interface{}, d *schema.Reso
2335
}
2436

2537
return apiValue
26-
}
38+
}

mmv1/templates/terraform/examples/access_context_manager_service_perimeter_dry_run_egress_policy.tf.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
resource "google_access_context_manager_service_perimeter" "storage-perimeter" {
2-
parent = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}"
3-
name = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}/serviceperimeters/storage-perimeter"
2+
parent = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}"
3+
name = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}/servicePerimeters/storage_perimeter"
44
title = "Storage Perimeter"
55
spec {
66
restricted_services = ["storage.googleapis.com"]

mmv1/templates/terraform/examples/access_context_manager_service_perimeter_dry_run_egress_policy_granular_controls.tf.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
resource "google_access_context_manager_service_perimeter" "storage-perimeter" {
2-
parent = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}"
3-
name = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}/serviceperimeters/storage-perimeter"
2+
parent = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}"
3+
name = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}/servicePerimeters/storage_perimeter"
44
title = "Storage Perimeter"
55
spec {
66
restricted_services = ["storage.googleapis.com"]

mmv1/templates/terraform/examples/access_context_manager_service_perimeter_dry_run_ingress_policy.tf.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
resource "google_access_context_manager_service_perimeter" "storage-perimeter" {
2-
parent = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}"
3-
name = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}/serviceperimeters/storage-perimeter"
2+
parent = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}"
3+
name = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}/servicePerimeters/storage_perimeter"
44
title = "Storage Perimeter"
55
status {
66
restricted_services = ["storage.googleapis.com"]

mmv1/templates/terraform/examples/access_context_manager_service_perimeter_dry_run_ingress_policy_granular_controls.tf.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
resource "google_access_context_manager_service_perimeter" "storage-perimeter" {
2-
parent = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}"
3-
name = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}/serviceperimeters/storage-perimeter"
2+
parent = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}"
3+
name = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}/servicePerimeters/storage_perimeter"
44
title = "Storage Perimeter"
55
status {
66
restricted_services = ["storage.googleapis.com"]

mmv1/templates/terraform/examples/access_context_manager_service_perimeter_egress_policy.tf.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
resource "google_access_context_manager_service_perimeter" "storage-perimeter" {
2-
parent = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}"
3-
name = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}/serviceperimeters/storage-perimeter"
2+
parent = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}"
3+
name = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}/servicePerimeters/storage_perimeter"
44
title = "Storage Perimeter"
55
status {
66
restricted_services = ["storage.googleapis.com"]

mmv1/templates/terraform/examples/access_context_manager_service_perimeter_egress_policy_granular_controls.tf.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
resource "google_access_context_manager_service_perimeter" "storage-perimeter" {
2-
parent = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}"
3-
name = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}/serviceperimeters/storage-perimeter"
2+
parent = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}"
3+
name = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}/servicePerimeters/storage_perimeter"
44
title = "Storage Perimeter"
55
status {
66
restricted_services = ["storage.googleapis.com"]

mmv1/templates/terraform/examples/access_context_manager_service_perimeter_ingress_policy.tf.tmpl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
resource "google_access_context_manager_service_perimeter" "storage-perimeter" {
2-
parent = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}"
3-
name = "accesspolicies/${google_access_context_manager_access_policy.access-policy.name}/serviceperimeters/storage-perimeter"
2+
parent = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}"
3+
name = "accessPolicies/${google_access_context_manager_access_policy.access-policy.name}/servicePerimeters/storage_perimeter"
44
title = "Storage Perimeter"
55
status {
66
restricted_services = ["storage.googleapis.com"]

0 commit comments

Comments
 (0)