From de42fff7245d2368d1ddae0d6b12a7c53eac5f8b Mon Sep 17 00:00:00 2001 From: Modular Magician Date: Fri, 18 Nov 2022 17:47:43 +0000 Subject: [PATCH] compute: Add support for IGM/RIGM list_managed_instances_results field. (#6787) Signed-off-by: Modular Magician --- .changelog/6787.txt | 3 ++ ...resource_compute_instance_group_manager.go | 37 +++++++++++++----- ...rce_compute_instance_group_manager_test.go | 23 ++++++----- ...e_compute_region_instance_group_manager.go | 39 +++++++++++++------ ...pute_region_instance_group_manager_test.go | 27 +++++++------ ...mpute_instance_group_manager.html.markdown | 9 ++++- ...egion_instance_group_manager.html.markdown | 9 ++++- 7 files changed, 102 insertions(+), 45 deletions(-) create mode 100644 .changelog/6787.txt diff --git a/.changelog/6787.txt b/.changelog/6787.txt new file mode 100644 index 00000000000..bd735e4b0c1 --- /dev/null +++ b/.changelog/6787.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +compute: added field `list_managed_instances_results` to `google_compute_instance_group_manager` and `google_compute_region_instance_group_manager` +``` diff --git a/google/resource_compute_instance_group_manager.go b/google/resource_compute_instance_group_manager.go index c6dbbe7ae92..8b54b5895a6 100644 --- a/google/resource_compute_instance_group_manager.go +++ b/google/resource_compute_instance_group_manager.go @@ -165,6 +165,14 @@ func resourceComputeInstanceGroupManager() *schema.Resource { Description: `The target number of running instances for this managed instance group. This value should always be explicitly set unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.`, }, + "list_managed_instances_results": { + Type: schema.TypeString, + Optional: true, + Default: "PAGELESS", + ValidateFunc: validation.StringInSlice([]string{"PAGELESS", "PAGINATED"}, false), + Description: `Pagination behavior of the listManagedInstances API method for this managed instance group. Valid values are: "PAGELESS", "PAGINATED". If PAGELESS (default), Pagination is disabled for the group's listManagedInstances API method. maxResults and pageToken query parameters are ignored and all instances are returned in a single response. If PAGINATED, pagination is enabled, maxResults and pageToken query parameters are respected.`, + }, + "auto_healing_policies": { Type: schema.TypeList, Optional: true, @@ -407,16 +415,17 @@ func resourceComputeInstanceGroupManagerCreate(d *schema.ResourceData, meta inte // Build the parameter manager := &compute.InstanceGroupManager{ - Name: d.Get("name").(string), - Description: d.Get("description").(string), - BaseInstanceName: d.Get("base_instance_name").(string), - TargetSize: int64(d.Get("target_size").(int)), - NamedPorts: getNamedPortsBeta(d.Get("named_port").(*schema.Set).List()), - TargetPools: convertStringSet(d.Get("target_pools").(*schema.Set)), - AutoHealingPolicies: expandAutoHealingPolicies(d.Get("auto_healing_policies").([]interface{})), - Versions: expandVersions(d.Get("version").([]interface{})), - UpdatePolicy: expandUpdatePolicy(d.Get("update_policy").([]interface{})), - StatefulPolicy: expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List()), + Name: d.Get("name").(string), + Description: d.Get("description").(string), + BaseInstanceName: d.Get("base_instance_name").(string), + TargetSize: int64(d.Get("target_size").(int)), + ListManagedInstancesResults: d.Get("list_managed_instances_results").(string), + NamedPorts: getNamedPortsBeta(d.Get("named_port").(*schema.Set).List()), + TargetPools: convertStringSet(d.Get("target_pools").(*schema.Set)), + AutoHealingPolicies: expandAutoHealingPolicies(d.Get("auto_healing_policies").([]interface{})), + Versions: expandVersions(d.Get("version").([]interface{})), + UpdatePolicy: expandUpdatePolicy(d.Get("update_policy").([]interface{})), + StatefulPolicy: expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List()), // Force send TargetSize to allow a value of 0. ForceSendFields: []string{"TargetSize"}, } @@ -595,6 +604,9 @@ func resourceComputeInstanceGroupManagerRead(d *schema.ResourceData, meta interf if err := d.Set("target_size", manager.TargetSize); err != nil { return fmt.Errorf("Error setting target_size: %s", err) } + if err := d.Set("list_managed_instances_results", manager.ListManagedInstancesResults); err != nil { + return fmt.Errorf("Error setting list_managed_instances_results: %s", err) + } if err = d.Set("target_pools", mapStringArr(manager.TargetPools, ConvertSelfLinkToV1)); err != nil { return fmt.Errorf("Error setting target_pools in state: %s", err.Error()) } @@ -693,6 +705,11 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte change = true } + if d.HasChange("list_managed_instances_results") { + updatedManager.ListManagedInstancesResults = d.Get("list_managed_instances_results").(string) + change = true + } + if change { op, err := config.NewComputeClient(userAgent).InstanceGroupManagers.Patch(project, zone, d.Get("name").(string), updatedManager).Do() if err != nil { diff --git a/google/resource_compute_instance_group_manager_test.go b/google/resource_compute_instance_group_manager_test.go index fc9851d9634..78c92d79043 100644 --- a/google/resource_compute_instance_group_manager_test.go +++ b/google/resource_compute_instance_group_manager_test.go @@ -492,10 +492,11 @@ resource "google_compute_instance_group_manager" "igm-basic" { instance_template = google_compute_instance_template.igm-basic.self_link } - target_pools = [google_compute_target_pool.igm-basic.self_link] - base_instance_name = "tf-test-igm-basic" - zone = "us-central1-c" - target_size = 2 + target_pools = [google_compute_target_pool.igm-basic.self_link] + base_instance_name = "tf-test-igm-basic" + zone = "us-central1-c" + target_size = 2 + list_managed_instances_results = "PAGINATED" } resource "google_compute_instance_group_manager" "igm-no-tp" { @@ -687,9 +688,10 @@ resource "google_compute_instance_group_manager" "igm-update" { google_compute_target_pool.igm-update.self_link, google_compute_target_pool.igm-update2.self_link, ] - base_instance_name = "tf-test-igm-update" - zone = "us-central1-c" - target_size = 3 + base_instance_name = "tf-test-igm-update" + zone = "us-central1-c" + target_size = 3 + list_managed_instances_results = "PAGINATED" named_port { name = "customhttp" port = 8080 @@ -774,9 +776,10 @@ resource "google_compute_instance_group_manager" "igm-update" { instance_template = google_compute_instance_template.igm-update2.self_link } - base_instance_name = "tf-test-igm-update" - zone = "us-central1-c" - target_size = 3 + base_instance_name = "tf-test-igm-update" + zone = "us-central1-c" + target_size = 3 + list_managed_instances_results = "PAGINATED" named_port { name = "customhttp" port = 8080 diff --git a/google/resource_compute_region_instance_group_manager.go b/google/resource_compute_region_instance_group_manager.go index f8632158fc7..fd27f03eff7 100644 --- a/google/resource_compute_region_instance_group_manager.go +++ b/google/resource_compute_region_instance_group_manager.go @@ -166,6 +166,14 @@ func resourceComputeRegionInstanceGroupManager() *schema.Resource { Description: `The target number of running instances for this managed instance group. This value should always be explicitly set unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to 0.`, }, + "list_managed_instances_results": { + Type: schema.TypeString, + Optional: true, + Default: "PAGELESS", + ValidateFunc: validation.StringInSlice([]string{"PAGELESS", "PAGINATED"}, false), + Description: `Pagination behavior of the listManagedInstances API method for this managed instance group. Valid values are: "PAGELESS", "PAGINATED". If PAGELESS (default), Pagination is disabled for the group's listManagedInstances API method. maxResults and pageToken query parameters are ignored and all instances are returned in a single response. If PAGINATED, pagination is enabled, maxResults and pageToken query parameters are respected.`, + }, + // If true, the resource will report ready only after no instances are being created. // This will not block future reads if instances are being recreated, and it respects // the "createNoRetry" parameter that's available for this resource. @@ -409,17 +417,18 @@ func resourceComputeRegionInstanceGroupManagerCreate(d *schema.ResourceData, met } manager := &compute.InstanceGroupManager{ - Name: d.Get("name").(string), - Description: d.Get("description").(string), - BaseInstanceName: d.Get("base_instance_name").(string), - TargetSize: int64(d.Get("target_size").(int)), - NamedPorts: getNamedPortsBeta(d.Get("named_port").(*schema.Set).List()), - TargetPools: convertStringSet(d.Get("target_pools").(*schema.Set)), - AutoHealingPolicies: expandAutoHealingPolicies(d.Get("auto_healing_policies").([]interface{})), - Versions: expandVersions(d.Get("version").([]interface{})), - UpdatePolicy: expandRegionUpdatePolicy(d.Get("update_policy").([]interface{})), - DistributionPolicy: expandDistributionPolicy(d), - StatefulPolicy: expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List()), + Name: d.Get("name").(string), + Description: d.Get("description").(string), + BaseInstanceName: d.Get("base_instance_name").(string), + TargetSize: int64(d.Get("target_size").(int)), + ListManagedInstancesResults: d.Get("list_managed_instances_results").(string), + NamedPorts: getNamedPortsBeta(d.Get("named_port").(*schema.Set).List()), + TargetPools: convertStringSet(d.Get("target_pools").(*schema.Set)), + AutoHealingPolicies: expandAutoHealingPolicies(d.Get("auto_healing_policies").([]interface{})), + Versions: expandVersions(d.Get("version").([]interface{})), + UpdatePolicy: expandRegionUpdatePolicy(d.Get("update_policy").([]interface{})), + DistributionPolicy: expandDistributionPolicy(d), + StatefulPolicy: expandStatefulPolicy(d.Get("stateful_disk").(*schema.Set).List()), // Force send TargetSize to allow size of 0. ForceSendFields: []string{"TargetSize"}, } @@ -561,6 +570,9 @@ func resourceComputeRegionInstanceGroupManagerRead(d *schema.ResourceData, meta if err := d.Set("target_size", manager.TargetSize); err != nil { return fmt.Errorf("Error setting target_size: %s", err) } + if err := d.Set("list_managed_instances_results", manager.ListManagedInstancesResults); err != nil { + return fmt.Errorf("Error setting list_managed_instances_results: %s", err) + } if err := d.Set("target_pools", mapStringArr(manager.TargetPools, ConvertSelfLinkToV1)); err != nil { return fmt.Errorf("Error setting target_pools in state: %s", err.Error()) } @@ -659,6 +671,11 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met change = true } + if d.HasChange("list_managed_instances_results") { + updatedManager.ListManagedInstancesResults = d.Get("list_managed_instances_results").(string) + change = true + } + if change { op, err := config.NewComputeClient(userAgent).RegionInstanceGroupManagers.Patch(project, region, d.Get("name").(string), updatedManager).Do() if err != nil { diff --git a/google/resource_compute_region_instance_group_manager_test.go b/google/resource_compute_region_instance_group_manager_test.go index 21b219eea29..98d67f66cbd 100644 --- a/google/resource_compute_region_instance_group_manager_test.go +++ b/google/resource_compute_region_instance_group_manager_test.go @@ -462,9 +462,10 @@ resource "google_compute_region_instance_group_manager" "igm-basic" { instance_template = google_compute_instance_template.igm-basic.self_link } - target_pools = [google_compute_target_pool.igm-basic.self_link] - base_instance_name = "tf-test-igm-basic" - target_size = 2 + target_pools = [google_compute_target_pool.igm-basic.self_link] + base_instance_name = "tf-test-igm-basic" + target_size = 2 + list_managed_instances_results = "PAGINATED" } resource "google_compute_region_instance_group_manager" "igm-no-tp" { @@ -476,9 +477,9 @@ resource "google_compute_region_instance_group_manager" "igm-no-tp" { instance_template = google_compute_instance_template.igm-basic.self_link } - base_instance_name = "tf-test-igm-no-tp" - region = "us-central1" - target_size = 2 + base_instance_name = "tf-test-igm-no-tp" + region = "us-central1" + target_size = 2 } `, template, target, igm1, igm2) } @@ -657,9 +658,10 @@ resource "google_compute_region_instance_group_manager" "igm-update" { google_compute_target_pool.igm-update.self_link, google_compute_target_pool.igm-update2.self_link, ] - base_instance_name = "tf-test-igm-update" - region = "us-central1" - target_size = 3 + base_instance_name = "tf-test-igm-update" + region = "us-central1" + target_size = 3 + list_managed_instances_results = "PAGINATED" named_port { name = "customhttp" port = 8080 @@ -744,9 +746,10 @@ resource "google_compute_region_instance_group_manager" "igm-update" { name = "primary" } - base_instance_name = "tf-test-igm-update" - region = "us-central1" - target_size = 3 + base_instance_name = "tf-test-igm-update" + region = "us-central1" + target_size = 3 + list_managed_instances_results = "PAGINATED" named_port { name = "customhttp" port = 8080 diff --git a/website/docs/r/compute_instance_group_manager.html.markdown b/website/docs/r/compute_instance_group_manager.html.markdown index 5cfb9b378ea..2ce52c02012 100644 --- a/website/docs/r/compute_instance_group_manager.html.markdown +++ b/website/docs/r/compute_instance_group_manager.html.markdown @@ -39,7 +39,7 @@ resource "google_compute_instance_group_manager" "appserver" { version { instance_template = google_compute_instance_template.appserver.id } - + all_instances_config { metadata = { metadata_key = "metadata_value" @@ -128,6 +128,13 @@ The following arguments are supported: instance group. This value should always be explicitly set unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to `0`. +* `list_managed_instances_results` - (Optional) Pagination behavior of the `listManagedInstances` API + method for this managed instance group. Valid values are: `PAGELESS`, `PAGINATED`. + If `PAGELESS` (default), Pagination is disabled for the group's `listManagedInstances` API method. + `maxResults` and `pageToken` query parameters are ignored and all instances are returned in a single + response. If `PAGINATED`, pagination is enabled, `maxResults` and `pageToken` query parameters are + respected. + * `target_pools` - (Optional) The full URL of all target pools to which new instances in the group are added. Updating the target pools attribute does not affect existing instances. diff --git a/website/docs/r/compute_region_instance_group_manager.html.markdown b/website/docs/r/compute_region_instance_group_manager.html.markdown index a03fca56699..96cfb61a26a 100644 --- a/website/docs/r/compute_region_instance_group_manager.html.markdown +++ b/website/docs/r/compute_region_instance_group_manager.html.markdown @@ -45,7 +45,7 @@ resource "google_compute_region_instance_group_manager" "appserver" { version { instance_template = google_compute_instance_template.appserver.id } - + all_instances_config { metadata = { metadata_key = "metadata_value" @@ -130,6 +130,13 @@ The following arguments are supported: instance group. This value should always be explicitly set unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to `0`. +* `list_managed_instances_results` - (Optional) Pagination behavior of the `listManagedInstances` API + method for this managed instance group. Valid values are: `PAGELESS`, `PAGINATED`. + If `PAGELESS` (default), Pagination is disabled for the group's `listManagedInstances` API method. + `maxResults` and `pageToken` query parameters are ignored and all instances are returned in a single + response. If `PAGINATED`, pagination is enabled, `maxResults` and `pageToken` query parameters are + respected. + * `target_pools` - (Optional) The full URL of all target pools to which new instances in the group are added. Updating the target pools attribute does not affect existing instances.