diff --git a/google/resource_compute_instance_group.go b/google/resource_compute_instance_group.go index 0a7c4954..87dc93e1 100644 --- a/google/resource_compute_instance_group.go +++ b/google/resource_compute_instance_group.go @@ -186,14 +186,14 @@ func resourceComputeInstanceGroupRead(d *schema.ResourceData, meta interface{}) return err } - // retreive instance group + // retrieve instance group instanceGroup, err := config.clientCompute.InstanceGroups.Get( project, d.Get("zone").(string), d.Id()).Do() if err != nil { return handleNotFoundError(err, d, fmt.Sprintf("Instance Group %q", d.Get("name").(string))) } - // retreive instance group members + // retrieve instance group members var memberUrls []string members, err := config.clientCompute.InstanceGroups.ListInstances( project, d.Get("zone").(string), d.Id(), &compute.InstanceGroupsListInstancesRequest{ @@ -215,6 +215,8 @@ func resourceComputeInstanceGroupRead(d *schema.ResourceData, meta interface{}) d.Set("instances", memberUrls) } + d.Set("named_port", flattenNamedPorts(instanceGroup.NamedPorts)) + // Set computed fields d.Set("network", instanceGroup.Network) d.Set("size", instanceGroup.Size) @@ -230,12 +232,6 @@ func resourceComputeInstanceGroupUpdate(d *schema.ResourceData, meta interface{} return err } - // refresh the state incase referenced instances have been removed earlier in the run - err = resourceComputeInstanceGroupRead(d, meta) - if err != nil { - return fmt.Errorf("Error reading InstanceGroup: %s", err) - } - d.Partial(true) if d.HasChange("instances") { @@ -263,13 +259,17 @@ func resourceComputeInstanceGroupUpdate(d *schema.ResourceData, meta interface{} removeOp, err := config.clientCompute.InstanceGroups.RemoveInstances( project, d.Get("zone").(string), d.Id(), removeReq).Do() if err != nil { - return fmt.Errorf("Error removing instances from InstanceGroup: %s", err) - } - - // Wait for the operation to complete - err = computeOperationWaitZone(config, removeOp, project, d.Get("zone").(string), "Updating InstanceGroup") - if err != nil { - return err + if gerr, ok := err.(*googleapi.Error); ok && gerr.Code == 404 { + log.Printf("[WARN] Instances already removed from InstanceGroup: %s", remove) + } else { + return fmt.Errorf("Error removing instances from InstanceGroup: %s", err) + } + } else { + // Wait for the operation to complete + err = computeOperationWaitZone(config, removeOp, project, d.Get("zone").(string), "Updating InstanceGroup") + if err != nil { + return err + } } } diff --git a/google/resource_compute_instance_group_test.go b/google/resource_compute_instance_group_test.go index 50d956fc..8f1d9bf9 100644 --- a/google/resource_compute_instance_group_test.go +++ b/google/resource_compute_instance_group_test.go @@ -59,7 +59,7 @@ func TestAccComputeInstanceGroup_update(t *testing.T) { testAccComputeInstanceGroup_exists( "google_compute_instance_group.update", &instanceGroup), testAccComputeInstanceGroup_updated( - "google_compute_instance_group.update", 3, &instanceGroup), + "google_compute_instance_group.update", 1, &instanceGroup), testAccComputeInstanceGroup_named_ports( "google_compute_instance_group.update", map[string]int64{"http": 8081, "test": 8444}, @@ -319,7 +319,7 @@ func testAccComputeInstanceGroup_update(instance string) string { machine_type = "n1-standard-1" can_ip_forward = false zone = "us-central1-c" - count = 1 + count = 2 disk { image = "debian-8-jessie-v20160803" @@ -334,7 +334,7 @@ func testAccComputeInstanceGroup_update(instance string) string { description = "Terraform test instance group" name = "%s" zone = "us-central1-c" - instances = [ "${google_compute_instance.ig_instance.self_link}" ] + instances = [ "${google_compute_instance.ig_instance.*.self_link}" ] named_port { name = "http" port = "8080" @@ -354,7 +354,7 @@ func testAccComputeInstanceGroup_update2(instance string) string { machine_type = "n1-standard-1" can_ip_forward = false zone = "us-central1-c" - count = 3 + count = 1 disk { image = "debian-8-jessie-v20160803"