diff --git a/provider.go b/provider.go index 5983fa1b..431a29f1 100644 --- a/provider.go +++ b/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/resource_compute_instance.go b/resource_compute_instance.go index be801abc..8b647255 100644 --- a/resource_compute_instance.go +++ b/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/resource_compute_instance_group_manager.go b/resource_compute_instance_group_manager.go index 56d1e7ee..58d435a7 100644 --- a/resource_compute_instance_group_manager.go +++ b/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