From d4cafef987e2817b2c047be7d995535cadd9485b Mon Sep 17 00:00:00 2001 From: wj-chen Date: Fri, 20 Oct 2023 09:51:11 -0700 Subject: [PATCH] Handle bigquery_reservation_capacity_commitment creation when capacity_commitment_id is unspecified (#9293) * handle bigquery_reservation_capacity_commitment creation when capacity_commitment_id is unspecified * revert change to import_format * fix indentation * add custom import * add custom import file --- .../CapacityCommitment.yaml | 12 +++++++--- ...ervation_capacity_commitment_set_id.go.erb | 22 +++++++++++++++++++ ...servation_capacity_commitment_basic.tf.erb | 14 ++++++------ ...servation_capacity_commitment_no_id.tf.erb | 13 +++++++++++ 4 files changed, 51 insertions(+), 10 deletions(-) create mode 100644 mmv1/templates/terraform/custom_import/bigquery_reservation_capacity_commitment_set_id.go.erb create mode 100644 mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_no_id.tf.erb diff --git a/mmv1/products/bigqueryreservation/CapacityCommitment.yaml b/mmv1/products/bigqueryreservation/CapacityCommitment.yaml index bd51ff262e37..cc66888d7749 100644 --- a/mmv1/products/bigqueryreservation/CapacityCommitment.yaml +++ b/mmv1/products/bigqueryreservation/CapacityCommitment.yaml @@ -15,7 +15,7 @@ name: 'CapacityCommitment' base_url: projects/{{project}}/locations/{{location}}/capacityCommitments create_url: projects/{{project}}/locations/{{location}}/capacityCommitments?capacityCommitmentId={{capacity_commitment_id}} -self_link: 'projects/{{project}}/locations/{{location}}/capacityCommitments/{{capacity_commitment_id}}' +self_link: '{{name}}' update_verb: :PATCH update_mask: true description: | @@ -26,19 +26,25 @@ references: !ruby/object:Api::Resource::ReferenceLinks guides: 'Introduction to Reservations': 'https://cloud.google.com/bigquery/docs/reservations-intro' api: 'https://cloud.google.com/bigquery/docs/reference/reservations/rest/v1/projects.locations.capacityCommitments' -id_format: 'projects/{{project}}/locations/{{location}}/capacityCommitments/{{capacity_commitment_id}}' +id_format: '{{name}}' import_format: [ 'projects/{{project}}/locations/{{location}}/capacityCommitments/{{capacity_commitment_id}}', ] custom_code: !ruby/object:Provider::Terraform::CustomCode constants: templates/terraform/constants/bigquery_reservation_capacity_commitment.go.erb + custom_import: templates/terraform/custom_import/bigquery_reservation_capacity_commitment_set_id.go.erb examples: - !ruby/object:Provider::Terraform::Examples name: 'bigquery_reservation_capacity_commitment_basic' pull_external: true skip_docs: true primary_resource_id: 'commitment' + - !ruby/object:Provider::Terraform::Examples + name: 'bigquery_reservation_capacity_commitment_no_id' + pull_external: true + skip_docs: true + primary_resource_id: 'commitment' - !ruby/object:Provider::Terraform::Examples name: 'bigquery_reservation_capacity_commitment_docs' skip_test: true @@ -102,7 +108,7 @@ properties: - !ruby/object:Api::Type::String name: 'renewalPlan' description: | - The plan this capacity commitment is converted to after commitmentEndTime passes. Once the plan is changed, committed period is extended according to commitment plan. Only applicable some commitment plans. + The plan this capacity commitment is converted to after commitmentEndTime passes. Once the plan is changed, committed period is extended according to commitment plan. Only applicable for some commitment plans. - !ruby/object:Api::Type::String name: 'edition' immutable: true diff --git a/mmv1/templates/terraform/custom_import/bigquery_reservation_capacity_commitment_set_id.go.erb b/mmv1/templates/terraform/custom_import/bigquery_reservation_capacity_commitment_set_id.go.erb new file mode 100644 index 000000000000..0f3665a4d3df --- /dev/null +++ b/mmv1/templates/terraform/custom_import/bigquery_reservation_capacity_commitment_set_id.go.erb @@ -0,0 +1,22 @@ +config := meta.(*transport_tpg.Config) +if err := tpgresource.ParseImportId([]string{ + "^projects/(?P[^/]+)/locations/(?P[^/]+)/capacityCommitments/(?P[^/]+)$", + "^(?P[^/]+)/(?P[^/]+)/(?P[^/]+)$", + "^(?P[^/]+)/(?P[^/]+)$", +}, d, config); err != nil { + return nil, err +} + +// Set name based on the components +if err := d.Set("name", "projects/{{project}}/locations/{{location}}/capacityCommitments/{{capacity_commitment_id}}"); err != nil { + return nil, fmt.Errorf("Error setting name: %s", err) +} + +// Replace import id for the resource id +id, err := tpgresource.ReplaceVars(d, config, d.Get("name").(string)) +if err != nil { + return nil, fmt.Errorf("Error constructing id: %s", err) +} +d.SetId(id) + +return []*schema.ResourceData{d}, nil \ No newline at end of file diff --git a/mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_basic.tf.erb b/mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_basic.tf.erb index af222adc2ced..5fe23e0a1d31 100644 --- a/mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_basic.tf.erb +++ b/mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_basic.tf.erb @@ -1,15 +1,15 @@ resource "google_bigquery_capacity_commitment" "<%= ctx[:primary_resource_id] %>" { - capacity_commitment_id = "capacity-tf-test%{random_suffix}" + capacity_commitment_id = "capacity-tf-test%{random_suffix}" - location = "us-west2" - slot_count = 100 - plan = "FLEX_FLAT_RATE" - edition = "ENTERPRISE" + location = "us-west2" + slot_count = 100 + plan = "FLEX_FLAT_RATE" + edition = "ENTERPRISE" } resource "time_sleep" "wait_61_seconds" { depends_on = [google_bigquery_capacity_commitment.<%= ctx[:primary_resource_id] %>] - + # Only needed for CI tests to be able to tear down the commitment once it's expired - create_duration = "61s" + create_duration = "61s" } \ No newline at end of file diff --git a/mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_no_id.tf.erb b/mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_no_id.tf.erb new file mode 100644 index 000000000000..d6234e8b98dd --- /dev/null +++ b/mmv1/templates/terraform/examples/bigquery_reservation_capacity_commitment_no_id.tf.erb @@ -0,0 +1,13 @@ +resource "google_bigquery_capacity_commitment" "<%= ctx[:primary_resource_id] %>" { + location = "us-west2" + slot_count = 100 + plan = "FLEX_FLAT_RATE" + edition = "ENTERPRISE" +} + +resource "time_sleep" "wait_61_seconds" { + depends_on = [google_bigquery_capacity_commitment.<%= ctx[:primary_resource_id] %>] + + # Only needed for CI tests to be able to tear down the commitment once it's expired + create_duration = "61s" +} \ No newline at end of file