Skip to content

Commit

Permalink
Merge pull request #3667 from lwander/f-gcp-instance-template-preempt…
Browse files Browse the repository at this point in the history
…ible

provider/google: Added `preemtible` flag to `instance_template`
  • Loading branch information
sparkprime committed Oct 30, 2015
2 parents f562d17 + 2da1ba0 commit 8ff8f17
Show file tree
Hide file tree
Showing 3 changed files with 78 additions and 6 deletions.
60 changes: 57 additions & 3 deletions builtin/providers/google/resource_compute_instance_template.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{
Expand Down Expand Up @@ -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++ {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,11 @@ resource "google_compute_instance_template" "foobar" {
network = "default"
}
scheduling {
preemptible = false
automatic_restart = true
}
metadata {
foo = "bar"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand Down Expand Up @@ -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:
Expand Down

0 comments on commit 8ff8f17

Please sign in to comment.