Skip to content

Commit e5acfcc

Browse files
ScottSuarezkhajduczenia
authored andcommitted
wait for instance status only after create/update (GoogleCloudPlatform#5057)
1 parent 7da8912 commit e5acfcc

File tree

4 files changed

+98
-35
lines changed

4 files changed

+98
-35
lines changed

mmv1/third_party/terraform/resources/resource_compute_instance_group_manager.go.erb

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ func resourceComputeInstanceGroupManager() *schema.Resource {
2525
State: resourceInstanceGroupManagerStateImporter,
2626
},
2727
Timeouts: &schema.ResourceTimeout{
28-
Create: schema.DefaultTimeout(5 * time.Minute),
29-
Update: schema.DefaultTimeout(5 * time.Minute),
28+
Create: schema.DefaultTimeout(15 * time.Minute),
29+
Update: schema.DefaultTimeout(15 * time.Minute),
3030
Delete: schema.DefaultTimeout(15 * time.Minute),
3131
},
3232

@@ -471,6 +471,13 @@ func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta inte
471471
return err
472472
}
473473

474+
if d.Get("wait_for_instances").(bool) {
475+
err := computeIGMWaitForInstanceStatus(d, meta)
476+
if err != nil {
477+
return err
478+
}
479+
}
480+
474481
return resourceComputeInstanceGroupManagerRead(d, meta)
475482
}
476483

@@ -637,30 +644,24 @@ func resourceComputeInstanceGroupManagerRead(d *schema.ResourceData, meta interf
637644

638645
// If unset in state set to default value
639646
if d.Get("wait_for_instances_status").(string) == "" {
640-
if err = d.Set("wait_for_instances_status", "STABLE"); err != nil {
647+
if err := d.Set("wait_for_instances_status", "STABLE"); err != nil {
641648
return fmt.Errorf("Error setting wait_for_instances_status in state: %s", err.Error())
642649
}
643650
}
644651

652+
return nil
653+
}
654+
655+
func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
656+
config := meta.(*Config)
657+
645658
if d.Get("wait_for_instances").(bool) {
646-
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
647-
conf := resource.StateChangeConf{
648-
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
649-
Target: []string{"created"},
650-
Refresh: waitForInstancesRefreshFunc(getManager, waitForUpdates, d, meta),
651-
Timeout: d.Timeout(schema.TimeoutCreate),
652-
}
653-
_, err := conf.WaitForState()
659+
err := computeIGMWaitForInstanceStatus(d, meta)
654660
if err != nil {
655661
return err
656662
}
657663
}
658664

659-
return nil
660-
}
661-
662-
func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
663-
config := meta.(*Config)
664665
userAgent, err := generateUserAgentString(d, config.userAgent)
665666
if err != nil {
666667
return err
@@ -767,11 +768,26 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
767768

768769
d.Partial(false)
769770

771+
if d.Get("wait_for_instances").(bool) {
772+
err := computeIGMWaitForInstanceStatus(d, meta)
773+
if err != nil {
774+
return err
775+
}
776+
}
777+
770778
return resourceComputeInstanceGroupManagerRead(d, meta)
771779
}
772780

