From 27319e13662ff237b312b1b6fbc63e2377e26507 Mon Sep 17 00:00:00 2001 From: Dave Cunningham Date: Mon, 11 May 2015 21:40:37 -0400 Subject: [PATCH] Allow local SSDs, Fix #1088 --- resource_compute_instance.go | 19 +++++++++++--- resource_compute_instance_test.go | 41 +++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/resource_compute_instance.go b/resource_compute_instance.go index 255718e5..956f2745 100644 --- a/resource_compute_instance.go +++ b/resource_compute_instance.go @@ -81,6 +81,12 @@ func resourceComputeInstance() *schema.Resource { ForceNew: true, }, + "scratch": &schema.Schema{ + Type: schema.TypeBool, + Optional: true, + ForceNew: true, + }, + "auto_delete": &schema.Schema{ Type: schema.TypeBool, Optional: true, @@ -319,6 +325,15 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err } disk.Source = diskData.SelfLink + } else { + // Create a new disk + disk.InitializeParams = &compute.AttachedDiskInitializeParams{ } + } + + if v, ok := d.GetOk(prefix + ".scratch"); ok { + if v.(bool) { + disk.Type = "SCRATCH" + } } // Load up the image for this disk if specified @@ -332,9 +347,7 @@ func resourceComputeInstanceCreate(d *schema.ResourceData, meta interface{}) err imageName, err) } - disk.InitializeParams = &compute.AttachedDiskInitializeParams{ - SourceImage: imageUrl, - } + disk.InitializeParams.SourceImage = imageUrl } if v, ok := d.GetOk(prefix + ".type"); ok { diff --git a/resource_compute_instance_test.go b/resource_compute_instance_test.go index 9dabc2fb..70d0c5f2 100644 --- a/resource_compute_instance_test.go +++ b/resource_compute_instance_test.go @@ -140,6 +140,26 @@ func TestAccComputeInstance_disks(t *testing.T) { }) } +func TestAccComputeInstance_local_ssd(t *testing.T) { + var instance compute.Instance + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckComputeInstanceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccComputeInstance_local_ssd, + Check: resource.ComposeTestCheckFunc( + testAccCheckComputeInstanceExists( + "google_compute_instance.local-ssd", &instance), + testAccCheckComputeInstanceDisk(&instance, "terraform-test", true, true), + ), + }, + }, + }) +} + func TestAccComputeInstance_update_deprecated_network(t *testing.T) { var instance compute.Instance @@ -609,6 +629,27 @@ resource "google_compute_instance" "foobar" { } }` +const testAccComputeInstance_local_ssd = ` +resource "google_compute_instance" "local-ssd" { + name = "terraform-test" + machine_type = "n1-standard-1" + zone = "us-central1-a" + + disk { + image = "debian-7-wheezy-v20140814" + } + + disk { + type = "local-ssd" + scratch = true + } + + network_interface { + network = "default" + } + +}` + const testAccComputeInstance_service_account = ` resource "google_compute_instance" "foobar" { name = "terraform-test"