diff --git a/products/compute/terraform.yaml b/products/compute/terraform.yaml index ef1aad05d1f9..2619874a0bb0 100644 --- a/products/compute/terraform.yaml +++ b/products/compute/terraform.yaml @@ -1484,6 +1484,9 @@ overrides: !ruby/object:Overrides::ResourceOverrides vars: router_name: "my-router" network_name: "my-network" + custom_code: !ruby/object:Provider::Terraform::CustomCode + constants: templates/terraform/constants/router.go.erb + resource_definition: templates/terraform/resource_definition/router.go.erb properties: id: !ruby/object:Overrides::Terraform::PropertyOverride exclude: true diff --git a/templates/terraform/constants/router.go.erb b/templates/terraform/constants/router.go.erb new file mode 100644 index 000000000000..77b7bbdb3280 --- /dev/null +++ b/templates/terraform/constants/router.go.erb @@ -0,0 +1,31 @@ +<%- # the license inside this block applies to this file + # Copyright 2020 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. +-%> +// customizeDiff func for additional checks on google_compute_router properties: +func resourceComputeRouterCustomDiff(diff *schema.ResourceDiff, meta interface{}) error { + + block := diff.Get("bgp.0").(map[string]interface{}) + advertiseMode := block["advertise_mode"] + advertisedGroups := block["advertised_groups"].([]interface{}) + advertisedIPRanges := block["advertised_ip_ranges"].([]interface{}) + + if advertiseMode == "DEFAULT" && len(advertisedGroups) != 0 { + return fmt.Errorf("Error in bgp: advertised_groups cannot be specified when using advertise_mode DEFAULT") + } + if advertiseMode == "DEFAULT" && len(advertisedIPRanges) != 0 { + return fmt.Errorf("Error in bgp: advertised_ip_ranges cannot be specified when using advertise_mode DEFAULT") + } + + return nil +} diff --git a/templates/terraform/resource_definition/router.go.erb b/templates/terraform/resource_definition/router.go.erb new file mode 100644 index 000000000000..2dbbafaa43d1 --- /dev/null +++ b/templates/terraform/resource_definition/router.go.erb @@ -0,0 +1,15 @@ +<%# The license inside this block applies to this file. + # Copyright 2020 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. +-%> +CustomizeDiff: resourceComputeRouterCustomDiff,