From b7d0140aaf06f5788e5e0ea219717c74aa8b8a5c Mon Sep 17 00:00:00 2001 From: Dana Hoffman Date: Thu, 4 May 2017 16:15:36 -0700 Subject: [PATCH] provider/google: Move 404 checking into a function in provider.go, call it from instance and IGM (#14190) --- builtin/providers/google/provider.go | 13 +++++++++++++ .../google/resource_compute_instance.go | 19 ++----------------- ...resource_compute_instance_group_manager.go | 2 +- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/builtin/providers/google/provider.go b/builtin/providers/google/provider.go index 5983fa1b3..431a29f1d 100644 --- a/builtin/providers/google/provider.go +++ b/builtin/providers/google/provider.go @@ -3,6 +3,7 @@ package google import ( "encoding/json" "fmt" + "log" "strings" "github.com/hashicorp/terraform/helper/schema" @@ -251,3 +252,15 @@ func getNetworkNameFromSelfLink(network string) (string, error) { return network, nil } + +func handleNotFoundError(err error, d *schema.ResourceData, resource string) error { + if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { + log.Printf("[WARN] Removing %s because it's gone", resource) + // The resource doesn't exist anymore + d.SetId("") + + return nil + } + + return fmt.Errorf("Error reading %s: %s", resource, err) +} diff --git a/builtin/providers/google/resource_compute_instance.go b/builtin/providers/google/resource_compute_instance.go index be801abc8..8b647255c 100644 --- a/builtin/providers/google/resource_compute_instance.go +++ b/builtin/providers/google/resource_compute_instance.go @@ -7,7 +7,6 @@ import ( "github.com/hashicorp/terraform/helper/schema" "google.golang.org/api/compute/v1" - "google.golang.org/api/googleapi" ) func stringScopeHashcode(v interface{}) int { @@ -361,16 +360,7 @@ func getInstance(config *Config, d *schema.ResourceData) (*compute.Instance, err instance, err := config.clientCompute.Instances.Get( project, d.Get("zone").(string), d.Id()).Do() if err != nil { - if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { - log.Printf("[WARN] Removing Instance %q because it's gone", d.Get("name").(string)) - // The resource doesn't exist anymore - id := d.Id() - d.SetId("") - - return nil, fmt.Errorf("Resource %s no longer exists", id) - } - - return nil, fmt.Errorf("Error reading instance: %s", err) + return nil, handleNotFoundError(err, d, fmt.Sprintf("Instance %s", d.Get("name").(string))) } return instance, nil @@ -713,13 +703,8 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error { config := meta.(*Config) - id := d.Id() instance, err := getInstance(config, d) - if err != nil { - if strings.Contains(err.Error(), "no longer exists") { - log.Printf("[WARN] Google Compute Instance (%s) not found", id) - return nil - } + if err != nil || instance == nil { return err } diff --git a/builtin/providers/google/resource_compute_instance_group_manager.go b/builtin/providers/google/resource_compute_instance_group_manager.go index 56d1e7eee..58d435a74 100644 --- a/builtin/providers/google/resource_compute_instance_group_manager.go +++ b/builtin/providers/google/resource_compute_instance_group_manager.go @@ -222,7 +222,7 @@ func resourceComputeInstanceGroupManagerRead(d *schema.ResourceData, meta interf manager, e = config.clientCompute.InstanceGroupManagers.Get(project, zone.(string), d.Id()).Do() if e != nil { - return e + return handleNotFoundError(e, d, fmt.Sprintf("Instance Group Manager %q", d.Get("name").(string))) } } else { // If the resource was imported, the only info we have is the ID. Try to find the resource