Skip to content

Commit

Permalink
properly support timeouts in IGM and RIGM
Browse files Browse the repository at this point in the history
  • Loading branch information
danawillow committed Jul 2, 2019
1 parent a05ae55 commit 42008b3
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ func resourceComputeInstanceGroupManager() *schema.Resource {
Importer: &schema.ResourceImporter{
State: resourceInstanceGroupManagerStateImporter,
},
Timeouts: &schema.ResourceTimeout{
Create: schema.DefaultTimeout(5 * time.Minute),
Update: schema.DefaultTimeout(5 * time.Minute),
Delete: schema.DefaultTimeout(15 * time.Minute),
},

Schema: map[string]*schema.Schema{
"base_instance_name": &schema.Schema{
Expand Down Expand Up @@ -394,7 +399,8 @@ func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta inte
d.SetId(id)

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Creating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Creating InstanceGroupManager")
if err != nil {
return err
}
Expand Down Expand Up @@ -553,7 +559,7 @@ func resourceComputeInstanceGroupManagerRead(d *schema.ResourceData, meta interf
// Updates an instance group manager by applying the update strategy (REPLACE, RESTART)
// and rolling update policy (PROACTIVE, OPPORTUNISTIC). Updates performed by API
// are OPPORTUNISTIC by default.
func performZoneUpdate(config *Config, id string, updateStrategy string, project string, zone string) error {
func performZoneUpdate(d *schema.ResourceData, config *Config, id string, updateStrategy string, project string, zone string) error {
if updateStrategy == "RESTART" || updateStrategy == "REPLACE" {
managedInstances, err := config.clientComputeBeta.InstanceGroupManagers.ListManagedInstances(project, zone, id).Do()
if err != nil {
Expand All @@ -576,7 +582,8 @@ func performZoneUpdate(config *Config, id string, updateStrategy string, project
}

// Wait for the operation to complete
err = computeSharedOperationWaitTime(config.clientCompute, op, project, managedInstanceCount*4, "Restarting InstanceGroupManagers instances")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Restarting InstanceGroupManagers instances")
if err != nil {
return err
}
Expand Down Expand Up @@ -620,7 +627,8 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
}

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating InstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -646,7 +654,8 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
}

// Wait for the operation to complete:
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating InstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -664,7 +673,8 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
}

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating InstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -686,13 +696,14 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
}

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating InstanceGroupManager")
if err != nil {
return err
}

updateStrategy := d.Get("update_strategy").(string)
err = performZoneUpdate(config, name, updateStrategy, project, zone)
err = performZoneUpdate(d, config, name, updateStrategy, project, zone)
if err != nil {
return err
}
Expand Down Expand Up @@ -749,7 +760,8 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
return fmt.Errorf("Error updating managed group instances: %s", err)
}

err = computeSharedOperationWait(config.clientCompute, op, project, "Updating managed group instances")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating managed group instances")
if err != nil {
return err
}
Expand All @@ -774,7 +786,8 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
}

// Wait for the operation to complete:
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating InstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -791,7 +804,8 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
}

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating InstanceGroupManager")
if err != nil {
return err
}
Expand Down Expand Up @@ -830,7 +844,8 @@ func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta inte
currentSize := int64(d.Get("target_size").(int))

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Deleting InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutDelete).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Deleting InstanceGroupManager")

for err != nil && currentSize > 0 {
if !strings.Contains(err.Error(), "timeout") {
Expand All @@ -851,7 +866,8 @@ func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta inte

log.Printf("[INFO] timeout occurred, but instance group is shrinking (%d < %d)", instanceGroupSize, currentSize)
currentSize = instanceGroupSize
err = computeSharedOperationWait(config.clientCompute, op, project, "Deleting InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutDelete).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Deleting InstanceGroupManager")
}

d.SetId("")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,8 @@ func resourceComputeRegionInstanceGroupManagerCreate(d *schema.ResourceData, met
d.SetId(regionInstanceGroupManagerId{Project: project, Region: region, Name: manager.Name}.terraformId())

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Creating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutCreate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Creating InstanceGroupManager")
if err != nil {
return err
}
Expand Down Expand Up @@ -539,7 +540,8 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
}

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating RegionInstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating RegionInstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -561,7 +563,8 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
}

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating InstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating InstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -585,7 +588,8 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
}

// Wait for the operation to complete:
err = computeSharedOperationWait(config.clientCompute, op, project, "Updating RegionInstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating RegionInstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -603,7 +607,8 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
}

// Wait for the operation to complete
err = computeSharedOperationWait(config.clientCompute, op, project, "Resizing RegionInstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Resizing RegionInstanceGroupManager")
if err != nil {
return err
}
Expand Down Expand Up @@ -661,7 +666,8 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
return fmt.Errorf("Error updating region managed group instances: %s", err)
}

err = computeSharedOperationWait(config.clientCompute, op, project, "Updating region managed group instances")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating region managed group instances")
if err != nil {
return err
}
Expand All @@ -682,7 +688,8 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
return fmt.Errorf("Error updating RegionInstanceGroupManager: %s", err)
}

err = computeSharedOperationWait(config.clientCompute, op, project, "Updating RegionInstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Updating RegionInstanceGroupManager")
if err != nil {
return err
}
Expand All @@ -698,7 +705,8 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
return fmt.Errorf("Error resizing RegionInstanceGroupManager: %s", err)
}

err = computeSharedOperationWait(config.clientCompute, op, project, "Resizing RegionInstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutUpdate).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, project, timeoutInMinutes, "Resizing RegionInstanceGroupManager")
if err != nil {
return err
}
Expand Down Expand Up @@ -737,7 +745,8 @@ func resourceComputeRegionInstanceGroupManagerDelete(d *schema.ResourceData, met
}

// Wait for the operation to complete
err = computeSharedOperationWaitTime(config.clientCompute, op, regionalID.Project, int(d.Timeout(schema.TimeoutDelete).Minutes()), "Deleting RegionInstanceGroupManager")
timeoutInMinutes := int(d.Timeout(schema.TimeoutDelete).Minutes())
err = computeSharedOperationWaitTime(config.clientCompute, op, regionalID.Project, timeoutInMinutes, "Deleting RegionInstanceGroupManager")
if err != nil {
return fmt.Errorf("Error waiting for delete to complete: %s", err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,16 @@ exported:
* `self_link` - The URL of the created resource.


## Timeouts

This resource provides the following
[Timeouts](/docs/configuration/resources.html#timeouts) configuration options:

- `create` - Default is 5 minutes.
- `update` - Default is 5 minutes.
- `delete` - Default is 15 minutes.


## Import

Instance group managers can be imported using any of these accepted formats:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,16 @@ exported:
* `self_link` - The URL of the created resource.


## Timeouts

This resource provides the following
[Timeouts](/docs/configuration/resources.html#timeouts) configuration options:

- `create` - Default is 5 minutes.
- `update` - Default is 5 minutes.
- `delete` - Default is 15 minutes.


## Import

Instance group managers can be imported using the `name`, e.g.
Expand Down

0 comments on commit 42008b3

Please sign in to comment.