diff --git a/templates/terraform/encoders/backend_service.go.erb b/templates/terraform/encoders/backend_service.go.erb index db47dca273af..e2c1b46a5de4 100644 --- a/templates/terraform/encoders/backend_service.go.erb +++ b/templates/terraform/encoders/backend_service.go.erb @@ -43,8 +43,12 @@ for _, backendRaw := range backends { if !ok { continue } - if strings.Contains(backendGroup.(string), "global/networkEndpointGroups") { - // Remove `max_utilization` from any backend that belongs to a global NEG. This field + match, err := regexp.MatchString("projects/(?P[^/]+)/regions/(?P[^/]+)/networkEndpointGroups/(?P[^/]+)", backendGroup.(string)) + if err != nil { + return nil, err + } + if match || strings.Contains(backendGroup.(string), "global/networkEndpointGroups") { + // Remove `max_utilization` from any backend that belongs to a serverless NEG. This field // has a default value and causes API validation errors backend["maxUtilization"] = nil } diff --git a/third_party/terraform/tests/resource_compute_backend_service_test.go.erb b/third_party/terraform/tests/resource_compute_backend_service_test.go.erb index 336aefee11b4..bb4397641125 100644 --- a/third_party/terraform/tests/resource_compute_backend_service_test.go.erb +++ b/third_party/terraform/tests/resource_compute_backend_service_test.go.erb @@ -653,6 +653,30 @@ func TestAccComputeBackendService_trafficDirectorUpdateFull(t *testing.T) { } <% end -%> +<% unless version == 'ga' -%> +func TestAccComputeBackendService_regionNegBackend(t *testing.T) { + t.Parallel() + + suffix := randString(t, 10) + + vcrTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckComputeBackendServiceDestroyProducer(t), + Steps: []resource.TestStep{ + { + Config: testAccComputeBackendService_regionNegBackend(suffix), + }, + { + ResourceName: "google_compute_backend_service.backend", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} +<% end -%> + func testAccComputeBackendService_trafficDirectorBasic(serviceName, checkName string) string { return fmt.Sprintf(` resource "google_compute_backend_service" "foobar" { @@ -1508,3 +1532,47 @@ resource "google_compute_http_health_check" "zero" { } `, serviceName, sampleRate, checkName) } + +<% unless version == 'ga' -%> +func testAccComputeBackendService_regionNegBackend(suffix string) string { + return fmt.Sprintf(` +resource "google_compute_backend_service" "backend" { + name = "backend%s" + enable_cdn = true + connection_draining_timeout_sec = 10 + + backend { + group = google_compute_region_network_endpoint_group.cloudrun_neg.id + } +} + +resource "google_compute_region_network_endpoint_group" "cloudrun_neg" { + name = "cloudrun-neg%s" + network_endpoint_type = "SERVERLESS" + region = "us-central1" + cloud_run { + service = google_cloud_run_service.cloudrun_neg.name + } +} + +resource "google_cloud_run_service" "cloudrun_neg" { + name = "cloudrun-neg%s" + location = "us-central1" + + template { + spec { + containers { + image = "gcr.io/cloudrun/hello" + } + } + } + + traffic { + percent = 100 + latest_revision = true + } +} + +`, suffix, suffix, suffix) +} +<% end -%>