From d42c75315c436156ef8e113735a8e77ee10b4822 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Mon, 25 Aug 2014 15:10:30 -0700 Subject: [PATCH] providers/google: support tags on compute_instance --- resource_compute_instance.go | 25 ++++++++++++++++++++++--- resource_compute_instance_test.go | 18 ++++++++++++++++++ 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/resource_compute_instance.go b/resource_compute_instance.go index 7a14ba44..b8c762ee 100644 --- a/resource_compute_instance.go +++ b/resource_compute_instance.go @@ -6,6 +6,7 @@ import ( "time" "code.google.com/p/google-api-go-client/compute/v1" + "github.com/hashicorp/terraform/helper/hashcode" "github.com/hashicorp/terraform/helper/schema" ) @@ -67,6 +68,15 @@ func resourceComputeInstance() *schema.Resource { }, }, }, + + "tags": &schema.Schema{ + Type: schema.TypeSet, + Optional: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: func(v interface{}) int { + return hashcode.String(v.(string)) + }, + }, }, } } @@ -145,6 +155,17 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err networks = append(networks, &iface) } + // Calculate the tags + var tags *compute.Tags + if v := d.Get("tags"); v != nil { + vs := v.(*schema.Set).List() + tags = new(compute.Tags) + tags.Items = make([]string, len(vs)) + for i, v := range v.(*schema.Set).List() { + tags.Items[i] = v.(string) + } + } + // Create the instance information instance := compute.Instance{ Description: d.Get("description").(string), @@ -157,6 +178,7 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err */ Name: d.Get("name").(string), NetworkInterfaces: networks, + Tags: tags, /* ServiceAccounts: []*compute.ServiceAccount{ &compute.ServiceAccount{ @@ -168,9 +190,6 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err }, }, }, - Tags: &compute.Tags{ - Items: c.Tags, - }, */ } diff --git a/resource_compute_instance_test.go b/resource_compute_instance_test.go index 1f0d2bd3..a616bfb5 100644 --- a/resource_compute_instance_test.go +++ b/resource_compute_instance_test.go @@ -22,6 +22,7 @@ func TestAccComputeInstance_basic(t *testing.T) { Check: resource.ComposeTestCheckFunc( testAccCheckComputeInstanceExists( "google_compute_instance.foobar", &instance), + testAccCheckComputeInstanceTag(instance, "foo"), ), }, }, @@ -75,11 +76,28 @@ func testAccCheckComputeInstanceExists(n string, instance *compute.Instance) res } } +func testAccCheckComputeInstanceExists(instance *compute.Instance, n string) resource.TestCheckFunc { + return func(s *terraform.State) error { + if instance.Tags == nil { + return fmt.Errorf("no tags") + } + + for _, k := range instance.Tags.Items { + if k == n { + return nil + } + } + + return fmt.Errorf("tag not found: %s", n) + } +} + const testAccComputeInstance_basic = ` resource "google_compute_instance" "foobar" { name = "terraform-test" machine_type = "n1-standard-1" zone = "us-central1-a" + tags = ["foo", "bar"] disk { source = "debian-7-wheezy-v20140814"