From 8e8b9e763aad8e66bd2fd828d3e3ad681c92fbe8 Mon Sep 17 00:00:00 2001 From: Lars Wander Date: Wed, 28 Oct 2015 11:33:49 -0400 Subject: [PATCH] provider/google: Added `preemtible` flag to `instance_template` --- resource_compute_instance_template.go | 60 ++++++++++++++++++++-- resource_compute_instance_template_test.go | 5 ++ 2 files changed, 62 insertions(+), 3 deletions(-) diff --git a/resource_compute_instance_template.go b/resource_compute_instance_template.go index ec85f1ba..effee9de 100644 --- a/resource_compute_instance_template.go +++ b/resource_compute_instance_template.go @@ -163,12 +163,42 @@ func resourceComputeInstanceTemplate() *schema.Resource { Optional: true, Default: true, ForceNew: true, + Deprecated: "Please use `scheduling.automatic_restart` instead", }, "on_host_maintenance": &schema.Schema{ Type: schema.TypeString, Optional: true, ForceNew: true, + Deprecated: "Please use `scheduling.on_host_maintenance` instead", + }, + + "scheduling": &schema.Schema{ + Type: schema.TypeList, + Optional: true, + ForceNew: true, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "preemptible": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + ForceNew: true, + }, + + "automatic_restart": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + Default: true, + ForceNew: true, + }, + + "on_host_maintenance": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + ForceNew: true, + }, + }, + }, }, "service_account": &schema.Schema{ @@ -352,14 +382,38 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac } instanceProperties.NetworkInterfaces = networks - instanceProperties.Scheduling = &compute.Scheduling{ - AutomaticRestart: d.Get("automatic_restart").(bool), - } + instanceProperties.Scheduling = &compute.Scheduling{} instanceProperties.Scheduling.OnHostMaintenance = "MIGRATE" + + if v, ok := d.GetOk("automatic_restart"); ok { + instanceProperties.Scheduling.AutomaticRestart = v.(bool) + } + if v, ok := d.GetOk("on_host_maintenance"); ok { instanceProperties.Scheduling.OnHostMaintenance = v.(string) } + if v, ok := d.GetOk("scheduling"); ok { + _schedulings := v.([]interface{}) + if len(_schedulings) > 1 { + return fmt.Errorf("Error, at most one `scheduling` block can be defined") + } + _scheduling := _schedulings[0].(map[string]interface{}) + + if vp, okp := _scheduling["automatic_restart"]; okp { + instanceProperties.Scheduling.AutomaticRestart = vp.(bool) + } + + if vp, okp := _scheduling["on_host_maintenance"]; okp { + instanceProperties.Scheduling.OnHostMaintenance = vp.(string) + } + + if vp, okp := _scheduling["preemptible"]; okp { + instanceProperties.Scheduling.Preemptible = vp.(bool) + } + } + + serviceAccountsCount := d.Get("service_account.#").(int) serviceAccounts := make([]*compute.ServiceAccount, 0, serviceAccountsCount) for i := 0; i < serviceAccountsCount; i++ { diff --git a/resource_compute_instance_template_test.go b/resource_compute_instance_template_test.go index 769ea68a..82f88b4a 100644 --- a/resource_compute_instance_template_test.go +++ b/resource_compute_instance_template_test.go @@ -218,6 +218,11 @@ resource "google_compute_instance_template" "foobar" { network = "default" } + scheduling { + preemptible = false + automatic_restart = true + } + metadata { foo = "bar" }