diff --git a/mmv1/products/gkehub/api.yaml b/mmv1/products/gkehub/api.yaml index 0da07796cc19..51e6870cf667 100644 --- a/mmv1/products/gkehub/api.yaml +++ b/mmv1/products/gkehub/api.yaml @@ -103,7 +103,8 @@ objects: Self-link of the GCP resource for the GKE cluster. For example: `//container.googleapis.com/projects/my-project/zones/us-west1-a/clusters/my-cluster`. It can be at the most 1000 characters in length. If the cluster is provisioned with Terraform, - this is `"//container.googleapis.com/${google_container_cluster.my-cluster.id}"`. + this can be `"//container.googleapis.com/${google_container_cluster.my-cluster.id}"` or + `google_container_cluster.my-cluster.id`. input: true required: true - !ruby/object:Api::Type::NestedObject diff --git a/mmv1/products/gkehub/terraform.yaml b/mmv1/products/gkehub/terraform.yaml index c3aad3f2fa58..73f62bc83e2e 100644 --- a/mmv1/products/gkehub/terraform.yaml +++ b/mmv1/products/gkehub/terraform.yaml @@ -34,6 +34,12 @@ overrides: !ruby/object:Overrides::ResourceOverrides skip_sweeper: true id_format: "{{name}}" import_format: ["{{%name}}"] + properties: + endpoint.gkeCluster.resourceLink: !ruby/object:Overrides::Terraform::PropertyOverride + diff_suppress_func: suppressGkeHubEndpointSelfLinkDiff + custom_expand: 'templates/terraform/custom_expand/gke_hub_membership.erb' + custom_code: !ruby/object:Provider::Terraform::CustomCode + constants: templates/terraform/constants/gke_hub_membership_diff.go # This is for copying files over files: !ruby/object:Provider::Config::Files # These files have templating (ERB) code that will be run. diff --git a/mmv1/templates/terraform/constants/gke_hub_membership_diff.go b/mmv1/templates/terraform/constants/gke_hub_membership_diff.go new file mode 100644 index 000000000000..59e9b78bd3bf --- /dev/null +++ b/mmv1/templates/terraform/constants/gke_hub_membership_diff.go @@ -0,0 +1,9 @@ +func suppressGkeHubEndpointSelfLinkDiff(_, old, new string, _ *schema.ResourceData) bool { + // The custom expander injects //container.googleapis.com/ if a selflink is supplied. + selfLink := strings.TrimPrefix(old, "//container.googleapis.com/") + if selfLink == new { + return true + } + + return false +} \ No newline at end of file diff --git a/mmv1/templates/terraform/custom_expand/gke_hub_membership.erb b/mmv1/templates/terraform/custom_expand/gke_hub_membership.erb new file mode 100644 index 000000000000..6676ea10096c --- /dev/null +++ b/mmv1/templates/terraform/custom_expand/gke_hub_membership.erb @@ -0,0 +1,22 @@ +<%# The license inside this block applies to this file. + # Copyright 2021 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) { + if strings.HasPrefix(v.(string), "//container.googleapis.com/") { + return v, nil + } else { + v = "//container.googleapis.com/" + v.(string) + return v, nil + } +} \ No newline at end of file diff --git a/mmv1/templates/terraform/examples/gkehub_membership_issuer.tf.erb b/mmv1/templates/terraform/examples/gkehub_membership_issuer.tf.erb index f8e5bdfe30ee..2c4cc82983e1 100644 --- a/mmv1/templates/terraform/examples/gkehub_membership_issuer.tf.erb +++ b/mmv1/templates/terraform/examples/gkehub_membership_issuer.tf.erb @@ -11,7 +11,7 @@ resource "google_gke_hub_membership" "membership" { membership_id = "<%= ctx[:vars]['name'] %>" endpoint { gke_cluster { - resource_link = "//container.googleapis.com/${google_container_cluster.primary.id}" + resource_link = google_container_cluster.primary.id } } authority {