Skip to content

Commit 96688c6

Browse files
wait for instance status only after create/update (#5057) (#3531)
Signed-off-by: Modular Magician <[email protected]>
1 parent 617e954 commit 96688c6

6 files changed

+102
-36
lines changed

.changelog/5057.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
compute: changed `wait_for_instances` in `google_compute_instance_group_manager` and `google_compute_region_instance_group_manager` to no longer block plan / refresh, waiting on managed instance statuses during apply instead
3+
```

google-beta/resource_compute_instance_group_manager.go

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ func resourceComputeInstanceGroupManager() *schema.Resource {
2424
State: resourceInstanceGroupManagerStateImporter,
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

@@ -458,6 +458,13 @@ func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta inte
458458
return err
459459
}
460460

461+
if d.Get("wait_for_instances").(bool) {
462+
err := computeIGMWaitForInstanceStatus(d, meta)
463+
if err != nil {
464+
return err
465+
}
466+
}
467+
461468
return resourceComputeInstanceGroupManagerRead(d, meta)
462469
}
463470

@@ -624,30 +631,24 @@ func resourceComputeInstanceGroupManagerRead(d *schema.ResourceData, meta interf
624631

625632
// If unset in state set to default value
626633
if d.Get("wait_for_instances_status").(string) == "" {
627-
if err = d.Set("wait_for_instances_status", "STABLE"); err != nil {
634+
if err := d.Set("wait_for_instances_status", "STABLE"); err != nil {
628635
return fmt.Errorf("Error setting wait_for_instances_status in state: %s", err.Error())
629636
}
630637
}
631638

639+
return nil
640+
}
641+
642+
func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
643+
config := meta.(*Config)
644+
632645
if d.Get("wait_for_instances").(bool) {
633-
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
634-
conf := resource.StateChangeConf{
635-
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
636-
Target: []string{"created"},
637-
Refresh: waitForInstancesRefreshFunc(getManager, waitForUpdates, d, meta),
638-
Timeout: d.Timeout(schema.TimeoutCreate),
639-
}
640-
_, err := conf.WaitForState()
646+
err := computeIGMWaitForInstanceStatus(d, meta)
641647
if err != nil {
642648
return err
643649
}
644650
}
645651

646-
return nil
647-
}
648-
649-
func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
650-
config := meta.(*Config)
651652
userAgent, err := generateUserAgentString(d, config.userAgent)
652653
if err != nil {
653654
return err
@@ -754,11 +755,26 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte
754755

755756
d.Partial(false)
756757

758+
if d.Get("wait_for_instances").(bool) {
759+
err := computeIGMWaitForInstanceStatus(d, meta)
760+
if err != nil {
761+
return err
762+
}
763+
}
764+
757765
return resourceComputeInstanceGroupManagerRead(d, meta)
758766
}
759767

760768
func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta interface{}) error {
761769
config := meta.(*Config)
770+
771+
if d.Get("wait_for_instances").(bool) {
772+
err := computeIGMWaitForInstanceStatus(d, meta)
773+
if err != nil {
774+
return err
775+
}
776+
}
777+
762778
userAgent, err := generateUserAgentString(d, config.userAgent)
763779
if err != nil {
764780
return err
@@ -815,6 +831,21 @@ func resourceComputeInstanceGroupManagerDelete(d *schema.ResourceData, meta inte
815831
return nil
816832
}
817833

834+
func computeIGMWaitForInstanceStatus(d *schema.ResourceData, meta interface{}) error {
835+
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
836+
conf := resource.StateChangeConf{
837+
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
838+
Target: []string{"created"},
839+
Refresh: waitForInstancesRefreshFunc(getManager, waitForUpdates, d, meta),
840+
Timeout: d.Timeout(schema.TimeoutCreate),
841+
}
842+
_, err := conf.WaitForState()
843+
if err != nil {
844+
return err
845+
}
846+
return nil
847+
}
848+
818849
func expandAutoHealingPolicies(configured []interface{}) []*computeBeta.InstanceGroupManagerAutoHealingPolicy {
819850
autoHealingPolicies := make([]*computeBeta.InstanceGroupManagerAutoHealingPolicy, 0, len(configured))
820851
for _, raw := range configured {

google-beta/resource_compute_region_instance_group_manager.go

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

@@ -440,9 +440,32 @@ func resourceComputeRegionInstanceGroupManagerCreate(d *schema.ResourceData, met
440440
if err != nil {
441441
return err
442442
}
443+
444+
if d.Get("wait_for_instances").(bool) {
445+
err := computeRIGMWaitForInstanceStatus(d, meta)
446+
if err != nil {
447+
return err
448+
}
449+
}
450+
443451
return resourceComputeRegionInstanceGroupManagerRead(d, config)
444452
}
445453

454+
func computeRIGMWaitForInstanceStatus(d *schema.ResourceData, meta interface{}) error {
455+
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
456+
conf := resource.StateChangeConf{
457+
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
458+
Target: []string{"created"},
459+
Refresh: waitForInstancesRefreshFunc(getRegionalManager, waitForUpdates, d, meta),
460+
Timeout: d.Timeout(schema.TimeoutCreate),
461+
}
462+
_, err := conf.WaitForState()
463+
if err != nil {
464+
return err
465+
}
466+
return nil
467+
}
468+
446469
type getInstanceManagerFunc func(*schema.ResourceData, interface{}) (*computeBeta.InstanceGroupManager, error)
447470

448471
func getRegionalManager(d *schema.ResourceData, meta interface{}) (*computeBeta.InstanceGroupManager, error) {
@@ -579,25 +602,19 @@ func resourceComputeRegionInstanceGroupManagerRead(d *schema.ResourceData, meta
579602
}
580603
}
581604

605+
return nil
606+
}
607+
608+
func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
609+
config := meta.(*Config)
610+
582611
if d.Get("wait_for_instances").(bool) {
583-
waitForUpdates := d.Get("wait_for_instances_status").(string) == "UPDATED"
584-
conf := resource.StateChangeConf{
585-
Pending: []string{"creating", "error", "updating per instance configs", "reaching version target"},
586-
Target: []string{"created"},
587-
Refresh: waitForInstancesRefreshFunc(getRegionalManager, waitForUpdates, d, meta),
588-
Timeout: d.Timeout(schema.TimeoutCreate),
589-
}
590-
_, err := conf.WaitForState()
612+
err := computeRIGMWaitForInstanceStatus(d, meta)
591613
if err != nil {
592614
return err
593615
}
594616
}
595617

596-
return nil
597-
}
598-
599-
func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, meta interface{}) error {
600-
config := meta.(*Config)
601618
userAgent, err := generateUserAgentString(d, config.userAgent)
602619
if err != nil {
603620
return err
@@ -698,11 +715,26 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met
698715

699716
d.Partial(false)
700717

718+
if d.Get("wait_for_instances").(bool) {
719+
err := computeRIGMWaitForInstanceStatus(d, meta)
720+
if err != nil {
721+
return err
722+
}
723+
}
724+
701725
return resourceComputeRegionInstanceGroupManagerRead(d, meta)
702726
}
703727

704728
func resourceComputeRegionInstanceGroupManagerDelete(d *schema.ResourceData, meta interface{}) error {
705729
config := meta.(*Config)
730+
731+
if d.Get("wait_for_instances").(bool) {
732+
err := computeRIGMWaitForInstanceStatus(d, meta)
733+
if err != nil {
734+
return err
735+
}
736+
}
737+
706738
userAgent, err := generateUserAgentString(d, config.userAgent)
707739
if err != nil {
708740
return err

google-beta/resource_gke_hub_feature_membership_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55
"fmt"
66
"testing"
77

8-
dcl "github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl"
8+
"github.com/GoogleCloudPlatform/declarative-resource-client-library/dcl"
99
gkehub "github.com/GoogleCloudPlatform/declarative-resource-client-library/services/google/gkehub/beta"
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1111
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"

website/docs/r/compute_instance_group_manager.html.markdown

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

283-
- `create` - Default is 5 minutes.
284-
- `update` - Default is 5 minutes.
283+
- `create` - Default is 15 minutes.
284+
- `update` - Default is 15 minutes.
285285
- `delete` - Default is 15 minutes.
286286

287287

website/docs/r/compute_region_instance_group_manager.html.markdown

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

291-
- `create` - Default is 5 minutes.
292-
- `update` - Default is 5 minutes.
291+
- `create` - Default is 15 minutes.
292+
- `update` - Default is 15 minutes.
293293
- `delete` - Default is 15 minutes.
294294

295295

0 commit comments

Comments
 (0)