From 673b62db967a46e82be5a107c40430468c2e3c09 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 25 Aug 2014 22:44:27 -0700 Subject: [PATCH] providers/google: check operations for errors --- .../google/resource_compute_address.go | 19 ++++++++++++-- .../providers/google/resource_compute_disk.go | 25 +++++++++++++++---- .../google/resource_compute_firewall.go | 19 ++++++++++++-- .../google/resource_compute_instance.go | 21 +++++++++++++--- .../google/resource_compute_network.go | 19 ++++++++++++-- .../google/resource_compute_route.go | 8 +++++- 6 files changed, 96 insertions(+), 15 deletions(-) diff --git a/builtin/providers/google/resource_compute_address.go b/builtin/providers/google/resource_compute_address.go index b0abdb83d..cd14e6c0f 100644 --- a/builtin/providers/google/resource_compute_address.go +++ b/builtin/providers/google/resource_compute_address.go @@ -56,9 +56,18 @@ func resourceComputeAddressCreate(d *schema.ResourceData, meta interface{}) erro state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for address to create: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // The resource didn't actually create + d.SetId("") + + // Return the error + return OperationError(*op.Error) + } return resourceComputeAddressRead(d, meta) } @@ -98,9 +107,15 @@ func resourceComputeAddressDelete(d *schema.ResourceData, meta interface{}) erro state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for address to delete: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // Return the error + return OperationError(*op.Error) + } d.SetId("") return nil diff --git a/builtin/providers/google/resource_compute_disk.go b/builtin/providers/google/resource_compute_disk.go index 9a7013f2a..f5e6dc4f2 100644 --- a/builtin/providers/google/resource_compute_disk.go +++ b/builtin/providers/google/resource_compute_disk.go @@ -85,8 +85,17 @@ func resourceComputeDiskCreate(d *schema.ResourceData, meta interface{}) error { state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { - return fmt.Errorf("Error waiting for address to create: %s", err) + opRaw, err := state.WaitForState() + if err != nil { + return fmt.Errorf("Error waiting for disk to create: %s", err) + } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // The resource didn't actually create + d.SetId("") + + // Return the error + return OperationError(*op.Error) } return resourceComputeDiskRead(d, meta) @@ -107,7 +116,7 @@ func resourceComputeDiskRead(d *schema.ResourceData, meta interface{}) error { func resourceComputeDiskDelete(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) - // Delete the address + // Delete the disk op, err := config.clientCompute.Disks.Delete( config.Project, d.Get("zone").(string), d.Id()).Do() if err != nil { @@ -125,8 +134,14 @@ func resourceComputeDiskDelete(d *schema.ResourceData, meta interface{}) error { state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { - return fmt.Errorf("Error waiting for address to delete: %s", err) + opRaw, err := state.WaitForState() + if err != nil { + return fmt.Errorf("Error waiting for disk to delete: %s", err) + } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // Return the error + return OperationError(*op.Error) } d.SetId("") diff --git a/builtin/providers/google/resource_compute_firewall.go b/builtin/providers/google/resource_compute_firewall.go index 130b5fbc1..738a937ce 100644 --- a/builtin/providers/google/resource_compute_firewall.go +++ b/builtin/providers/google/resource_compute_firewall.go @@ -171,9 +171,18 @@ func resourceComputeFirewallCreate(d *schema.ResourceData, meta interface{}) err state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for firewall to create: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // The resource didn't actually create + d.SetId("") + + // Return the error + return OperationError(*op.Error) + } return resourceComputeFirewallRead(d, meta) } @@ -210,9 +219,15 @@ func resourceComputeFirewallDelete(d *schema.ResourceData, meta interface{}) err state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for firewall to delete: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // Return the error + return OperationError(*op.Error) + } d.SetId("") return nil diff --git a/builtin/providers/google/resource_compute_instance.go b/builtin/providers/google/resource_compute_instance.go index 0a44aae26..1aebc87a3 100644 --- a/builtin/providers/google/resource_compute_instance.go +++ b/builtin/providers/google/resource_compute_instance.go @@ -282,9 +282,18 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err state.Delay = 10 * time.Second state.Timeout = 10 * time.Minute state.MinTimeout = 2 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for instance to create: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // The resource didn't actually create + d.SetId("") + + // Return the error + return OperationError(*op.Error) + } return resourceComputeInstanceRead(d, meta) } @@ -329,8 +338,14 @@ func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) err state.Delay = 5 * time.Second state.Timeout = 5 * time.Minute state.MinTimeout = 2 * time.Second - if _, err := state.WaitForState(); err != nil { - return fmt.Errorf("Error waiting for instance to create: %s", err) + opRaw, err := state.WaitForState() + if err != nil { + return fmt.Errorf("Error waiting for instance to delete: %s", err) + } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // Return the error + return OperationError(*op.Error) } d.SetId("") diff --git a/builtin/providers/google/resource_compute_network.go b/builtin/providers/google/resource_compute_network.go index 6c0582b13..52e6d714a 100644 --- a/builtin/providers/google/resource_compute_network.go +++ b/builtin/providers/google/resource_compute_network.go @@ -64,9 +64,18 @@ func resourceComputeNetworkCreate(d *schema.ResourceData, meta interface{}) erro state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for network to create: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // The resource didn't actually create + d.SetId("") + + // Return the error + return OperationError(*op.Error) + } return resourceComputeNetworkRead(d, meta) } @@ -105,9 +114,15 @@ func resourceComputeNetworkDelete(d *schema.ResourceData, meta interface{}) erro state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for network to delete: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // Return the error + return OperationError(*op.Error) + } d.SetId("") return nil diff --git a/builtin/providers/google/resource_compute_route.go b/builtin/providers/google/resource_compute_route.go index 2c155cbce..8fc5c5c44 100644 --- a/builtin/providers/google/resource_compute_route.go +++ b/builtin/providers/google/resource_compute_route.go @@ -211,9 +211,15 @@ func resourceComputeRouteDelete(d *schema.ResourceData, meta interface{}) error state := w.Conf() state.Timeout = 2 * time.Minute state.MinTimeout = 1 * time.Second - if _, err := state.WaitForState(); err != nil { + opRaw, err := state.WaitForState() + if err != nil { return fmt.Errorf("Error waiting for route to delete: %s", err) } + op = opRaw.(*compute.Operation) + if op.Error != nil { + // Return the error + return OperationError(*op.Error) + } d.SetId("") return nil