diff --git a/build/terraform b/build/terraform index 4b0d8320be1b..d9e4a3d3e046 160000 --- a/build/terraform +++ b/build/terraform @@ -1 +1 @@ -Subproject commit 4b0d8320be1bc9d33af122d17b99150c9e1ea940 +Subproject commit d9e4a3d3e046d805601d5adf37c0403a32a8a434 diff --git a/build/terraform-beta b/build/terraform-beta index 6fa1ce545d40..4210151c0042 160000 --- a/build/terraform-beta +++ b/build/terraform-beta @@ -1 +1 @@ -Subproject commit 6fa1ce545d406a767ba5956ceb101d8a4c3b485c +Subproject commit 4210151c0042e82e2eb4094cfdbc9eaed188829a diff --git a/products/compute/terraform.yaml b/products/compute/terraform.yaml index 9d3e8644d84f..26f3e3119c54 100644 --- a/products/compute/terraform.yaml +++ b/products/compute/terraform.yaml @@ -1402,6 +1402,7 @@ overrides: !ruby/object:Overrides::ResourceOverrides is_set: true subnetwork: !ruby/object:Overrides::Terraform::PropertyOverride is_set: true + set_hash_func: computeRouterNatSubnetworkHash subnetwork.sourceIpRangesToNat: !ruby/object:Overrides::Terraform::PropertyOverride is_set: true subnetwork.secondaryIpRangeNames: !ruby/object:Overrides::Terraform::PropertyOverride diff --git a/templates/terraform/constants/router_nat.go.erb b/templates/terraform/constants/router_nat.go.erb index 53c951f41e98..47d9ee037869 100644 --- a/templates/terraform/constants/router_nat.go.erb +++ b/templates/terraform/constants/router_nat.go.erb @@ -62,3 +62,29 @@ func resourceComputeRouterNatDrainNatIpsCustomDiff(diff *schema.ResourceDiff, me } return nil } + +func computeRouterNatSubnetworkHash(v interface{}) int { + obj := v.(map[string]interface{}) + name := obj["name"] + sourceIpRanges := obj["source_ip_ranges_to_nat"] + sourceIpRangesHash := 0 + if sourceIpRanges != nil { + sourceIpSet := sourceIpRanges.(*schema.Set) + + for _, ipRange := range sourceIpSet.List() { + sourceIpRangesHash += schema.HashString(ipRange.(string)) + } + } + + secondaryIpRangeNames := obj["secondary_ip_range_names"] + secondaryIpRangeHash := 0 + if secondaryIpRangeNames != nil { + secondaryIpRangeSet := secondaryIpRangeNames.(*schema.Set) + + for _, secondaryIp := range secondaryIpRangeSet.List() { + secondaryIpRangeHash += schema.HashString(secondaryIp.(string)) + } + } + + return schema.HashString(NameFromSelfLinkStateFunc(name)) + sourceIpRangesHash + secondaryIpRangeHash +} diff --git a/third_party/terraform/tests/resource_compute_router_nat_test.go.erb b/third_party/terraform/tests/resource_compute_router_nat_test.go.erb index 7633f4beb4d6..db6d60e41830 100644 --- a/third_party/terraform/tests/resource_compute_router_nat_test.go.erb +++ b/third_party/terraform/tests/resource_compute_router_nat_test.go.erb @@ -395,7 +395,7 @@ resource "google_compute_router_nat" "foobar" { nat_ips = ["${google_compute_address.foobar.self_link}"] source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS" subnetwork { - name = "${google_compute_subnetwork.foobar.self_link}" + name = "${google_compute_subnetwork.foobar.name}" source_ip_ranges_to_nat = ["ALL_IP_RANGES"] } }`, testId, testId, testId, testId, testId)