773781
func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta interface{}) error {
774782
config := meta.(*Config)
783+
784+
if d.Get("wait_for_instances").(bool) {
785+
err := computeIGMWaitForInstanceStatus(d, meta)
786+
if err != nil {
787+
return err
788+
}
789+
}
790+
775791
userAgent, err := generateUserAgentString(d, config.userAgent)
776792
if err != nil {
777793
return err
@@ -828,6 +844,21 @@ func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta inte
828844
return nil
829845
}
830846

847+
func computeIGMWaitForInstanceStatus(d *schema.ResourceData, meta interface{}) error {
848+
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
849+
conf := resource.StateChangeConf{
850+
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
851+
Target: []string{"created"},
852+
Refresh: waitForInstancesRefreshFunc(getManager, waitForUpdates, d, meta),
853+
Timeout: d.Timeout(schema.TimeoutCreate),
854+
}
855+
_, err := conf.WaitForState()
856+
if err != nil {
857+
return err
858+
}
859+
return nil
860+
}
861+
831862
func expandAutoHealingPolicies(configured []interface{}) []*computeBeta.InstanceGroupManagerAutoHealingPolicy {
832863
autoHealingPolicies := make([]*computeBeta.InstanceGroupManagerAutoHealingPolicy, 0, len(configured))
833864
for _, raw := range configured {

mmv1/third_party/terraform/resources/resource_compute_region_instance_group_manager.go.erb

Lines changed: 47 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ func resourceComputeRegionInstanceGroupManager() *schema.Resource {
2424
State: resourceRegionInstanceGroupManagerStateImporter,
2525
},
2626
Timeouts: &schema.ResourceTimeout{
27-
Create: schema.DefaultTimeout(5 * time.Minute),
28-
Update: schema.DefaultTimeout(5 * time.Minute),
27+
Create: schema.DefaultTimeout(15 * time.Minute),
28+
Update: schema.DefaultTimeout(15 * time.Minute),
2929
Delete: schema.DefaultTimeout(15 * time.Minute),
3030
},
3131

@@ -453,9 +453,32 @@ func resourceComputeRegionInstanceGroupManagerCreate(d *schema.ResourceData, met
453453
if err != nil {
454454
return err
455455
}
456+
457+
if d.Get("wait_for_instances").(bool) {
458+
err := computeRIGMWaitForInstanceStatus(d, meta)
459+
if err != nil {
460+
return err
461+
}
462+
}
463+
456464
return resourceComputeRegionInstanceGroupManagerRead(d, config)
457465
}
458466

467+
func computeRIGMWaitForInstanceStatus(d *schema.ResourceData, meta interface{}) error {
468+
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
469+
conf := resource.StateChangeConf{
470+
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
471+
Target: []string{"created"},
472+
Refresh: waitForInstancesRefreshFunc(getRegionalManager, waitForUpdates, d, meta),
473+
Timeout: d.Timeout(schema.TimeoutCreate),
474+
}
475+
_, err := conf.WaitForState()
476+
if err != nil {
477+
return err
478+
}
479+
return nil
480+
}
481+
459482
type getInstanceManagerFunc func(*schema.ResourceData, interface{}) (*computeBeta.InstanceGroupManager, error)
460483

461484
func getRegionalManager(d *schema.ResourceData, meta interface{}) (*computeBeta.InstanceGroupManager, error) {
@@ -592,25 +615,19 @@ func resourceComputeRegionInstanceGroupManagerRead(d *schema.ResourceData, meta
592615
}
593616
}
594617

618+
return nil
619+
}
620+
621+
func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
622+
config := meta.(*Config)
623+
595624
if d.Get("wait_for_instances").(bool) {
596-
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
597-
conf := resource.StateChangeConf{
598-
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
599-
Target: []string{"created"},
600-
Refresh: waitForInstancesRefreshFunc(getRegionalManager, waitForUpdates, d, meta),
601-
Timeout: d.Timeout(schema.TimeoutCreate),
602-
}
603-
_, err := conf.WaitForState()
625+
err := computeRIGMWaitForInstanceStatus(d, meta)
604626
if err != nil {
605627
return err
606628
}
607629
}
608630

609-
return nil
610-
}
611-
612-
func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
613-
config := meta.(*Config)
614631
userAgent, err := generateUserAgentString(d, config.userAgent)
615632
if err != nil {
616633
return err
@@ -711,11 +728,26 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
711728

712729
d.Partial(false)
713730

731+
if d.Get("wait_for_instances").(bool) {
732+
err := computeRIGMWaitForInstanceStatus(d, meta)
733+
if err != nil {
734+
return err
735+
}
736+
}
737+
714738
return resourceComputeRegionInstanceGroupManagerRead(d, meta)
715739
}
716740

717741
func resourceComputeRegionInstanceGroupManagerDelete(d *schema.ResourceData, meta interface{}) error {
718742
config := meta.(*Config)
743+
744+
if d.Get("wait_for_instances").(bool) {
745+
err := computeRIGMWaitForInstanceStatus(d, meta)
746+
if err != nil {
747+
return err
748+
}
749+
}
750+
719751
userAgent, err := generateUserAgentString(d, config.userAgent)
720752
if err != nil {
721753
return err

mmv1/third_party/terraform/website/docs/r/compute_instance_group_manager.html.markdown

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,8 @@ The `per_instance_configs` block holds:
285285
This resource provides the following
286286
[Timeouts](/docs/configuration/resources.html#timeouts) configuration options:
287287

288-
- `create` - Default is 5 minutes.
289-
- `update` - Default is 5 minutes.
288+
- `create` - Default is 15 minutes.
289+
- `update` - Default is 15 minutes.
290290
- `delete` - Default is 15 minutes.
291291

292292

mmv1/third_party/terraform/website/docs/r/compute_region_instance_group_manager.html.markdown

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -293,8 +293,8 @@ The `per_instance_configs` block holds:
293293
This resource provides the following
294294
[Timeouts](/docs/configuration/resources.html#timeouts) configuration options:
295295

296-
- `create` - Default is 5 minutes.
297-
- `update` - Default is 5 minutes.
296+
- `create` - Default is 15 minutes.
297+
- `update` - Default is 15 minutes.
298298
- `delete` - Default is 15 minutes.
299299

300300

0 commit comments

Comments
 (0)