mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-03 01:01:06 +00:00
Remove Beta operation waiting code and just wait at v1 instead. (#319)
This commit is contained in:
parent
9e76fab11b
commit
ff8bdc9b52
@ -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
|
||||
}
|
@ -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.")
|
||||
}
|
||||
}
|
||||
|
@ -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("")
|
||||
|
Loading…
Reference in New Issue
Block a user