Remove Beta operation waiting code and just wait at v1 instead. (#319)

This commit is contained in:
Riley Karson 2017-08-10 13:01:56 -07:00 committed by GitHub
parent 9e76fab11b
commit ff8bdc9b52
3 changed files with 9 additions and 194 deletions

View File

@ -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
}

View File

@ -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.")
}
}

View File

@ -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("")