Skip to content

Commit 6582f9f

Browse files
Add support for capacity aware modes to `google_compute_region_instance_group_manager (#4348) (#2894)
* add dpts to RIGM Co-authored-by: upodroid <[email protected]> * typo fix * add doc note Signed-off-by: Modular Magician <[email protected]>
1 parent 3f0f3fd commit 6582f9f

File tree

4 files changed

+38
-13
lines changed

4 files changed

+38
-13
lines changed

.changelog/4348.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added `distribution_policy_target_shape` field to `google_compute_region_instance_group_manager` resource
3+
```

google-beta/resource_compute_region_instance_group_manager.go

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,14 @@ func resourceComputeRegionInstanceGroupManager() *schema.Resource {
213213
},
214214
},
215215

216+
"distribution_policy_target_shape": {
217+
Type: schema.TypeString,
218+
Optional: true,
219+
ForceNew: true,
220+
Computed: true,
221+
Description: `The shape to which the group converges either proactively or on resize events (depending on the value set in updatePolicy.instanceRedistributionType).`,
222+
},
223+
216224
"update_policy": {
217225
Type: schema.TypeList,
218226
Computed: true,
@@ -345,7 +353,7 @@ func resourceComputeRegionInstanceGroupManagerCreate(d *schema.ResourceData, met
345353
AutoHealingPolicies: expandAutoHealingPolicies(d.Get("auto_healing_policies").([]interface{})),
346354
Versions: expandVersions(d.Get("version").([]interface{})),
347355
UpdatePolicy: expandRegionUpdatePolicy(d.Get("update_policy").([]interface{})),
348-
DistributionPolicy: expandDistributionPolicy(d.Get("distribution_policy_zones").(*schema.Set)),
356+
DistributionPolicy: expandDistributionPolicy(d),
349357
StatefulPolicy: expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List()),
350358
// Force send TargetSize to allow size of 0.
351359
ForceSendFields: []string{"TargetSize"},
@@ -466,6 +474,9 @@ func resourceComputeRegionInstanceGroupManagerRead(d *schema.ResourceData, meta
466474
if err := d.Set("distribution_policy_zones", flattenDistributionPolicy(manager.DistributionPolicy)); err != nil {
467475
return err
468476
}
477+
if err := d.Set("distribution_policy_target_shape", manager.DistributionPolicy.TargetShape); err != nil {
478+
return err
479+
}
469480
if err := d.Set("self_link", ConvertSelfLinkToV1(manager.SelfLink)); err != nil {
470481
return fmt.Errorf("Error setting self_link: %s", err)
471482
}
@@ -716,21 +727,24 @@ func flattenRegionUpdatePolicy(updatePolicy *computeBeta.InstanceGroupManagerUpd
716727
return results
717728
}
718729

719-
func expandDistributionPolicy(configured *schema.Set) *computeBeta.DistributionPolicy {
720-
if configured.Len() == 0 {
730+
func expandDistributionPolicy(d *schema.ResourceData) *computeBeta.DistributionPolicy {
731+
dpz := d.Get("distribution_policy_zones").(*schema.Set)
732+
dpts := d.Get("distribution_policy_target_shape").(string)
733+
if dpz.Len() == 0 && dpts == "" {
721734
return nil
722735
}
723736

724-
distributionPolicyZoneConfigs := make([]*computeBeta.DistributionPolicyZoneConfiguration, 0, configured.Len())
725-
for _, raw := range configured.List() {
737+
distributionPolicyZoneConfigs := make([]*computeBeta.DistributionPolicyZoneConfiguration, 0, dpz.Len())
738+
for _, raw := range dpz.List() {
726739
data := raw.(string)
727740
distributionPolicyZoneConfig := computeBeta.DistributionPolicyZoneConfiguration{
728741
Zone: "zones/" + data,
729742
}
730743

731744
distributionPolicyZoneConfigs = append(distributionPolicyZoneConfigs, &distributionPolicyZoneConfig)
732745
}
733-
return &computeBeta.DistributionPolicy{Zones: distributionPolicyZoneConfigs}
746+
747+
return &computeBeta.DistributionPolicy{Zones: distributionPolicyZoneConfigs, TargetShape: dpts}
734748
}
735749

736750
func flattenDistributionPolicy(distributionPolicy *computeBeta.DistributionPolicy) []string {

google-beta/resource_compute_region_instance_group_manager_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1057,10 +1057,11 @@ resource "google_compute_region_instance_group_manager" "igm-basic" {
10571057
name = "primary"
10581058
}
10591059
1060-
base_instance_name = "igm-basic"
1061-
region = "us-central1"
1062-
target_size = 2
1063-
distribution_policy_zones = ["%s"]
1060+
base_instance_name = "igm-basic"
1061+
region = "us-central1"
1062+
target_size = 2
1063+
distribution_policy_zones = ["%s"]
1064+
distribution_policy_target_shape = "ANY"
10641065
}
10651066
`, template, igm, strings.Join(zones, "\",\""))
10661067
}

website/docs/r/compute_region_instance_group_manager.html.markdown

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,15 @@ description: |-
1111

1212
The Google Compute Engine Regional Instance Group Manager API creates and manages pools
1313
of homogeneous Compute Engine virtual machine instances from a common instance
14-
template. For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/distributing-instances-with-regional-instance-groups)
15-
and [API](https://cloud.google.com/compute/docs/reference/latest/regionInstanceGroupManagers)
14+
template.
1615

17-
~> **Note:** Use [google_compute_instance_group_manager](/docs/providers/google/r/compute_instance_group_manager.html) to create a single-zone instance group manager.
16+
To get more information about regionInstanceGroupManagers, see:
17+
18+
* [API documentation](https://cloud.google.com/compute/docs/reference/latest/regionInstanceGroupManagers)
19+
* How-to Guides
20+
* [Regional Instance Groups Guide](https://cloud.google.com/compute/docs/instance-groups/distributing-instances-with-regional-instance-groups)
21+
22+
~> **Note:** Use [google_compute_instance_group_manager](/docs/providers/google/r/compute_instance_group_manager.html) to create a zonal instance group manager.
1823

1924
## Example Usage with top level instance template (`google` provider)
2025

@@ -138,6 +143,8 @@ group. You can specify only one value. Structure is documented below. For more i
138143
* `distribution_policy_zones` - (Optional) The distribution policy for this managed instance
139144
group. You can specify one or more values. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/distributing-instances-with-regional-instance-groups#selectingzones).
140145

146+
* `distribution_policy_target_shape` - (Optional) The shape to which the group converges either proactively or on resize events (depending on the value set in update_policy.0.instance_redistribution_type). For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/regional-mig-distribution-shape).
147+
141148
* `stateful_disk` - (Optional) Disks created on the instances that will be preserved on instance delete, update, etc. Structure is documented below. For more information see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/configuring-stateful-disks-in-migs). Proactive cross zone instance redistribution must be disabled before you can update stateful disks on existing instance group managers. This can be controlled via the `update_policy`.
142149

143150
- - -

0 commit comments

Comments
 (0)