Skip to content

Commit 5d48dc8

Browse files
authored
Merge pull request #1916 from terraform-providers/paddy_disk_image_url_in_templates
Always set instance template source images on read.
2 parents d24ca56 + b94881b commit 5d48dc8

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

google/resource_compute_instance_template.go

+23-12
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package google
33
import (
44
"fmt"
55

6+
"github.com/hashicorp/errwrap"
67
"github.com/hashicorp/terraform/helper/resource"
78
"github.com/hashicorp/terraform/helper/schema"
89
"github.com/hashicorp/terraform/helper/validation"
@@ -98,9 +99,10 @@ func resourceComputeInstanceTemplate() *schema.Resource {
9899
},
99100

100101
"source_image": &schema.Schema{
101-
Type: schema.TypeString,
102-
Optional: true,
103-
ForceNew: true,
102+
Type: schema.TypeString,
103+
Optional: true,
104+
DiffSuppressFunc: compareSelfLinkRelativePaths,
105+
ForceNew: true,
104106
},
105107

106108
"interface": &schema.Schema{
@@ -630,17 +632,16 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac
630632
return resourceComputeInstanceTemplateRead(d, meta)
631633
}
632634

633-
func flattenDisks(disks []*computeBeta.AttachedDisk, d *schema.ResourceData) []map[string]interface{} {
635+
func flattenDisks(disks []*computeBeta.AttachedDisk, d *schema.ResourceData) ([]map[string]interface{}, error) {
634636
result := make([]map[string]interface{}, 0, len(disks))
635-
for i, disk := range disks {
637+
for _, disk := range disks {
636638
diskMap := make(map[string]interface{})
637639
if disk.InitializeParams != nil {
638-
var source_img = fmt.Sprintf("disk.%d.source_image", i)
639-
if d.Get(source_img) == nil || d.Get(source_img) == "" {
640-
diskMap["source_image"] = GetResourceNameFromSelfLink(disk.InitializeParams.SourceImage)
641-
} else {
642-
diskMap["source_image"] = d.Get(source_img)
640+
path, err := getRelativePath(disk.InitializeParams.SourceImage)
641+
if err != nil {
642+
return nil, errwrap.Wrapf("Error getting relative path for source image: {{err}}", err)
643643
}
644+
diskMap["source_image"] = path
644645
diskMap["disk_type"] = disk.InitializeParams.DiskType
645646
diskMap["disk_name"] = disk.InitializeParams.DiskName
646647
diskMap["disk_size_gb"] = disk.InitializeParams.DiskSizeGb
@@ -654,7 +655,7 @@ func flattenDisks(disks []*computeBeta.AttachedDisk, d *schema.ResourceData) []m
654655
diskMap["type"] = disk.Type
655656
result = append(result, diskMap)
656657
}
657-
return result
658+
return result, nil
658659
}
659660

660661
func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{}) error {
@@ -695,6 +696,8 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
695696
if err = d.Set("tags_fingerprint", instanceTemplate.Properties.Tags.Fingerprint); err != nil {
696697
return fmt.Errorf("Error setting tags_fingerprint: %s", err)
697698
}
699+
} else {
700+
d.Set("tags_fingerprint", "")
698701
}
699702
if instanceTemplate.Properties.Labels != nil {
700703
d.Set("labels", instanceTemplate.Properties.Labels)
@@ -706,7 +709,11 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
706709
return fmt.Errorf("Error setting name: %s", err)
707710
}
708711
if instanceTemplate.Properties.Disks != nil {
709-
if err = d.Set("disk", flattenDisks(instanceTemplate.Properties.Disks, d)); err != nil {
712+
disks, err := flattenDisks(instanceTemplate.Properties.Disks, d)
713+
if err != nil {
714+
return fmt.Errorf("error flattening disks: %s", err)
715+
}
716+
if err = d.Set("disk", disks); err != nil {
710717
return fmt.Errorf("Error setting disk: %s", err)
711718
}
712719
}
@@ -755,6 +762,10 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
755762
if err = d.Set("tags", instanceTemplate.Properties.Tags.Items); err != nil {
756763
return fmt.Errorf("Error setting tags: %s", err)
757764
}
765+
} else {
766+
if err = d.Set("tags", nil); err != nil {
767+
return fmt.Errorf("Error setting empty tags: %s", err)
768+
}
758769
}
759770
if instanceTemplate.Properties.ServiceAccounts != nil {
760771
if err = d.Set("service_account", flattenServiceAccounts(instanceTemplate.Properties.ServiceAccounts)); err != nil {

0 commit comments

Comments
 (0)