Merge pull request #3323 from lwander/r-gce-refactor-operations
provider/gce: Refactored Operation Wait Code
This commit is contained in:
commit
442d64d7c2
|
@ -0,0 +1,158 @@
|
||||||
|
package google
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform/helper/resource"
|
||||||
|
"google.golang.org/api/compute/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperationWaitType is an enum specifying what type of operation
|
||||||
|
// we're waiting on.
|
||||||
|
type ComputeOperationWaitType byte
|
||||||
|
|
||||||
|
const (
|
||||||
|
ComputeOperationWaitInvalid ComputeOperationWaitType = iota
|
||||||
|
ComputeOperationWaitGlobal
|
||||||
|
ComputeOperationWaitRegion
|
||||||
|
ComputeOperationWaitZone
|
||||||
|
)
|
||||||
|
|
||||||
|
type ComputeOperationWaiter struct {
|
||||||
|
Service *compute.Service
|
||||||
|
Op *compute.Operation
|
||||||
|
Project string
|
||||||
|
Region string
|
||||||
|
Type ComputeOperationWaitType
|
||||||
|
Zone string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (w *ComputeOperationWaiter) RefreshFunc() resource.StateRefreshFunc {
|
||||||
|
return func() (interface{}, string, error) {
|
||||||
|
var op *compute.Operation
|
||||||
|
var err error
|
||||||
|
|
||||||
|
switch w.Type {
|
||||||
|
case ComputeOperationWaitGlobal:
|
||||||
|
op, err = w.Service.GlobalOperations.Get(
|
||||||
|
w.Project, w.Op.Name).Do()
|
||||||
|
case ComputeOperationWaitRegion:
|
||||||
|
op, err = w.Service.RegionOperations.Get(
|
||||||
|
w.Project, w.Region, w.Op.Name).Do()
|
||||||
|
case ComputeOperationWaitZone:
|
||||||
|
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 *ComputeOperationWaiter) Conf() *resource.StateChangeConf {
|
||||||
|
return &resource.StateChangeConf{
|
||||||
|
Pending: []string{"PENDING", "RUNNING"},
|
||||||
|
Target: "DONE",
|
||||||
|
Refresh: w.RefreshFunc(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ComputeOperationError wraps compute.OperationError and implements the
|
||||||
|
// error interface so it can be returned.
|
||||||
|
type ComputeOperationError compute.OperationError
|
||||||
|
|
||||||
|
func (e ComputeOperationError) Error() string {
|
||||||
|
var buf bytes.Buffer
|
||||||
|
|
||||||
|
for _, err := range e.Errors {
|
||||||
|
buf.WriteString(err.Message + "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func computeOperationWaitGlobal(config *Config, op *compute.Operation, activity string) error {
|
||||||
|
w := &ComputeOperationWaiter{
|
||||||
|
Service: config.clientCompute,
|
||||||
|
Op: op,
|
||||||
|
Project: config.Project,
|
||||||
|
Type: ComputeOperationWaitGlobal,
|
||||||
|
}
|
||||||
|
|
||||||
|
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.(*compute.Operation)
|
||||||
|
if op.Error != nil {
|
||||||
|
return ComputeOperationError(*op.Error)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func computeOperationWaitRegion(config *Config, op *compute.Operation, region, activity string) error {
|
||||||
|
w := &ComputeOperationWaiter{
|
||||||
|
Service: config.clientCompute,
|
||||||
|
Op: op,
|
||||||
|
Project: config.Project,
|
||||||
|
Type: ComputeOperationWaitRegion,
|
||||||
|
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.(*compute.Operation)
|
||||||
|
if op.Error != nil {
|
||||||
|
return ComputeOperationError(*op.Error)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func computeOperationWaitZone(config *Config, op *compute.Operation, zone, activity string) error {
|
||||||
|
w := &ComputeOperationWaiter{
|
||||||
|
Service: config.clientCompute,
|
||||||
|
Op: op,
|
||||||
|
Project: config.Project,
|
||||||
|
Zone: zone,
|
||||||
|
Type: ComputeOperationWaitZone,
|
||||||
|
}
|
||||||
|
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.(*compute.Operation)
|
||||||
|
if op.Error != nil {
|
||||||
|
// Return the error
|
||||||
|
return ComputeOperationError(*op.Error)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -1,82 +0,0 @@
|
||||||
package google
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/resource"
|
|
||||||
"google.golang.org/api/compute/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
// OperationWaitType is an enum specifying what type of operation
|
|
||||||
// we're waiting on.
|
|
||||||
type OperationWaitType byte
|
|
||||||
|
|
||||||
const (
|
|
||||||
OperationWaitInvalid OperationWaitType = iota
|
|
||||||
OperationWaitGlobal
|
|
||||||
OperationWaitRegion
|
|
||||||
OperationWaitZone
|
|
||||||
)
|
|
||||||
|
|
||||||
type OperationWaiter struct {
|
|
||||||
Service *compute.Service
|
|
||||||
Op *compute.Operation
|
|
||||||
Project string
|
|
||||||
Region string
|
|
||||||
Type OperationWaitType
|
|
||||||
Zone string
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w *OperationWaiter) RefreshFunc() resource.StateRefreshFunc {
|
|
||||||
return func() (interface{}, string, error) {
|
|
||||||
var op *compute.Operation
|
|
||||||
var err error
|
|
||||||
|
|
||||||
switch w.Type {
|
|
||||||
case OperationWaitGlobal:
|
|
||||||
op, err = w.Service.GlobalOperations.Get(
|
|
||||||
w.Project, w.Op.Name).Do()
|
|
||||||
case OperationWaitRegion:
|
|
||||||
op, err = w.Service.RegionOperations.Get(
|
|
||||||
w.Project, w.Region, w.Op.Name).Do()
|
|
||||||
case OperationWaitZone:
|
|
||||||
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 *OperationWaiter) Conf() *resource.StateChangeConf {
|
|
||||||
return &resource.StateChangeConf{
|
|
||||||
Pending: []string{"PENDING", "RUNNING"},
|
|
||||||
Target: "DONE",
|
|
||||||
Refresh: w.RefreshFunc(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// OperationError wraps compute.OperationError and implements the
|
|
||||||
// error interface so it can be returned.
|
|
||||||
type OperationError compute.OperationError
|
|
||||||
|
|
||||||
func (e OperationError) Error() string {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
|
|
||||||
for _, err := range e.Errors {
|
|
||||||
buf.WriteString(err.Message + "\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf.String()
|
|
||||||
}
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
|
@ -65,28 +64,9 @@ func resourceComputeAddressCreate(d *schema.ResourceData, meta interface{}) erro
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(addr.Name)
|
d.SetId(addr.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitRegion(config, op, region, "Creating Address")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Region: region,
|
|
||||||
Type: OperationWaitRegion,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for address to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeAddressRead(d, meta)
|
return resourceComputeAddressRead(d, meta)
|
||||||
|
@ -128,25 +108,9 @@ func resourceComputeAddressDelete(d *schema.ResourceData, meta interface{}) erro
|
||||||
return fmt.Errorf("Error deleting address: %s", err)
|
return fmt.Errorf("Error deleting address: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitRegion(config, op, region, "Deleting Address")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Region: region,
|
|
||||||
Type: OperationWaitRegion,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for address to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
|
@ -224,28 +223,9 @@ func resourceComputeAutoscalerCreate(d *schema.ResourceData, meta interface{}) e
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(scaler.Name)
|
d.SetId(scaler.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitZone(config, op, zone.Name, "Creating Autoscaler")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitZone,
|
|
||||||
Zone: zone.Name,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for Autoscaler to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeAutoscalerRead(d, meta)
|
return resourceComputeAutoscalerRead(d, meta)
|
||||||
|
@ -292,25 +272,9 @@ func resourceComputeAutoscalerUpdate(d *schema.ResourceData, meta interface{}) e
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(scaler.Name)
|
d.SetId(scaler.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitZone(config, op, zone, "Updating Autoscaler")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitZone,
|
|
||||||
Zone: zone,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for Autoscaler to update: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeAutoscalerRead(d, meta)
|
return resourceComputeAutoscalerRead(d, meta)
|
||||||
|
@ -326,25 +290,9 @@ func resourceComputeAutoscalerDelete(d *schema.ResourceData, meta interface{}) e
|
||||||
return fmt.Errorf("Error deleting autoscaler: %s", err)
|
return fmt.Errorf("Error deleting autoscaler: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitZone(config, op, zone, "Deleting Autoscaler")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitZone,
|
|
||||||
Zone: zone,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for Autoscaler to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -5,7 +5,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"regexp"
|
"regexp"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/hashcode"
|
"github.com/hashicorp/terraform/helper/hashcode"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
@ -165,28 +164,9 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
|
||||||
|
|
||||||
d.SetId(service.Name)
|
d.SetId(service.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Creating Backend Service")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Region: config.Region,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for backend service to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeBackendServiceRead(d, meta)
|
return resourceComputeBackendServiceRead(d, meta)
|
||||||
|
@ -261,25 +241,9 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
|
||||||
|
|
||||||
d.SetId(service.Name)
|
d.SetId(service.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Updating Backend Service")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Region: config.Region,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for backend service to update: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeBackendServiceRead(d, meta)
|
return resourceComputeBackendServiceRead(d, meta)
|
||||||
|
@ -295,25 +259,9 @@ func resourceComputeBackendServiceDelete(d *schema.ResourceData, meta interface{
|
||||||
return fmt.Errorf("Error deleting backend service: %s", err)
|
return fmt.Errorf("Error deleting backend service: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Deleting Backend Service")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Region: config.Region,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for backend service to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
|
@ -128,37 +127,10 @@ func resourceComputeDiskCreate(d *schema.ResourceData, meta interface{}) error {
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(disk.Name)
|
d.SetId(disk.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitZone(config, op, d.Get("zone").(string), "Creating Disk")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Zone: d.Get("zone").(string),
|
|
||||||
Type: OperationWaitZone,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
|
|
||||||
if disk.SourceSnapshot != "" {
|
|
||||||
//creating disk from snapshot takes some time
|
|
||||||
state.Timeout = 10 * time.Minute
|
|
||||||
} else {
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
}
|
|
||||||
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for disk to create: %s", err)
|
return err
|
||||||
}
|
}
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return resourceComputeDiskRead(d, meta)
|
return resourceComputeDiskRead(d, meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,25 +165,10 @@ func resourceComputeDiskDelete(d *schema.ResourceData, meta interface{}) error {
|
||||||
return fmt.Errorf("Error deleting disk: %s", err)
|
return fmt.Errorf("Error deleting disk: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
zone := d.Get("zone").(string)
|
||||||
w := &OperationWaiter{
|
err = computeOperationWaitZone(config, op, zone, "Creating Disk")
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Zone: d.Get("zone").(string),
|
|
||||||
Type: OperationWaitZone,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for disk to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/hashcode"
|
"github.com/hashicorp/terraform/helper/hashcode"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
@ -135,27 +134,9 @@ func resourceComputeFirewallCreate(d *schema.ResourceData, meta interface{}) err
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(firewall.Name)
|
d.SetId(firewall.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Creating Firewall")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for firewall to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeFirewallRead(d, meta)
|
return resourceComputeFirewallRead(d, meta)
|
||||||
|
@ -198,24 +179,9 @@ func resourceComputeFirewallUpdate(d *schema.ResourceData, meta interface{}) err
|
||||||
return fmt.Errorf("Error updating firewall: %s", err)
|
return fmt.Errorf("Error updating firewall: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Updating Firewall")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for firewall to update: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.Partial(false)
|
d.Partial(false)
|
||||||
|
@ -233,24 +199,9 @@ func resourceComputeFirewallDelete(d *schema.ResourceData, meta interface{}) err
|
||||||
return fmt.Errorf("Error deleting firewall: %s", err)
|
return fmt.Errorf("Error deleting firewall: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Deleting Firewall")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for firewall to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
|
@ -94,28 +93,9 @@ func resourceComputeForwardingRuleCreate(d *schema.ResourceData, meta interface{
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(frule.Name)
|
d.SetId(frule.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitRegion(config, op, region, "Creating Fowarding Rule")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Region: region,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitRegion,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for ForwardingRule to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeForwardingRuleRead(d, meta)
|
return resourceComputeForwardingRuleRead(d, meta)
|
||||||
|
@ -137,29 +117,11 @@ func resourceComputeForwardingRuleUpdate(d *schema.ResourceData, meta interface{
|
||||||
return fmt.Errorf("Error updating target: %s", err)
|
return fmt.Errorf("Error updating target: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitRegion(config, op, region, "Updating Forwarding Rule")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Region: region,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitRegion,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for ForwardingRule to update target: %s", err)
|
return err
|
||||||
}
|
}
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
d.SetPartial("target")
|
d.SetPartial("target")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,25 +168,9 @@ func resourceComputeForwardingRuleDelete(d *schema.ResourceData, meta interface{
|
||||||
return fmt.Errorf("Error deleting ForwardingRule: %s", err)
|
return fmt.Errorf("Error deleting ForwardingRule: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitRegion(config, op, region, "Deleting Forwarding Rule")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Region: region,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitRegion,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for ForwardingRule to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
|
@ -121,27 +120,9 @@ func resourceComputeHttpHealthCheckCreate(d *schema.ResourceData, meta interface
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(hchk.Name)
|
d.SetId(hchk.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Creating Http Health Check")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for HttpHealthCheck to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeHttpHealthCheckRead(d, meta)
|
return resourceComputeHttpHealthCheckRead(d, meta)
|
||||||
|
@ -190,27 +171,9 @@ func resourceComputeHttpHealthCheckUpdate(d *schema.ResourceData, meta interface
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(hchk.Name)
|
d.SetId(hchk.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Updating Http Health Check")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for HttpHealthCheck to patch: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeHttpHealthCheckRead(d, meta)
|
return resourceComputeHttpHealthCheckRead(d, meta)
|
||||||
|
@ -254,24 +217,9 @@ func resourceComputeHttpHealthCheckDelete(d *schema.ResourceData, meta interface
|
||||||
return fmt.Errorf("Error deleting HttpHealthCheck: %s", err)
|
return fmt.Errorf("Error deleting HttpHealthCheck: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Deleting Http Health Check")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for HttpHealthCheck to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/hashcode"
|
"github.com/hashicorp/terraform/helper/hashcode"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
@ -273,32 +272,6 @@ func getInstance(config *Config, d *schema.ResourceData) (*compute.Instance, err
|
||||||
return instance, nil
|
return instance, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceOperationWaitZone(
|
|
||||||
config *Config, op *compute.Operation, zone string, activity string) error {
|
|
||||||
|
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Zone: zone,
|
|
||||||
Type: OperationWaitZone,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Delay = 10 * time.Second
|
|
||||||
state.Timeout = 10 * 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.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) error {
|
func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) error {
|
||||||
config := meta.(*Config)
|
config := meta.(*Config)
|
||||||
|
|
||||||
|
@ -521,7 +494,7 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err
|
||||||
d.SetId(instance.Name)
|
d.SetId(instance.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
// Wait for the operation to complete
|
||||||
waitErr := resourceOperationWaitZone(config, op, zone.Name, "instance to create")
|
waitErr := computeOperationWaitZone(config, op, zone.Name, "instance to create")
|
||||||
if waitErr != nil {
|
if waitErr != nil {
|
||||||
// The resource didn't actually create
|
// The resource didn't actually create
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
@ -703,7 +676,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
|
||||||
return fmt.Errorf("Error updating metadata: %s", err)
|
return fmt.Errorf("Error updating metadata: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
opErr := resourceOperationWaitZone(config, op, zone, "metadata to update")
|
opErr := computeOperationWaitZone(config, op, zone, "metadata to update")
|
||||||
if opErr != nil {
|
if opErr != nil {
|
||||||
return opErr
|
return opErr
|
||||||
}
|
}
|
||||||
|
@ -723,7 +696,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
|
||||||
return fmt.Errorf("Error updating tags: %s", err)
|
return fmt.Errorf("Error updating tags: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
opErr := resourceOperationWaitZone(config, op, zone, "tags to update")
|
opErr := computeOperationWaitZone(config, op, zone, "tags to update")
|
||||||
if opErr != nil {
|
if opErr != nil {
|
||||||
return opErr
|
return opErr
|
||||||
}
|
}
|
||||||
|
@ -764,7 +737,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error deleting old access_config: %s", err)
|
return fmt.Errorf("Error deleting old access_config: %s", err)
|
||||||
}
|
}
|
||||||
opErr := resourceOperationWaitZone(config, op, zone, "old access_config to delete")
|
opErr := computeOperationWaitZone(config, op, zone, "old access_config to delete")
|
||||||
if opErr != nil {
|
if opErr != nil {
|
||||||
return opErr
|
return opErr
|
||||||
}
|
}
|
||||||
|
@ -783,7 +756,7 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error adding new access_config: %s", err)
|
return fmt.Errorf("Error adding new access_config: %s", err)
|
||||||
}
|
}
|
||||||
opErr := resourceOperationWaitZone(config, op, zone, "new access_config to add")
|
opErr := computeOperationWaitZone(config, op, zone, "new access_config to add")
|
||||||
if opErr != nil {
|
if opErr != nil {
|
||||||
return opErr
|
return opErr
|
||||||
}
|
}
|
||||||
|
@ -809,7 +782,7 @@ func resourceComputeInstanceDelete(d *schema.ResourceData, meta interface{}) err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
// Wait for the operation to complete
|
||||||
opErr := resourceOperationWaitZone(config, op, zone, "instance to delete")
|
opErr := computeOperationWaitZone(config, op, zone, "instance to delete")
|
||||||
if opErr != nil {
|
if opErr != nil {
|
||||||
return opErr
|
return opErr
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
"google.golang.org/api/googleapi"
|
"google.golang.org/api/googleapi"
|
||||||
|
@ -82,26 +81,6 @@ func resourceComputeInstanceGroupManager() *schema.Resource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func waitOpZone(config *Config, op *compute.Operation, zone string,
|
|
||||||
resource string, action string) (*compute.Operation, error) {
|
|
||||||
|
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Zone: zone,
|
|
||||||
Type: OperationWaitZone,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 8 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Error waiting for %s to %s: %s", resource, action, err)
|
|
||||||
}
|
|
||||||
return opRaw.(*compute.Operation), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta interface{}) error {
|
func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta interface{}) error {
|
||||||
config := meta.(*Config)
|
config := meta.(*Config)
|
||||||
|
|
||||||
|
@ -143,16 +122,10 @@ func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta inte
|
||||||
d.SetId(manager.Name)
|
d.SetId(manager.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
// Wait for the operation to complete
|
||||||
op, err = waitOpZone(config, op, d.Get("zone").(string), "InstanceGroupManager", "create")
|
err = computeOperationWaitZone(config, op, d.Get("zone").(string), "Creating InstanceGroupManager")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return resourceComputeInstanceGroupManagerRead(d, meta)
|
return resourceComputeInstanceGroupManagerRead(d, meta)
|
||||||
}
|
}
|
||||||
|
@ -208,13 +181,10 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
// Wait for the operation to complete
|
||||||
op, err = waitOpZone(config, op, d.Get("zone").(string), "InstanceGroupManager", "update TargetPools")
|
err = computeOperationWaitZone(config, op, d.Get("zone").(string), "Updating InstanceGroupManager")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetPartial("target_pools")
|
d.SetPartial("target_pools")
|
||||||
}
|
}
|
||||||
|
@ -233,13 +203,10 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
// Wait for the operation to complete
|
||||||
op, err = waitOpZone(config, op, d.Get("zone").(string), "InstanceGroupManager", "update instance template")
|
err = computeOperationWaitZone(config, op, d.Get("zone").(string), "Updating InstanceGroupManager")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetPartial("instance_template")
|
d.SetPartial("instance_template")
|
||||||
}
|
}
|
||||||
|
@ -257,13 +224,10 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
// Wait for the operation to complete
|
||||||
op, err = waitOpZone(config, op, d.Get("zone").(string), "InstanceGroupManager", "update target_size")
|
err = computeOperationWaitZone(config, op, d.Get("zone").(string), "Updating InstanceGroupManager")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetPartial("target_size")
|
d.SetPartial("target_size")
|
||||||
|
@ -284,17 +248,10 @@ func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta inte
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
// Wait for the operation to complete
|
||||||
op, err = waitOpZone(config, op, d.Get("zone").(string), "InstanceGroupManager", "delete")
|
err = computeOperationWaitZone(config, op, d.Get("zone").(string), "Deleting InstanceGroupManager")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -2,7 +2,6 @@ package google
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/hashcode"
|
"github.com/hashicorp/terraform/helper/hashcode"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
@ -401,28 +400,9 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac
|
||||||
// Store the ID now
|
// Store the ID now
|
||||||
d.SetId(instanceTemplate.Name)
|
d.SetId(instanceTemplate.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Creating Instance Template")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Delay = 10 * time.Second
|
|
||||||
state.Timeout = 10 * time.Minute
|
|
||||||
state.MinTimeout = 2 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for instance template to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeInstanceTemplateRead(d, meta)
|
return resourceComputeInstanceTemplateRead(d, meta)
|
||||||
|
@ -467,25 +447,9 @@ func resourceComputeInstanceTemplateDelete(d *schema.ResourceData, meta interfac
|
||||||
return fmt.Errorf("Error deleting instance template: %s", err)
|
return fmt.Errorf("Error deleting instance template: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Deleting Instance Template")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Delay = 5 * time.Second
|
|
||||||
state.Timeout = 5 * time.Minute
|
|
||||||
state.MinTimeout = 2 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for instance template to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
|
@ -60,27 +59,9 @@ func resourceComputeNetworkCreate(d *schema.ResourceData, meta interface{}) erro
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(network.Name)
|
d.SetId(network.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Creating Network")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for network to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeNetworkRead(d, meta)
|
return resourceComputeNetworkRead(d, meta)
|
||||||
|
@ -118,24 +99,9 @@ func resourceComputeNetworkDelete(d *schema.ResourceData, meta interface{}) erro
|
||||||
return fmt.Errorf("Error deleting network: %s", err)
|
return fmt.Errorf("Error deleting network: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Deleting Network")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for network to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
// "github.com/hashicorp/terraform/helper/hashcode"
|
// "github.com/hashicorp/terraform/helper/hashcode"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
@ -30,30 +29,6 @@ func resourceComputeProjectMetadata() *schema.Resource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceOperationWaitGlobal(config *Config, op *compute.Operation, activity string) error {
|
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Error waiting for %s: %s", activity, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func resourceComputeProjectMetadataCreate(d *schema.ResourceData, meta interface{}) error {
|
func resourceComputeProjectMetadataCreate(d *schema.ResourceData, meta interface{}) error {
|
||||||
config := meta.(*Config)
|
config := meta.(*Config)
|
||||||
|
|
||||||
|
@ -92,7 +67,7 @@ func resourceComputeProjectMetadataCreate(d *schema.ResourceData, meta interface
|
||||||
|
|
||||||
log.Printf("[DEBUG] SetCommonMetadata: %d (%s)", op.Id, op.SelfLink)
|
log.Printf("[DEBUG] SetCommonMetadata: %d (%s)", op.Id, op.SelfLink)
|
||||||
|
|
||||||
return resourceOperationWaitGlobal(config, op, "SetCommonMetadata")
|
return computeOperationWaitGlobal(config, op, "SetCommonMetadata")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := MetadataRetryWrapper(createMD)
|
err := MetadataRetryWrapper(createMD)
|
||||||
|
@ -153,7 +128,7 @@ func resourceComputeProjectMetadataUpdate(d *schema.ResourceData, meta interface
|
||||||
// Optimistic locking requires the fingerprint received to match
|
// Optimistic locking requires the fingerprint received to match
|
||||||
// the fingerprint we send the server, if there is a mismatch then we
|
// the fingerprint we send the server, if there is a mismatch then we
|
||||||
// are working on old data, and must retry
|
// are working on old data, and must retry
|
||||||
return resourceOperationWaitGlobal(config, op, "SetCommonMetadata")
|
return computeOperationWaitGlobal(config, op, "SetCommonMetadata")
|
||||||
}
|
}
|
||||||
|
|
||||||
err := MetadataRetryWrapper(updateMD)
|
err := MetadataRetryWrapper(updateMD)
|
||||||
|
@ -186,7 +161,7 @@ func resourceComputeProjectMetadataDelete(d *schema.ResourceData, meta interface
|
||||||
|
|
||||||
log.Printf("[DEBUG] SetCommonMetadata: %d (%s)", op.Id, op.SelfLink)
|
log.Printf("[DEBUG] SetCommonMetadata: %d (%s)", op.Id, op.SelfLink)
|
||||||
|
|
||||||
err = resourceOperationWaitGlobal(config, op, "SetCommonMetadata")
|
err = computeOperationWaitGlobal(config, op, "SetCommonMetadata")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package google
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/hashcode"
|
"github.com/hashicorp/terraform/helper/hashcode"
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
@ -171,27 +170,9 @@ func resourceComputeRouteCreate(d *schema.ResourceData, meta interface{}) error
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(route.Name)
|
d.SetId(route.Name)
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Creating Route")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for route to create: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return resourceComputeRouteRead(d, meta)
|
return resourceComputeRouteRead(d, meta)
|
||||||
|
@ -228,24 +209,9 @@ func resourceComputeRouteDelete(d *schema.ResourceData, meta interface{}) error
|
||||||
return fmt.Errorf("Error deleting route: %s", err)
|
return fmt.Errorf("Error deleting route: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the operation to complete
|
err = computeOperationWaitGlobal(config, op, "Deleting Route")
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitGlobal,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error waiting for route to delete: %s", err)
|
return err
|
||||||
}
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
"google.golang.org/api/compute/v1"
|
"google.golang.org/api/compute/v1"
|
||||||
|
@ -79,26 +78,6 @@ func convertStringArr(ifaceArr []interface{}) []string {
|
||||||
return arr
|
return arr
|
||||||
}
|
}
|
||||||
|
|
||||||
func waitOp(config *Config, op *compute.Operation,
|
|
||||||
resource string, action string) (*compute.Operation, error) {
|
|
||||||
|
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Region: config.Region,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitRegion,
|
|
||||||
}
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Error waiting for %s to %s: %s", resource, action, err)
|
|
||||||
}
|
|
||||||
return opRaw.(*compute.Operation), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Healthchecks need to exist before being referred to from the target pool.
|
// Healthchecks need to exist before being referred to from the target pool.
|
||||||
func convertHealthChecks(config *Config, names []string) ([]string, error) {
|
func convertHealthChecks(config *Config, names []string) ([]string, error) {
|
||||||
urls := make([]string, len(names))
|
urls := make([]string, len(names))
|
||||||
|
@ -171,16 +150,10 @@ func resourceComputeTargetPoolCreate(d *schema.ResourceData, meta interface{}) e
|
||||||
// It probably maybe worked, so store the ID now
|
// It probably maybe worked, so store the ID now
|
||||||
d.SetId(tpool.Name)
|
d.SetId(tpool.Name)
|
||||||
|
|
||||||
op, err = waitOp(config, op, "TargetPool", "create")
|
err = computeOperationWaitRegion(config, op, config.Region, "Creating Target Pool")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
// The resource didn't actually create
|
|
||||||
d.SetId("")
|
|
||||||
// Return the error
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return resourceComputeTargetPoolRead(d, meta)
|
return resourceComputeTargetPoolRead(d, meta)
|
||||||
}
|
}
|
||||||
|
@ -246,14 +219,11 @@ func resourceComputeTargetPoolUpdate(d *schema.ResourceData, meta interface{}) e
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error updating health_check: %s", err)
|
return fmt.Errorf("Error updating health_check: %s", err)
|
||||||
}
|
}
|
||||||
op, err = waitOp(config, op, "TargetPool", "removing HealthChecks")
|
|
||||||
|
err = computeOperationWaitRegion(config, op, config.Region, "Updating Target Pool")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
addReq := &compute.TargetPoolsAddHealthCheckRequest{
|
addReq := &compute.TargetPoolsAddHealthCheckRequest{
|
||||||
HealthChecks: make([]*compute.HealthCheckReference, len(add)),
|
HealthChecks: make([]*compute.HealthCheckReference, len(add)),
|
||||||
}
|
}
|
||||||
|
@ -265,14 +235,11 @@ func resourceComputeTargetPoolUpdate(d *schema.ResourceData, meta interface{}) e
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error updating health_check: %s", err)
|
return fmt.Errorf("Error updating health_check: %s", err)
|
||||||
}
|
}
|
||||||
op, err = waitOp(config, op, "TargetPool", "adding HealthChecks")
|
|
||||||
|
err = computeOperationWaitRegion(config, op, config.Region, "Updating Target Pool")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetPartial("health_checks")
|
d.SetPartial("health_checks")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -302,14 +269,11 @@ func resourceComputeTargetPoolUpdate(d *schema.ResourceData, meta interface{}) e
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error updating instances: %s", err)
|
return fmt.Errorf("Error updating instances: %s", err)
|
||||||
}
|
}
|
||||||
op, err = waitOp(config, op, "TargetPool", "adding instances")
|
|
||||||
|
err = computeOperationWaitRegion(config, op, config.Region, "Updating Target Pool")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
removeReq := &compute.TargetPoolsRemoveInstanceRequest{
|
removeReq := &compute.TargetPoolsRemoveInstanceRequest{
|
||||||
Instances: make([]*compute.InstanceReference, len(remove)),
|
Instances: make([]*compute.InstanceReference, len(remove)),
|
||||||
}
|
}
|
||||||
|
@ -321,14 +285,11 @@ func resourceComputeTargetPoolUpdate(d *schema.ResourceData, meta interface{}) e
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error updating instances: %s", err)
|
return fmt.Errorf("Error updating instances: %s", err)
|
||||||
}
|
}
|
||||||
op, err = waitOp(config, op, "TargetPool", "removing instances")
|
|
||||||
|
err = computeOperationWaitRegion(config, op, config.Region, "Updating Target Pool")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetPartial("instances")
|
d.SetPartial("instances")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -343,14 +304,10 @@ func resourceComputeTargetPoolUpdate(d *schema.ResourceData, meta interface{}) e
|
||||||
return fmt.Errorf("Error updating backup_pool: %s", err)
|
return fmt.Errorf("Error updating backup_pool: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
op, err = waitOp(config, op, "TargetPool", "updating backup_pool")
|
err = computeOperationWaitRegion(config, op, config.Region, "Updating Target Pool")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetPartial("backup_pool")
|
d.SetPartial("backup_pool")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -390,14 +347,10 @@ func resourceComputeTargetPoolDelete(d *schema.ResourceData, meta interface{}) e
|
||||||
return fmt.Errorf("Error deleting TargetPool: %s", err)
|
return fmt.Errorf("Error deleting TargetPool: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
op, err = waitOp(config, op, "TargetPool", "delete")
|
err = computeOperationWaitRegion(config, op, config.Region, "Deleting Target Pool")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
d.SetId("")
|
d.SetId("")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,7 @@ func resourceComputeVpnGatewayCreate(d *schema.ResourceData, meta interface{}) e
|
||||||
return fmt.Errorf("Error Inserting VPN Gateway %s into network %s: %s", name, network, err)
|
return fmt.Errorf("Error Inserting VPN Gateway %s into network %s: %s", name, network, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = resourceOperationWaitRegion(config, op, region, "Inserting VPN Gateway")
|
err = computeOperationWaitRegion(config, op, region, "Inserting VPN Gateway")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error Waiting to Insert VPN Gateway %s into network %s: %s", name, network, err)
|
return fmt.Errorf("Error Waiting to Insert VPN Gateway %s into network %s: %s", name, network, err)
|
||||||
}
|
}
|
||||||
|
@ -111,7 +111,7 @@ func resourceComputeVpnGatewayDelete(d *schema.ResourceData, meta interface{}) e
|
||||||
return fmt.Errorf("Error Reading VPN Gateway %s: %s", name, err)
|
return fmt.Errorf("Error Reading VPN Gateway %s: %s", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = resourceOperationWaitRegion(config, op, region, "Deleting VPN Gateway")
|
err = computeOperationWaitRegion(config, op, region, "Deleting VPN Gateway")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error Waiting to Delete VPN Gateway %s: %s", name, err)
|
return fmt.Errorf("Error Waiting to Delete VPN Gateway %s: %s", name, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package google
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/hashicorp/terraform/helper/schema"
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
|
||||||
|
@ -66,31 +65,6 @@ func resourceComputeVpnTunnel() *schema.Resource {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func resourceOperationWaitRegion(config *Config, op *compute.Operation, region, activity string) error {
|
|
||||||
w := &OperationWaiter{
|
|
||||||
Service: config.clientCompute,
|
|
||||||
Op: op,
|
|
||||||
Project: config.Project,
|
|
||||||
Type: OperationWaitRegion,
|
|
||||||
Region: region,
|
|
||||||
}
|
|
||||||
|
|
||||||
state := w.Conf()
|
|
||||||
state.Timeout = 2 * time.Minute
|
|
||||||
state.MinTimeout = 1 * time.Second
|
|
||||||
opRaw, err := state.WaitForState()
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Error waiting for %s: %s", activity, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
op = opRaw.(*compute.Operation)
|
|
||||||
if op.Error != nil {
|
|
||||||
return OperationError(*op.Error)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func resourceComputeVpnTunnelCreate(d *schema.ResourceData, meta interface{}) error {
|
func resourceComputeVpnTunnelCreate(d *schema.ResourceData, meta interface{}) error {
|
||||||
config := meta.(*Config)
|
config := meta.(*Config)
|
||||||
|
|
||||||
|
@ -125,7 +99,7 @@ func resourceComputeVpnTunnelCreate(d *schema.ResourceData, meta interface{}) er
|
||||||
return fmt.Errorf("Error Inserting VPN Tunnel %s : %s", name, err)
|
return fmt.Errorf("Error Inserting VPN Tunnel %s : %s", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = resourceOperationWaitRegion(config, op, region, "Inserting VPN Tunnel")
|
err = computeOperationWaitRegion(config, op, region, "Inserting VPN Tunnel")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error Waiting to Insert VPN Tunnel %s: %s", name, err)
|
return fmt.Errorf("Error Waiting to Insert VPN Tunnel %s: %s", name, err)
|
||||||
}
|
}
|
||||||
|
@ -169,7 +143,7 @@ func resourceComputeVpnTunnelDelete(d *schema.ResourceData, meta interface{}) er
|
||||||
return fmt.Errorf("Error Reading VPN Tunnel %s: %s", name, err)
|
return fmt.Errorf("Error Reading VPN Tunnel %s: %s", name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = resourceOperationWaitRegion(config, op, region, "Deleting VPN Tunnel")
|
err = computeOperationWaitRegion(config, op, region, "Deleting VPN Tunnel")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error Waiting to Delete VPN Tunnel %s: %s", name, err)
|
return fmt.Errorf("Error Waiting to Delete VPN Tunnel %s: %s", name, err)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue