Skip to content

Commit 250cfa3

Browse files
authored
fix instance template interaction with regional disks, make docs more clear about valid values (#2138)
1 parent 98a6087 commit 250cfa3

3 files changed

+81
-41
lines changed

google/resource_compute_instance_template.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -650,7 +650,7 @@ func flattenDisks(disks []*computeBeta.AttachedDisk, d *schema.ResourceData) ([]
650650
diskMap["boot"] = disk.Boot
651651
diskMap["device_name"] = disk.DeviceName
652652
diskMap["interface"] = disk.Interface
653-
diskMap["source"] = disk.Source
653+
diskMap["source"] = ConvertSelfLinkToV1(disk.Source)
654654
diskMap["mode"] = disk.Mode
655655
diskMap["type"] = disk.Type
656656
result = append(result, diskMap)

google/resource_compute_instance_template_test.go

+63-36
Original file line numberDiff line numberDiff line change
@@ -180,20 +180,33 @@ func TestAccComputeInstanceTemplate_networkIPAddress(t *testing.T) {
180180
func TestAccComputeInstanceTemplate_disks(t *testing.T) {
181181
t.Parallel()
182182

183-
var instanceTemplate compute.InstanceTemplate
184-
185183
resource.Test(t, resource.TestCase{
186184
PreCheck: func() { testAccPreCheck(t) },
187185
Providers: testAccProviders,
188186
CheckDestroy: testAccCheckComputeInstanceTemplateDestroy,
189187
Steps: []resource.TestStep{
190188
resource.TestStep{
191189
Config: testAccComputeInstanceTemplate_disks(),
192-
Check: resource.ComposeTestCheckFunc(
193-
testAccCheckComputeInstanceTemplateExists(
194-
"google_compute_instance_template.foobar", &instanceTemplate),
195-
testAccCheckComputeInstanceTemplateDisk(&instanceTemplate, "terraform-test-foobar", false, false),
196-
),
190+
},
191+
resource.TestStep{
192+
ResourceName: "google_compute_instance_template.foobar",
193+
ImportState: true,
194+
ImportStateVerify: true,
195+
},
196+
},
197+
})
198+
}
199+
200+
func TestAccComputeInstanceTemplate_regionDisks(t *testing.T) {
201+
t.Parallel()
202+
203+
resource.Test(t, resource.TestCase{
204+
PreCheck: func() { testAccPreCheck(t) },
205+
Providers: testAccProviders,
206+
CheckDestroy: testAccCheckComputeInstanceTemplateDestroy,
207+
Steps: []resource.TestStep{
208+
resource.TestStep{
209+
Config: testAccComputeInstanceTemplate_regionDisks(),
197210
},
198211
resource.TestStep{
199212
ResourceName: "google_compute_instance_template.foobar",
@@ -534,34 +547,6 @@ func testAccCheckComputeInstanceTemplateNetworkName(instanceTemplate *compute.In
534547
}
535548
}
536549

537-
func testAccCheckComputeInstanceTemplateDisk(instanceTemplate *compute.InstanceTemplate, source string, delete bool, boot bool) resource.TestCheckFunc {
538-
return func(s *terraform.State) error {
539-
if instanceTemplate.Properties.Disks == nil {
540-
return fmt.Errorf("no disks")
541-
}
542-
543-
for _, disk := range instanceTemplate.Properties.Disks {
544-
if disk.InitializeParams == nil {
545-
// Check disk source
546-
if disk.Source == source {
547-
if disk.AutoDelete == delete && disk.Boot == boot {
548-
return nil
549-
}
550-
}
551-
} else {
552-
// Check source image
553-
if disk.InitializeParams.SourceImage == source {
554-
if disk.AutoDelete == delete && disk.Boot == boot {
555-
return nil
556-
}
557-
}
558-
}
559-
}
560-
561-
return fmt.Errorf("Disk not found: %s", source)
562-
}
563-
}
564-
565550
func testAccCheckComputeInstanceTemplateSubnetwork(instanceTemplate *compute.InstanceTemplate) resource.TestCheckFunc {
566551
return func(s *terraform.State) error {
567552
for _, i := range instanceTemplate.Properties.NetworkInterfaces {
@@ -942,7 +927,49 @@ resource "google_compute_instance_template" "foobar" {
942927
}
943928
944929
disk {
945-
source = "terraform-test-foobar"
930+
source = "${google_compute_disk.foobar.name}"
931+
auto_delete = false
932+
boot = false
933+
}
934+
935+
network_interface {
936+
network = "default"
937+
}
938+
939+
metadata {
940+
foo = "bar"
941+
}
942+
}`, acctest.RandString(10), acctest.RandString(10))
943+
}
944+
945+
func testAccComputeInstanceTemplate_regionDisks() string {
946+
return fmt.Sprintf(`
947+
data "google_compute_image" "my_image" {
948+
family = "debian-9"
949+
project = "debian-cloud"
950+
}
951+
952+
resource "google_compute_region_disk" "foobar" {
953+
name = "instancet-test-%s"
954+
size = 10
955+
type = "pd-ssd"
956+
region = "us-central1"
957+
replica_zones = ["us-central1-a", "us-central1-f"]
958+
}
959+
960+
resource "google_compute_instance_template" "foobar" {
961+
name = "instancet-test-%s"
962+
machine_type = "n1-standard-1"
963+
964+
disk {
965+
source_image = "${data.google_compute_image.my_image.self_link}"
966+
auto_delete = true
967+
disk_size_gb = 100
968+
boot = true
969+
}
970+
971+
disk {
972+
source = "${google_compute_region_disk.foobar.name}"
946973
auto_delete = false
947974
boot = false
948975
}

website/docs/r/compute_instance_template.html.markdown

+17-4
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ resource "google_compute_instance_template" "default" {
4545
4646
// Use an existing disk resource
4747
disk {
48-
source = "foo_existing_disk"
48+
// Instance Templates reference disks by name, not self link
49+
source = "${google_compute_disk.foobar.name}"
4950
auto_delete = false
5051
boot = false
5152
}
@@ -62,6 +63,19 @@ resource "google_compute_instance_template" "default" {
6263
scopes = ["userinfo-email", "compute-ro", "storage-ro"]
6364
}
6465
}
66+
67+
data "google_compute_image" "my_image" {
68+
family = "debian-9"
69+
project = "debian-cloud"
70+
}
71+
72+
resource "google_compute_disk" "foobar" {
73+
name = "existing-disk"
74+
image = "${data.google_compute_image.my_image.self_link}"
75+
size = 10
76+
type = "pd-ssd"
77+
zone = "us-central1-a"
78+
}
6579
```
6680

6781
## Using with Instance Group Manager
@@ -260,9 +274,8 @@ The `disk` block supports:
260274
or READ_ONLY. If you are attaching or creating a boot disk, this must
261275
read-write mode.
262276

263-
* `source` - (Required if source_image not set) The name of the disk (such as
264-
those managed by `google_compute_disk`) to attach. This cannot be a regional
265-
disk.
277+
* `source` - (Required if source_image not set) The name (**not self_link**)
278+
of the disk (such as those managed by `google_compute_disk`) to attach.
266279

267280
* `disk_type` - (Optional) The GCE disk type. Can be either `"pd-ssd"`,
268281
`"local-ssd"`, or `"pd-standard"`.

0 commit comments

Comments
 (0)