fix instance template interaction with regional disks, make docs more clear about valid values (#2138)

This commit is contained in:
Dana Hoffman 2018-10-01 11:07:56 -07:00 committed by GitHub
parent 98a608777c
commit 250cfa351c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 81 additions and 41 deletions

View File

@ -650,7 +650,7 @@ func flattenDisks(disks []*computeBeta.AttachedDisk, d *schema.ResourceData) ([]
diskMap["boot"] = disk.Boot
diskMap["device_name"] = disk.DeviceName
diskMap["interface"] = disk.Interface
diskMap["source"] = disk.Source
diskMap["source"] = ConvertSelfLinkToV1(disk.Source)
diskMap["mode"] = disk.Mode
diskMap["type"] = disk.Type
result = append(result, diskMap)

View File

@ -180,8 +180,6 @@ func TestAccComputeInstanceTemplate_networkIPAddress(t *testing.T) {
func TestAccComputeInstanceTemplate_disks(t *testing.T) {
t.Parallel()
var instanceTemplate compute.InstanceTemplate
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
@ -189,11 +187,26 @@ func TestAccComputeInstanceTemplate_disks(t *testing.T) {
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeInstanceTemplate_disks(),
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeInstanceTemplateExists(
"google_compute_instance_template.foobar", &instanceTemplate),
testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "terraform-test-foobar", false, false),
),
},
resource.TestStep{
ResourceName: "google_compute_instance_template.foobar",
ImportState: true,
ImportStateVerify: true,
},
},
})
}
func TestAccComputeInstanceTemplate_regionDisks(t *testing.T) {
t.Parallel()
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeInstanceTemplateDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeInstanceTemplate_regionDisks(),
},
resource.TestStep{
ResourceName: "google_compute_instance_template.foobar",
@ -534,34 +547,6 @@ func testAccCheckComputeInstanceTemplateNetworkName(instanceTemplate *compute.In
}
}
func testAccCheckComputeInstanceTemplateDisk(instanceTemplate *compute.InstanceTemplate, source string, delete bool, boot bool) resource.TestCheckFunc {
return func(s *terraform.State) error {
if instanceTemplate.Properties.Disks == nil {
return fmt.Errorf("no disks")
}
for _, disk := range instanceTemplate.Properties.Disks {
if disk.InitializeParams == nil {
// Check disk source
if disk.Source == source {
if disk.AutoDelete == delete && disk.Boot == boot {
return nil
}
}
} else {
// Check source image
if disk.InitializeParams.SourceImage == source {
if disk.AutoDelete == delete && disk.Boot == boot {
return nil
}
}
}
}
return fmt.Errorf("Disk not found: %s", source)
}
}
func testAccCheckComputeInstanceTemplateSubnetwork(instanceTemplate *compute.InstanceTemplate) resource.TestCheckFunc {
return func(s *terraform.State) error {
for _, i := range instanceTemplate.Properties.NetworkInterfaces {
@ -942,7 +927,49 @@ resource "google_compute_instance_template" "foobar" {
}
disk {
source = "terraform-test-foobar"
source = "${google_compute_disk.foobar.name}"
auto_delete = false
boot = false
}
network_interface {
network = "default"
}
metadata {
foo = "bar"
}
}`, acctest.RandString(10), acctest.RandString(10))
}
func testAccComputeInstanceTemplate_regionDisks() string {
return fmt.Sprintf(`
data "google_compute_image" "my_image" {
family = "debian-9"
project = "debian-cloud"
}
resource "google_compute_region_disk" "foobar" {
name = "instancet-test-%s"
size = 10
type = "pd-ssd"
region = "us-central1"
replica_zones = ["us-central1-a", "us-central1-f"]
}
resource "google_compute_instance_template" "foobar" {
name = "instancet-test-%s"
machine_type = "n1-standard-1"
disk {
source_image = "${data.google_compute_image.my_image.self_link}"
auto_delete = true
disk_size_gb = 100
boot = true
}
disk {
source = "${google_compute_region_disk.foobar.name}"
auto_delete = false
boot = false
}

View File

@ -45,7 +45,8 @@ resource "google_compute_instance_template" "default" {
// Use an existing disk resource
disk {
source = "foo_existing_disk"
// Instance Templates reference disks by name, not self link
source = "${google_compute_disk.foobar.name}"
auto_delete = false
boot = false
}
@ -62,6 +63,19 @@ resource "google_compute_instance_template" "default" {
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
}
}
data "google_compute_image" "my_image" {
family = "debian-9"
project = "debian-cloud"
}
resource "google_compute_disk" "foobar" {
name = "existing-disk"
image = "${data.google_compute_image.my_image.self_link}"
size = 10
type = "pd-ssd"
zone = "us-central1-a"
}
```
## Using with Instance Group Manager
@ -260,9 +274,8 @@ The `disk` block supports:
or READ_ONLY. If you are attaching or creating a boot disk, this must
read-write mode.
* `source` - (Required if source_image not set) The name of the disk (such as
those managed by `google_compute_disk`) to attach. This cannot be a regional
disk.
* `source` - (Required if source_image not set) The name (**not self_link**)
of the disk (such as those managed by `google_compute_disk`) to attach.
* `disk_type` - (Optional) The GCE disk type. Can be either `"pd-ssd"`,
`"local-ssd"`, or `"pd-standard"`.