Skip to content

Commit 82379f5

Browse files
Use regular string sorting for custom access context manager ingress and egress flatteners (#12288) (#8675)
[upstream:0616a35f4dddbca1857fbc0c1330bc5ea93cc7e5] Signed-off-by: Modular Magician <[email protected]>
1 parent cf5f6f5 commit 82379f5

5 files changed

+35
-28
lines changed

Diff for: .changelog/12288.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
accesscontextmanager: Fix permadiff in perimeter ingress / egress rules when there are duplicate resources in the rules
3+
```

Diff for: google-beta/services/accesscontextmanager/resource_access_context_manager_service_perimeter_dry_run_egress_policy.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -556,28 +556,29 @@ func flattenNestedAccessContextManagerServicePerimeterDryRunEgressPolicyEgressTo
556556
}
557557
func flattenNestedAccessContextManagerServicePerimeterDryRunEgressPolicyEgressToResources(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
558558
rawConfigValue := d.Get("egress_to.0.resources")
559-
560559
// Convert config value to []string
561560
configValue, err := tpgresource.InterfaceSliceToStringSlice(rawConfigValue)
562561
if err != nil {
563562
log.Printf("[ERROR] Failed to convert config value: %s", err)
564563
return v
565564
}
565+
sortedConfigValue := append([]string{}, configValue...)
566+
sort.Strings(sortedConfigValue)
566567

567568
// Convert v to []string
568-
apiStringValue, err := tpgresource.InterfaceSliceToStringSlice(v)
569+
apiValue, err := tpgresource.InterfaceSliceToStringSlice(v)
569570
if err != nil {
570571
log.Printf("[ERROR] Failed to convert API value: %s", err)
571572
return v
572573
}
574+
sortedApiValue := append([]string{}, apiValue...)
575+
sort.Strings(sortedApiValue)
573576

574-
sortedStrings, err := tpgresource.SortStringsByConfigOrder(configValue, apiStringValue)
575-
if err != nil {
576-
log.Printf("[ERROR] Could not sort API response value: %s", err)
577-
return v
577+
if slices.Equal(sortedApiValue, sortedConfigValue) {
578+
return configValue
578579
}
579580

580-
return sortedStrings
581+
return apiValue
581582
}
582583

583584
func flattenNestedAccessContextManagerServicePerimeterDryRunEgressPolicyEgressToExternalResources(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {

Diff for: google-beta/services/accesscontextmanager/resource_access_context_manager_service_perimeter_dry_run_ingress_policy.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -557,28 +557,29 @@ func flattenNestedAccessContextManagerServicePerimeterDryRunIngressPolicyIngress
557557
}
558558
func flattenNestedAccessContextManagerServicePerimeterDryRunIngressPolicyIngressToResources(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
559559
rawConfigValue := d.Get("ingress_to.0.resources")
560-
561560
// Convert config value to []string
562561
configValue, err := tpgresource.InterfaceSliceToStringSlice(rawConfigValue)
563562
if err != nil {
564563
log.Printf("[ERROR] Failed to convert config value: %s", err)
565564
return v
566565
}
566+
sortedConfigValue := append([]string{}, configValue...)
567+
sort.Strings(sortedConfigValue)
567568

568569
// Convert v to []string
569-
apiStringValue, err := tpgresource.InterfaceSliceToStringSlice(v)
570+
apiValue, err := tpgresource.InterfaceSliceToStringSlice(v)
570571
if err != nil {
571572
log.Printf("[ERROR] Failed to convert API value: %s", err)
572573
return v
573574
}
575+
sortedApiValue := append([]string{}, apiValue...)
576+
sort.Strings(sortedApiValue)
574577

575-
sortedStrings, err := tpgresource.SortStringsByConfigOrder(configValue, apiStringValue)
576-
if err != nil {
577-
log.Printf("[ERROR] Could not sort API response value: %s", err)
578-
return v
578+
if slices.Equal(sortedApiValue, sortedConfigValue) {
579+
return configValue
579580
}
580581

581-
return sortedStrings
582+
return apiValue
582583
}
583584

584585
func flattenNestedAccessContextManagerServicePerimeterDryRunIngressPolicyIngressToOperations(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {

Diff for: google-beta/services/accesscontextmanager/resource_access_context_manager_service_perimeter_egress_policy.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -554,28 +554,29 @@ func flattenNestedAccessContextManagerServicePerimeterEgressPolicyEgressTo(v int
554554
}
555555
func flattenNestedAccessContextManagerServicePerimeterEgressPolicyEgressToResources(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
556556
rawConfigValue := d.Get("egress_to.0.resources")
557-
558557
// Convert config value to []string
559558
configValue, err := tpgresource.InterfaceSliceToStringSlice(rawConfigValue)
560559
if err != nil {
561560
log.Printf("[ERROR] Failed to convert config value: %s", err)
562561
return v
563562
}
563+
sortedConfigValue := append([]string{}, configValue...)
564+
sort.Strings(sortedConfigValue)
564565

565566
// Convert v to []string
566-
apiStringValue, err := tpgresource.InterfaceSliceToStringSlice(v)
567+
apiValue, err := tpgresource.InterfaceSliceToStringSlice(v)
567568
if err != nil {
568569
log.Printf("[ERROR] Failed to convert API value: %s", err)
569570
return v
570571
}
572+
sortedApiValue := append([]string{}, apiValue...)
573+
sort.Strings(sortedApiValue)
571574

572-
sortedStrings, err := tpgresource.SortStringsByConfigOrder(configValue, apiStringValue)
573-
if err != nil {
574-
log.Printf("[ERROR] Could not sort API response value: %s", err)
575-
return v
575+
if slices.Equal(sortedApiValue, sortedConfigValue) {
576+
return configValue
576577
}
577578

578-
return sortedStrings
579+
return apiValue
579580
}
580581

581582
func flattenNestedAccessContextManagerServicePerimeterEgressPolicyEgressToExternalResources(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {

Diff for: google-beta/services/accesscontextmanager/resource_access_context_manager_service_perimeter_ingress_policy.go

+8-7
Original file line numberDiff line numberDiff line change
@@ -558,28 +558,29 @@ func flattenNestedAccessContextManagerServicePerimeterIngressPolicyIngressTo(v i
558558
}
559559
func flattenNestedAccessContextManagerServicePerimeterIngressPolicyIngressToResources(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
560560
rawConfigValue := d.Get("ingress_to.0.resources")
561-
562561
// Convert config value to []string
563562
configValue, err := tpgresource.InterfaceSliceToStringSlice(rawConfigValue)
564563
if err != nil {
565564
log.Printf("[ERROR] Failed to convert config value: %s", err)
566565
return v
567566
}
567+
sortedConfigValue := append([]string{}, configValue...)
568+
sort.Strings(sortedConfigValue)
568569

569570
// Convert v to []string
570-
apiStringValue, err := tpgresource.InterfaceSliceToStringSlice(v)
571+
apiValue, err := tpgresource.InterfaceSliceToStringSlice(v)
571572
if err != nil {
572573
log.Printf("[ERROR] Failed to convert API value: %s", err)
573574
return v
574575
}
576+
sortedApiValue := append([]string{}, apiValue...)
577+
sort.Strings(sortedApiValue)
575578

576-
sortedStrings, err := tpgresource.SortStringsByConfigOrder(configValue, apiStringValue)
577-
if err != nil {
578-
log.Printf("[ERROR] Could not sort API response value: %s", err)
579-
return v
579+
if slices.Equal(sortedApiValue, sortedConfigValue) {
580+
return configValue
580581
}
581582

582-
return sortedStrings
583+
return apiValue
583584
}
584585

585586
func flattenNestedAccessContextManagerServicePerimeterIngressPolicyIngressToOperations(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {

0 commit comments

Comments
 (0)