diff --git a/products/compute/terraform.yaml b/products/compute/terraform.yaml index 894c37c2cc0d..08c5164a7dd7 100644 --- a/products/compute/terraform.yaml +++ b/products/compute/terraform.yaml @@ -2728,7 +2728,7 @@ overrides: !ruby/object:Overrides::ResourceOverrides defaultService: !ruby/object:Overrides::Terraform::PropertyOverride # ResourceRef only supports 1 type and UrlMap has references to a BackendBucket or BackendService. # Just read the self_link string instead of extracting the name and making a self_link out of it. - custom_expand: 'templates/terraform/custom_expand/resourceref_as_string.go.erb' + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' description: The backend service or backend bucket to use when none of the given rules match. hostRules: !ruby/object:Overrides::Terraform::PropertyOverride name: "host_rule" @@ -2740,21 +2740,37 @@ overrides: !ruby/object:Overrides::ResourceOverrides pathMatchers.defaultService: !ruby/object:Overrides::Terraform::PropertyOverride # ResourceRef only supports 1 type and UrlMap has references to a BackendBucket or BackendService. # Just read the self_link string instead of extracting the name and making a self_link out of it. - custom_expand: 'templates/terraform/custom_expand/resourceref_as_string.go.erb' + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' description: The backend service or backend bucket to use when none of the given paths match. pathMatchers.pathRules: !ruby/object:Overrides::Terraform::PropertyOverride name: "path_rule" pathMatchers.pathRules.paths: !ruby/object:Overrides::Terraform::PropertyOverride is_set: true - pathMatchers.pathRules.service: !ruby/object:Overrides::Terraform::PropertyOverride + pathMatchers.defaultRouteAction.weightedBackendServices.backendService: !ruby/object:Overrides::Terraform::PropertyOverride # ResourceRef only supports 1 type and UrlMap has references to a BackendBucket or BackendService. # Just read the self_link string instead of extracting the name and making a self_link out of it. - custom_expand: 'templates/terraform/custom_expand/resourceref_as_string.go.erb' + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + pathMatchers.defaultRouteAction.requestMirrorPolicy.backendService: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + defaultRouteAction.weightedBackendServices.backendService: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + defaultRouteAction.requestMirrorPolicy.backendService: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + pathMatchers.routeRules.service: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + pathMatchers.pathRules.service: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' description: The backend service or backend bucket to use if any of the given paths match. + pathMatchers.routeRules.routeAction.weightedBackendServices.backendService: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + pathMatchers.pathRules.routeAction.weightedBackendServices.backendService: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + pathMatchers.routeRules.routeAction.requestMirrorPolicy.backendService: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' + pathMatchers.pathRules.routeAction.requestMirrorPolicy.backendService: !ruby/object:Overrides::Terraform::PropertyOverride + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' tests.service: !ruby/object:Overrides::Terraform::PropertyOverride - # ResourceRef only supports 1 type and UrlMap has references to a BackendBucket or BackendService. - # Just read the self_link string instead of extracting the name and making a self_link out of it. - custom_expand: 'templates/terraform/custom_expand/resourceref_as_string.go.erb' + custom_expand: 'templates/terraform/custom_expand/reference_to_backend.erb' description: The backend service or backend bucket link that should be matched by this test. tests: !ruby/object:Overrides::Terraform::PropertyOverride name: "test" diff --git a/templates/terraform/custom_expand/reference_to_backend.erb b/templates/terraform/custom_expand/reference_to_backend.erb new file mode 100644 index 000000000000..eb6fc861ea18 --- /dev/null +++ b/templates/terraform/custom_expand/reference_to_backend.erb @@ -0,0 +1,45 @@ +<%# The license inside this block applies to this file. + # Copyright 2017 Google Inc. + # Licensed under the Apache License, Version 2.0 (the "License"); + # you may not use this file except in compliance with the License. + # You may obtain a copy of the License at + # + # http://www.apache.org/licenses/LICENSE-2.0 + # + # Unless required by applicable law or agreed to in writing, software + # distributed under the License is distributed on an "AS IS" BASIS, + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + # See the License for the specific language governing permissions and + # limitations under the License. +-%> +func expand<%= prefix -%><%= titlelize_property(property) -%>(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) { + // This method returns a full self link from whatever the input is. + if v == nil || v.(string) == "" { + // It does not try to construct anything from empty. + return "", nil + } else if strings.HasPrefix(v.(string), "https://") { + // Anything that starts with a URL scheme is assumed to be a self link worth using. + return v, nil + } else if strings.HasPrefix(v.(string), "projects/") { + // If the self link references a project, we'll just stuck the compute prefix on it + url, err := replaceVars(d, config, "{{ComputeBasePath}}" + v.(string)) + if err != nil { + return "", err + } + return url, nil + } else if strings.HasPrefix(v.(string), "regions/") || strings.HasPrefix(v.(string), "zones/") { + // For regional or zonal resources which include their region or zone, just put the project in front. + url, err := replaceVars(d, config, "{{ComputeBasePath}}projects/{{project}}/") + if err != nil { + return nil, err + } + return url + v.(string), nil + } + // Anything else is assumed to be a reference to a global backend service. + f, err := parseGlobalFieldValue("backendServices", v.(string), "project", d, config, true) + if err != nil { + return "", err + } + + return f.RelativeLink(), nil +}