diff --git a/google/resource_compute_instance_template.go b/google/resource_compute_instance_template.go index b33e65f6..b225dca2 100644 --- a/google/resource_compute_instance_template.go +++ b/google/resource_compute_instance_template.go @@ -324,6 +324,14 @@ func resourceComputeInstanceTemplate() *schema.Resource { Type: schema.TypeString, Computed: true, }, + + "labels": &schema.Schema{ + Type: schema.TypeMap, + Optional: true, + ForceNew: true, + Elem: &schema.Schema{Type: schema.TypeString}, + Set: schema.HashString, + }, }, } } @@ -576,6 +584,9 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac instanceProperties.ServiceAccounts = serviceAccounts instanceProperties.Tags = resourceInstanceTags(d) + if _, ok := d.GetOk("labels"); ok { + instanceProperties.Labels = expandLabels(d) + } var itName string if v, ok := d.GetOk("name"); ok { @@ -743,6 +754,9 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{ return fmt.Errorf("Error setting tags_fingerprint: %s", err) } } + if instanceTemplate.Properties.Labels != nil { + d.Set("labels", instanceTemplate.Properties.Labels) + } if err = d.Set("self_link", instanceTemplate.SelfLink); err != nil { return fmt.Errorf("Error setting self_link: %s", err) } diff --git a/google/resource_compute_instance_template_test.go b/google/resource_compute_instance_template_test.go index 58d745f1..79517a05 100644 --- a/google/resource_compute_instance_template_test.go +++ b/google/resource_compute_instance_template_test.go @@ -28,6 +28,7 @@ func TestAccComputeInstanceTemplate_basic(t *testing.T) { testAccCheckComputeInstanceTemplateTag(&instanceTemplate, "foo"), testAccCheckComputeInstanceTemplateMetadata(&instanceTemplate, "foo", "bar"), testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "projects/debian-cloud/global/images/debian-8-jessie-v20160803", true, true), + testAccCheckComputeInstanceTemplateContainsLabel(&instanceTemplate, "my_label", "foobar"), ), }, }, @@ -412,6 +413,19 @@ func testAccCheckComputeInstanceTemplateNetworkIP(n, networkIP string, instanceT } } +func testAccCheckComputeInstanceTemplateContainsLabel(instanceTemplate *compute.InstanceTemplate, key string, value string) resource.TestCheckFunc { + return func(s *terraform.State) error { + v, ok := instanceTemplate.Properties.Labels[key] + if !ok { + return fmt.Errorf("Expected label with key '%s' not found", key) + } + if v != value { + return fmt.Errorf("Incorrect label value for key '%s': expected '%s' but found '%s'", key, value, v) + } + return nil + } +} + var testAccComputeInstanceTemplate_basic = fmt.Sprintf(` resource "google_compute_instance_template" "foobar" { name = "instancet-test-%s" @@ -441,6 +455,10 @@ resource "google_compute_instance_template" "foobar" { service_account { scopes = ["userinfo-email", "compute-ro", "storage-ro"] } + + labels { + my_label = "foobar" + } }`, acctest.RandString(10)) var testAccComputeInstanceTemplate_preemptible = fmt.Sprintf(` diff --git a/website/docs/r/compute_instance_template.html.markdown b/website/docs/r/compute_instance_template.html.markdown index 6897e8d2..13442c5f 100644 --- a/website/docs/r/compute_instance_template.html.markdown +++ b/website/docs/r/compute_instance_template.html.markdown @@ -24,6 +24,10 @@ resource "google_compute_instance_template" "default" { tags = ["foo", "bar"] + labels = { + environment = "dev" + } + instance_description = "description assigned to instances" machine_type = "n1-standard-1" can_ip_forward = false @@ -133,6 +137,9 @@ The following arguments are supported: * `instance_description` - (Optional) A brief description to use for instances created from this template. +* `labels` - (Optional) A set of key/value label pairs to assign to instances + created from this template, + * `metadata` - (Optional) Metadata key/value pairs to make available from within instances created from this template.