diff --git a/builtin/providers/google/resource_compute_instance_template.go b/builtin/providers/google/resource_compute_instance_template.go index ec85f1ba6fab..effee9de865d 100644 --- a/builtin/providers/google/resource_compute_instance_template.go +++ b/builtin/providers/google/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/builtin/providers/google/resource_compute_instance_template_test.go b/builtin/providers/google/resource_compute_instance_template_test.go index 769ea68a710e..82f88b4ac74f 100644 --- a/builtin/providers/google/resource_compute_instance_template_test.go +++ b/builtin/providers/google/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" } diff --git a/website/source/docs/providers/google/r/compute_instance_template.html.markdown b/website/source/docs/providers/google/r/compute_instance_template.html.markdown index e8996b5426fd..018e0e78c515 100644 --- a/website/source/docs/providers/google/r/compute_instance_template.html.markdown +++ b/website/source/docs/providers/google/r/compute_instance_template.html.markdown @@ -86,13 +86,14 @@ The following arguments are supported: This can be specified multiple times for multiple networks. Structure is documented below. -* `automatic_restart` - (Optional) Specifies whether the instance should be +* `automatic_restart` - (Optional, Deprecated - see `scheduling`) + Specifies whether the instance should be automatically restarted if it is terminated by Compute Engine (not terminated by a user). This defaults to true. -* `on_host_maintenance` - (Optional) Defines the maintenance behavior for this - instance. +* `on_host_maintenance` - (Optional, Deprecated - see `scheduling`) + Defines the maintenance behavior for this instance. * `service_account` - (Optional) Service account to attach to the instance. @@ -150,6 +151,18 @@ The `service_account` block supports: * `scopes` - (Required) A list of service scopes. Both OAuth2 URLs and gcloud short names are supported. +The `scheduling` block supports: + +* `automatic_restart` - (Optional) Specifies whether the instance should be + automatically restarted if it is terminated by Compute Engine (not + terminated by a user). + This defaults to true. + +* `on_host_maintenance` - (Optional) Defines the maintenance behavior for this instance. + +* `preemptible` - (Optional) Allows instance to be preempted. Read + more on this [here](https://cloud.google.com/compute/docs/instances/preemptible). + ## Attributes Reference The following attributes are exported: