From 4e9cbb29725d6be637fc58f09ff65dc94db65b97 Mon Sep 17 00:00:00 2001 From: Riley Karson Date: Tue, 21 Jan 2020 14:22:25 -0800 Subject: [PATCH] Add interconnect attachment state waiting (#2999) Merged PR #2999. --- build/terraform | 2 +- build/terraform-beta | 2 +- build/terraform-mapper | 2 +- products/compute/api.yaml | 3 +++ products/compute/terraform.yaml | 20 +++++++++++-------- .../constants/interconnect_attachment.go.erb | 18 +++++++++++++++++ .../interconnect_attachment.go.erb | 3 +++ .../pre_delete/interconnect_attachment.go.erb | 3 +++ 8 files changed, 42 insertions(+), 11 deletions(-) create mode 100644 templates/terraform/constants/interconnect_attachment.go.erb create mode 100644 templates/terraform/post_create/interconnect_attachment.go.erb create mode 100644 templates/terraform/pre_delete/interconnect_attachment.go.erb diff --git a/build/terraform b/build/terraform index 986132336b46..6f8673070396 160000 --- a/build/terraform +++ b/build/terraform @@ -1 +1 @@ -Subproject commit 986132336b4612ffc863423f2634c97b972fc022 +Subproject commit 6f86730703966541bf7952339b75f607893f8cfd diff --git a/build/terraform-beta b/build/terraform-beta index 10c5bc961865..8f44f566dbd7 160000 --- a/build/terraform-beta +++ b/build/terraform-beta @@ -1 +1 @@ -Subproject commit 10c5bc961865aed36007b1cfd85aabc626c2b1ed +Subproject commit 8f44f566dbd7a8870134eb6ab3e5b6ec44bd6d5b diff --git a/build/terraform-mapper b/build/terraform-mapper index ef0ffb0a8427..01e808d1a91b 160000 --- a/build/terraform-mapper +++ b/build/terraform-mapper @@ -1 +1 @@ -Subproject commit ef0ffb0a8427e3ad69e7d52aca6a305c27803a52 +Subproject commit 01e808d1a91b78c7b130948be3437ba3bed91c29 diff --git a/products/compute/api.yaml b/products/compute/api.yaml index daee55a15bbf..872e4e21e82c 100644 --- a/products/compute/api.yaml +++ b/products/compute/api.yaml @@ -6602,6 +6602,9 @@ objects: path: 'name' base_url: 'projects/{{project}}/regions/{{region}}/operations/{{op_id}}' wait_ms: 1000 + timeouts: !ruby/object:Api::Timeouts + insert_minutes: 10 + delete_minutes: 10 result: !ruby/object:Api::OpAsync::Result path: 'targetLink' status: !ruby/object:Api::OpAsync::Status diff --git a/products/compute/terraform.yaml b/products/compute/terraform.yaml index a2bb67f967df..4a087dde87da 100644 --- a/products/compute/terraform.yaml +++ b/products/compute/terraform.yaml @@ -920,6 +920,14 @@ overrides: !ruby/object:Overrides::ResourceOverrides InstanceTemplate: !ruby/object:Overrides::Terraform::ResourceOverride exclude: true InterconnectAttachment: !ruby/object:Overrides::Terraform::ResourceOverride + examples: + - !ruby/object:Provider::Terraform::Examples + name: "interconnect_attachment_basic" + primary_resource_id: "on_prem" + skip_test: true + vars: + interconnect_attachment_name: "on-prem-attachment" + router_name: "router" properties: id: !ruby/object:Overrides::Terraform::PropertyOverride exclude: true @@ -939,14 +947,10 @@ overrides: !ruby/object:Overrides::ResourceOverrides default_from_api: true vlanTag8021q: !ruby/object:Overrides::Terraform::PropertyOverride default_from_api: true - examples: - - !ruby/object:Provider::Terraform::Examples - name: "interconnect_attachment_basic" - primary_resource_id: "on_prem" - skip_test: true - vars: - interconnect_attachment_name: "on-prem-attachment" - router_name: "router" + custom_code: !ruby/object:Provider::Terraform::CustomCode + constants: templates/terraform/constants/interconnect_attachment.go.erb + post_create: templates/terraform/post_create/interconnect_attachment.go.erb + pre_delete: templates/terraform/pre_delete/interconnect_attachment.go.erb License: !ruby/object:Overrides::Terraform::ResourceOverride exclude: true MachineType: !ruby/object:Overrides::Terraform::ResourceOverride diff --git a/templates/terraform/constants/interconnect_attachment.go.erb b/templates/terraform/constants/interconnect_attachment.go.erb new file mode 100644 index 000000000000..e82070bd7302 --- /dev/null +++ b/templates/terraform/constants/interconnect_attachment.go.erb @@ -0,0 +1,18 @@ +// waitForAttachmentToBeProvisioned waits for an attachment to leave the +// "UNPROVISIONED" state, to indicate that it's either ready or awaiting partner +// activity. +func waitForAttachmentToBeProvisioned(d *schema.ResourceData, config *Config, timeout time.Duration) error { + return resource.Retry(timeout, func() *resource.RetryError { + if err := resourceComputeInterconnectAttachmentRead(d, config); err != nil { + return resource.NonRetryableError(err) + } + + name := d.Get("name").(string) + state := d.Get("state").(string) + if state == "UNPROVISIONED" { + return resource.RetryableError(fmt.Errorf("InterconnectAttachment %q has state %q.", name, state)) + } + log.Printf("InterconnectAttachment %q has state %q.", name, state) + return nil + }) +} diff --git a/templates/terraform/post_create/interconnect_attachment.go.erb b/templates/terraform/post_create/interconnect_attachment.go.erb new file mode 100644 index 000000000000..03e41d0e5da3 --- /dev/null +++ b/templates/terraform/post_create/interconnect_attachment.go.erb @@ -0,0 +1,3 @@ +if err := waitForAttachmentToBeProvisioned(d, config, d.Timeout(schema.TimeoutCreate)); err != nil { + return fmt.Errorf("Error waiting for InterconnectAttachment %q to be provisioned: %q", d.Get("name").(string), err) +} diff --git a/templates/terraform/pre_delete/interconnect_attachment.go.erb b/templates/terraform/pre_delete/interconnect_attachment.go.erb new file mode 100644 index 000000000000..03e41d0e5da3 --- /dev/null +++ b/templates/terraform/pre_delete/interconnect_attachment.go.erb @@ -0,0 +1,3 @@ +if err := waitForAttachmentToBeProvisioned(d, config, d.Timeout(schema.TimeoutCreate)); err != nil { + return fmt.Errorf("Error waiting for InterconnectAttachment %q to be provisioned: %q", d.Get("name").(string), err) +}