From ff8bdc9b52f379b7cb42a2c2fe6dcb49e0c130c3 Mon Sep 17 00:00:00 2001 From: Riley Karson Date: Thu, 10 Aug 2017 13:01:56 -0700 Subject: [PATCH] Remove Beta operation waiting code and just wait at v1 instead. (#319) --- google/compute_beta_operation.go | 167 ------------------ google/compute_shared_operation.go | 17 -- ...resource_compute_instance_group_manager.go | 19 +- 3 files changed, 9 insertions(+), 194 deletions(-) delete mode 100644 google/compute_beta_operation.go diff --git a/google/compute_beta_operation.go b/google/compute_beta_operation.go deleted file mode 100644 index fc3b94da..00000000 --- a/google/compute_beta_operation.go +++ /dev/null @@ -1,167 +0,0 @@ -package google - -import ( - "bytes" - "fmt" - "log" - "time" - - "github.com/hashicorp/terraform/helper/resource" - - computeBeta "google.golang.org/api/compute/v0.beta" -) - -// OperationBetaWaitType is an enum specifying what type of operation -// we're waiting on from the beta API. -type ComputeBetaOperationWaitType byte - -const ( - ComputeBetaOperationWaitInvalid ComputeBetaOperationWaitType = iota - ComputeBetaOperationWaitGlobal - ComputeBetaOperationWaitRegion - ComputeBetaOperationWaitZone -) - -type ComputeBetaOperationWaiter struct { - Service *computeBeta.Service - Op *computeBeta.Operation - Project string - Region string - Type ComputeBetaOperationWaitType - Zone string -} - -func (w *ComputeBetaOperationWaiter) RefreshFunc() resource.StateRefreshFunc { - return func() (interface{}, string, error) { - var op *computeBeta.Operation - var err error - - switch w.Type { - case ComputeBetaOperationWaitGlobal: - op, err = w.Service.GlobalOperations.Get( - w.Project, w.Op.Name).Do() - case ComputeBetaOperationWaitRegion: - op, err = w.Service.RegionOperations.Get( - w.Project, w.Region, w.Op.Name).Do() - case ComputeBetaOperationWaitZone: - op, err = w.Service.ZoneOperations.Get( - w.Project, w.Zone, w.Op.Name).Do() - default: - return nil, "bad-type", fmt.Errorf( - "Invalid wait type: %#v", w.Type) - } - - if err != nil { - return nil, "", err - } - - log.Printf("[DEBUG] Got %q when asking for operation %q", op.Status, w.Op.Name) - - return op, op.Status, nil - } -} - -func (w *ComputeBetaOperationWaiter) Conf() *resource.StateChangeConf { - return &resource.StateChangeConf{ - Pending: []string{"PENDING", "RUNNING"}, - Target: []string{"DONE"}, - Refresh: w.RefreshFunc(), - } -} - -// ComputeBetaOperationError wraps computeBeta.OperationError and implements the -// error interface so it can be returned. -type ComputeBetaOperationError computeBeta.OperationError - -func (e ComputeBetaOperationError) Error() string { - var buf bytes.Buffer - - for _, err := range e.Errors { - buf.WriteString(err.Message + "\n") - } - - return buf.String() -} - -func computeBetaOperationWaitGlobal(config *Config, op *computeBeta.Operation, project string, activity string) error { - return computeBetaOperationWaitGlobalTime(config, op, project, activity, 4) -} - -func computeBetaOperationWaitGlobalTime(config *Config, op *computeBeta.Operation, project string, activity string, timeoutMin int) error { - w := &ComputeBetaOperationWaiter{ - Service: config.clientComputeBeta, - Op: op, - Project: project, - Type: ComputeBetaOperationWaitGlobal, - } - - state := w.Conf() - state.Delay = 10 * time.Second - state.Timeout = time.Duration(timeoutMin) * time.Minute - state.MinTimeout = 2 * time.Second - opRaw, err := state.WaitForState() - if err != nil { - return fmt.Errorf("Error waiting for %s: %s", activity, err) - } - - op = opRaw.(*computeBeta.Operation) - if op.Error != nil { - return ComputeBetaOperationError(*op.Error) - } - - return nil -} - -func computeBetaOperationWaitRegion(config *Config, op *computeBeta.Operation, project string, region, activity string) error { - w := &ComputeBetaOperationWaiter{ - Service: config.clientComputeBeta, - Op: op, - Project: project, - Type: ComputeBetaOperationWaitRegion, - Region: region, - } - - state := w.Conf() - state.Delay = 10 * time.Second - state.Timeout = 4 * time.Minute - state.MinTimeout = 2 * time.Second - opRaw, err := state.WaitForState() - if err != nil { - return fmt.Errorf("Error waiting for %s: %s", activity, err) - } - - op = opRaw.(*computeBeta.Operation) - if op.Error != nil { - return ComputeBetaOperationError(*op.Error) - } - - return nil -} - -func computeBetaOperationWaitZone(config *Config, op *computeBeta.Operation, project string, zone, activity string) error { - return computeBetaOperationWaitZoneTime(config, op, project, zone, 4, activity) -} - -func computeBetaOperationWaitZoneTime(config *Config, op *computeBeta.Operation, project string, zone string, minutes int, activity string) error { - w := &ComputeBetaOperationWaiter{ - Service: config.clientComputeBeta, - Op: op, - Project: project, - Zone: zone, - Type: ComputeBetaOperationWaitZone, - } - state := w.Conf() - state.Delay = 10 * time.Second - state.Timeout = time.Duration(minutes) * time.Minute - state.MinTimeout = 2 * time.Second - opRaw, err := state.WaitForState() - if err != nil { - return fmt.Errorf("Error waiting for %s: %s", activity, err) - } - op = opRaw.(*computeBeta.Operation) - if op.Error != nil { - // Return the error - return ComputeBetaOperationError(*op.Error) - } - return nil -} diff --git a/google/compute_shared_operation.go b/google/compute_shared_operation.go index 9be0e110..37fab75c 100644 --- a/google/compute_shared_operation.go +++ b/google/compute_shared_operation.go @@ -23,20 +23,3 @@ func computeSharedOperationWaitTime(config *Config, op interface{}, project stri panic("Attempted to wait on an Operation of unknown type.") } } - -func computeSharedOperationWaitZone(config *Config, op interface{}, project string, zone, activity string) error { - return computeSharedOperationWaitZoneTime(config, op, project, zone, 4, activity) -} - -func computeSharedOperationWaitZoneTime(config *Config, op interface{}, project string, zone string, minutes int, activity string) error { - switch op.(type) { - case *compute.Operation: - return computeOperationWaitTime(config, op.(*compute.Operation), project, activity, minutes) - case *computeBeta.Operation: - return computeBetaOperationWaitZoneTime(config, op.(*computeBeta.Operation), project, zone, minutes, activity) - case nil: - panic("Attempted to wait on an Operation that was nil.") - default: - panic("Attempted to wait on an Operation of unknown type.") - } -} diff --git a/google/resource_compute_instance_group_manager.go b/google/resource_compute_instance_group_manager.go index b6b64adc..c61e3fb5 100644 --- a/google/resource_compute_instance_group_manager.go +++ b/google/resource_compute_instance_group_manager.go @@ -252,7 +252,7 @@ func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta inte d.SetId(manager.Name) // Wait for the operation to complete - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Creating InstanceGroupManager") + err = computeSharedOperationWait(config, op, project, "Creating InstanceGroupManager") if err != nil { return err } @@ -439,7 +439,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte } // Wait for the operation to complete - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Updating InstanceGroupManager") + err = computeSharedOperationWait(config, op, project, "Updating InstanceGroupManager") if err != nil { return err } @@ -481,7 +481,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte } // Wait for the operation to complete - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Updating InstanceGroupManager") + err = computeSharedOperationWait(config, op, project, "Updating InstanceGroupManager") if err != nil { return err } @@ -552,8 +552,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte } // Wait for the operation to complete - err = computeSharedOperationWaitZoneTime(config, op, project, d.Get("zone").(string), - managedInstanceCount*4, "Restarting InstanceGroupManagers instances") + err = computeSharedOperationWaitTime(config, op, project, managedInstanceCount*4, "Restarting InstanceGroupManagers instances") if err != nil { return err } @@ -599,7 +598,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte } // Wait for the operation to complete: - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Updating InstanceGroupManager") + err = computeSharedOperationWait(config, op, project, "Updating InstanceGroupManager") if err != nil { return err } @@ -624,7 +623,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte } // Wait for the operation to complete - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Updating InstanceGroupManager") + err = computeSharedOperationWait(config, op, project, "Updating InstanceGroupManager") if err != nil { return err } @@ -647,7 +646,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte } // Wait for the operation to complete - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Updating AutoHealingPolicies") + err = computeSharedOperationWait(config, op, project, "Updating AutoHealingPolicies") if err != nil { return err } @@ -698,7 +697,7 @@ func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta inte currentSize := int64(d.Get("target_size").(int)) // Wait for the operation to complete - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Deleting InstanceGroupManager") + err = computeSharedOperationWait(config, op, project, "Deleting InstanceGroupManager") for err != nil && currentSize > 0 { if !strings.Contains(err.Error(), "timeout") { @@ -731,7 +730,7 @@ func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta inte log.Printf("[INFO] timeout occured, but instance group is shrinking (%d < %d)", instanceGroupSize, currentSize) currentSize = instanceGroupSize - err = computeSharedOperationWaitZone(config, op, project, d.Get("zone").(string), "Deleting InstanceGroupManager") + err = computeSharedOperationWait(config, op, project, "Deleting InstanceGroupManager") } d.SetId("")