From b42e5a1d45fe039df97cc48eab1c4e12638cf997 Mon Sep 17 00:00:00 2001 From: Modular Magician Date: Fri, 29 May 2020 18:30:40 +0000 Subject: [PATCH] allow updating (R)IGM target pools to empty (#3581) Signed-off-by: Modular Magician --- .changelog/3581.txt | 3 + ...resource_compute_instance_group_manager.go | 1 + ...rce_compute_instance_group_manager_test.go | 94 +++++++++++++++++++ ...e_compute_region_instance_group_manager.go | 1 + ...pute_region_instance_group_manager_test.go | 94 +++++++++++++++++++ 5 files changed, 193 insertions(+) create mode 100644 .changelog/3581.txt diff --git a/.changelog/3581.txt b/.changelog/3581.txt new file mode 100644 index 00000000000..330536a6bb1 --- /dev/null +++ b/.changelog/3581.txt @@ -0,0 +1,3 @@ +```release-note:bug +compute: fixed issue where removing all target pools from `google_compute_instance_group_manager` or `google_compute_region_instance_group_manager` had no effect +``` diff --git a/google/resource_compute_instance_group_manager.go b/google/resource_compute_instance_group_manager.go index 7e7b7c92912..0c737f749a6 100644 --- a/google/resource_compute_instance_group_manager.go +++ b/google/resource_compute_instance_group_manager.go @@ -470,6 +470,7 @@ func resourceComputeInstanceGroupManagerUpdate(d *schema.ResourceData, meta inte if d.HasChange("target_pools") { updatedManager.TargetPools = convertStringSet(d.Get("target_pools").(*schema.Set)) + updatedManager.ForceSendFields = append(updatedManager.ForceSendFields, "TargetPools") change = true } diff --git a/google/resource_compute_instance_group_manager_test.go b/google/resource_compute_instance_group_manager_test.go index 6edb5e65c72..a4534e8aa76 100644 --- a/google/resource_compute_instance_group_manager_test.go +++ b/google/resource_compute_instance_group_manager_test.go @@ -91,6 +91,14 @@ func TestAccInstanceGroupManager_update(t *testing.T) { ImportState: true, ImportStateVerify: true, }, + { + Config: testAccInstanceGroupManager_update3(template1, target1, target2, template2, igm), + }, + { + ResourceName: "google_compute_instance_group_manager.igm-update", + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -537,6 +545,92 @@ resource "google_compute_instance_group_manager" "igm-update" { `, template1, target1, target2, template2, igm) } +// Remove target pools +func testAccInstanceGroupManager_update3(template1, target1, target2, template2, igm string) string { + return fmt.Sprintf(` +data "google_compute_image" "my_image" { + family = "debian-9" + project = "debian-cloud" +} + +resource "google_compute_instance_template" "igm-update" { + name = "%s" + machine_type = "n1-standard-1" + can_ip_forward = false + tags = ["foo", "bar"] + + disk { + source_image = data.google_compute_image.my_image.self_link + auto_delete = true + boot = true + } + + network_interface { + network = "default" + } + + service_account { + scopes = ["userinfo-email", "compute-ro", "storage-ro"] + } +} + +resource "google_compute_target_pool" "igm-update" { + description = "Resource created for Terraform acceptance testing" + name = "%s" + session_affinity = "CLIENT_IP_PROTO" +} + +resource "google_compute_target_pool" "igm-update2" { + description = "Resource created for Terraform acceptance testing" + name = "%s" + session_affinity = "CLIENT_IP_PROTO" +} + +resource "google_compute_instance_template" "igm-update2" { + name = "%s" + machine_type = "n1-standard-1" + can_ip_forward = false + tags = ["foo", "bar"] + + disk { + source_image = data.google_compute_image.my_image.self_link + auto_delete = true + boot = true + } + + network_interface { + network = "default" + } + + service_account { + scopes = ["userinfo-email", "compute-ro", "storage-ro"] + } +} + +resource "google_compute_instance_group_manager" "igm-update" { + description = "Terraform test instance group manager" + name = "%s" + + version { + name = "prod" + instance_template = google_compute_instance_template.igm-update2.self_link + } + + base_instance_name = "igm-update" + zone = "us-central1-c" + target_size = 3 + named_port { + name = "customhttp" + port = 8080 + } + named_port { + name = "customhttps" + port = 8443 + } +} +`, template1, target1, target2, template2, igm) +} + func testAccInstanceGroupManager_updateLifecycle(tag, igm string) string { return fmt.Sprintf(` data "google_compute_image" "my_image" { diff --git a/google/resource_compute_region_instance_group_manager.go b/google/resource_compute_region_instance_group_manager.go index 867b62d24fb..c28316c3f07 100644 --- a/google/resource_compute_region_instance_group_manager.go +++ b/google/resource_compute_region_instance_group_manager.go @@ -436,6 +436,7 @@ func resourceComputeRegionInstanceGroupManagerUpdate(d *schema.ResourceData, met if d.HasChange("target_pools") { updatedManager.TargetPools = convertStringSet(d.Get("target_pools").(*schema.Set)) + updatedManager.ForceSendFields = append(updatedManager.ForceSendFields, "TargetPools") change = true } diff --git a/google/resource_compute_region_instance_group_manager_test.go b/google/resource_compute_region_instance_group_manager_test.go index abf0b466379..390c8c7d1a0 100644 --- a/google/resource_compute_region_instance_group_manager_test.go +++ b/google/resource_compute_region_instance_group_manager_test.go @@ -92,6 +92,14 @@ func TestAccRegionInstanceGroupManager_update(t *testing.T) { ImportState: true, ImportStateVerify: true, }, + { + Config: testAccRegionInstanceGroupManager_update3(template1, target1, target2, template2, igm), + }, + { + ResourceName: "google_compute_region_instance_group_manager.igm-update", + ImportState: true, + ImportStateVerify: true, + }, }, }) } @@ -549,6 +557,92 @@ resource "google_compute_region_instance_group_manager" "igm-update" { `, template1, target1, target2, template2, igm) } +// Remove target pools +func testAccRegionInstanceGroupManager_update3(template1, target1, target2, template2, igm string) string { + return fmt.Sprintf(` +data "google_compute_image" "my_image" { + family = "debian-9" + project = "debian-cloud" +} + +resource "google_compute_instance_template" "igm-update" { + name = "%s" + machine_type = "n1-standard-1" + can_ip_forward = false + tags = ["foo", "bar"] + + disk { + source_image = data.google_compute_image.my_image.self_link + auto_delete = true + boot = true + } + + network_interface { + network = "default" + } + + service_account { + scopes = ["userinfo-email", "compute-ro", "storage-ro"] + } +} + +resource "google_compute_target_pool" "igm-update" { + description = "Resource created for Terraform acceptance testing" + name = "%s" + session_affinity = "CLIENT_IP_PROTO" +} + +resource "google_compute_target_pool" "igm-update2" { + description = "Resource created for Terraform acceptance testing" + name = "%s" + session_affinity = "CLIENT_IP_PROTO" +} + +resource "google_compute_instance_template" "igm-update2" { + name = "%s" + machine_type = "n1-standard-1" + can_ip_forward = false + tags = ["foo", "bar"] + + disk { + source_image = data.google_compute_image.my_image.self_link + auto_delete = true + boot = true + } + + network_interface { + network = "default" + } + + service_account { + scopes = ["userinfo-email", "compute-ro", "storage-ro"] + } +} + +resource "google_compute_region_instance_group_manager" "igm-update" { + description = "Terraform test instance group manager" + name = "%s" + + version { + instance_template = google_compute_instance_template.igm-update2.self_link + name = "primary" + } + + base_instance_name = "igm-update" + region = "us-central1" + target_size = 3 + named_port { + name = "customhttp" + port = 8080 + } + named_port { + name = "customhttps" + port = 8443 + } +} +`, template1, target1, target2, template2, igm) +} + func testAccRegionInstanceGroupManager_updateLifecycle(tag, igm string) string { return fmt.Sprintf(` data "google_compute_image" "my_image" {