From b4991087a686dd68294cb162a62d337ff16e4258 Mon Sep 17 00:00:00 2001 From: The Magician Date: Wed, 8 May 2019 16:20:15 -0700 Subject: [PATCH] Allow project to be specified when importing instance groups (#3597) Signed-off-by: Modular Magician --- google/resource_compute_instance_group.go | 15 +++++++++----- .../resource_compute_instance_group_test.go | 20 +++++++++++++------ .../r/compute_instance_group.html.markdown | 3 ++- website/google.erb | 10 +++++----- 4 files changed, 31 insertions(+), 17 deletions(-) diff --git a/google/resource_compute_instance_group.go b/google/resource_compute_instance_group.go index dc529604..75ea764d 100644 --- a/google/resource_compute_instance_group.go +++ b/google/resource_compute_instance_group.go @@ -379,12 +379,17 @@ func resourceComputeInstanceGroupDelete(d *schema.ResourceData, meta interface{} func resourceComputeInstanceGroupImportState(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) { parts := strings.Split(d.Id(), "/") - if len(parts) != 2 { - return nil, fmt.Errorf("Invalid compute instance group specifier. Expecting {zone}/{name}") + if len(parts) == 2 { + d.Set("zone", parts[0]) + d.Set("name", parts[1]) + } else if len(parts) == 3 { + d.Set("project", parts[0]) + d.Set("zone", parts[1]) + d.Set("name", parts[2]) + d.SetId(parts[1] + "/" + parts[2]) + } else { + return nil, fmt.Errorf("Invalid compute instance group specifier. Expecting {zone}/{name} or {project}/{zone}/{name}") } - d.Set("zone", parts[0]) - d.Set("name", parts[1]) - return []*schema.ResourceData{d}, nil } diff --git a/google/resource_compute_instance_group_test.go b/google/resource_compute_instance_group_test.go index 0ea5f322..4ade46d2 100644 --- a/google/resource_compute_instance_group_test.go +++ b/google/resource_compute_instance_group_test.go @@ -15,7 +15,9 @@ func TestAccComputeInstanceGroup_basic(t *testing.T) { t.Parallel() var instanceGroup compute.InstanceGroup + var resourceName = "google_compute_instance_group.basic" var instanceName = fmt.Sprintf("instancegroup-test-%s", acctest.RandString(10)) + var zone = "us-central1-c" resource.Test(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, @@ -23,7 +25,7 @@ func TestAccComputeInstanceGroup_basic(t *testing.T) { CheckDestroy: testAccComputeInstanceGroup_destroy, Steps: []resource.TestStep{ { - Config: testAccComputeInstanceGroup_basic(instanceName), + Config: testAccComputeInstanceGroup_basic(zone, instanceName), Check: resource.ComposeTestCheckFunc( testAccComputeInstanceGroup_exists( "google_compute_instance_group.basic", &instanceGroup), @@ -32,10 +34,16 @@ func TestAccComputeInstanceGroup_basic(t *testing.T) { ), }, { - ResourceName: "google_compute_instance_group.basic", + ResourceName: resourceName, ImportState: true, ImportStateVerify: true, }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateVerify: true, + ImportStateId: fmt.Sprintf("%s/%s/%s", getTestProjectFromEnv(), zone, instanceName), + }, }, }) } @@ -307,7 +315,7 @@ func testAccComputeInstanceGroup_hasCorrectNetwork(nInstanceGroup string, nNetwo } } -func testAccComputeInstanceGroup_basic(instance string) string { +func testAccComputeInstanceGroup_basic(zone, instance string) string { return fmt.Sprintf(` data "google_compute_image" "my_image" { family = "debian-9" @@ -334,7 +342,7 @@ func testAccComputeInstanceGroup_basic(instance string) string { resource "google_compute_instance_group" "basic" { description = "Terraform test instance group" name = "%s" - zone = "us-central1-c" + zone = "%s" instances = [ "${google_compute_instance.ig_instance.self_link}" ] named_port { name = "http" @@ -349,7 +357,7 @@ func testAccComputeInstanceGroup_basic(instance string) string { resource "google_compute_instance_group" "empty" { description = "Terraform test instance group empty" name = "%s-empty" - zone = "us-central1-c" + zone = "%s" named_port { name = "http" port = "8080" @@ -358,7 +366,7 @@ func testAccComputeInstanceGroup_basic(instance string) string { name = "https" port = "8443" } - }`, instance, instance, instance) + }`, instance, instance, zone, instance, zone) } func testAccComputeInstanceGroup_rename(instance, instanceGroup, backend, health string) string { diff --git a/website/docs/r/compute_instance_group.html.markdown b/website/docs/r/compute_instance_group.html.markdown index d52c201b..96627ba5 100644 --- a/website/docs/r/compute_instance_group.html.markdown +++ b/website/docs/r/compute_instance_group.html.markdown @@ -175,8 +175,9 @@ This resource provides the following ## Import -Instance group can be imported using the `zone` and `name`, e.g. +Instance group can be imported using the `zone` and `name` with an optional `project`, e.g. ``` $ terraform import google_compute_instance_group.webservers us-central1-a/terraform-webservers +$ terraform import google_compute_instance_group.webservers big-project/us-central1-a/terraform-webservers ``` diff --git a/website/google.erb b/website/google.erb index 24bda687..2203f44d 100644 --- a/website/google.erb +++ b/website/google.erb @@ -393,15 +393,15 @@ > google_compute_instance_iam_binding - + - > + > google_compute_instance_iam_member - + - > + > google_compute_instance_iam_policy - + > google_compute_instance_from_template