@@ -3,6 +3,7 @@ package google
3
3
import (
4
4
"fmt"
5
5
6
+ "github.com/hashicorp/errwrap"
6
7
"github.com/hashicorp/terraform/helper/resource"
7
8
"github.com/hashicorp/terraform/helper/schema"
8
9
"github.com/hashicorp/terraform/helper/validation"
@@ -98,9 +99,10 @@ func resourceComputeInstanceTemplate() *schema.Resource {
98
99
},
99
100
100
101
"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 ,
104
106
},
105
107
106
108
"interface" : & schema.Schema {
@@ -630,17 +632,16 @@ func resourceComputeInstanceTemplateCreate(d *schema.ResourceData, meta interfac
630
632
return resourceComputeInstanceTemplateRead (d , meta )
631
633
}
632
634
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 ) {
634
636
result := make ([]map [string ]interface {}, 0 , len (disks ))
635
- for i , disk := range disks {
637
+ for _ , disk := range disks {
636
638
diskMap := make (map [string ]interface {})
637
639
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 )
643
643
}
644
+ diskMap ["source_image" ] = path
644
645
diskMap ["disk_type" ] = disk .InitializeParams .DiskType
645
646
diskMap ["disk_name" ] = disk .InitializeParams .DiskName
646
647
diskMap ["disk_size_gb" ] = disk .InitializeParams .DiskSizeGb
@@ -654,7 +655,7 @@ func flattenDisks(disks []*computeBeta.AttachedDisk, d *schema.ResourceData) []m
654
655
diskMap ["type" ] = disk .Type
655
656
result = append (result , diskMap )
656
657
}
657
- return result
658
+ return result , nil
658
659
}
659
660
660
661
func resourceComputeInstanceTemplateRead (d * schema.ResourceData , meta interface {}) error {
@@ -695,6 +696,8 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
695
696
if err = d .Set ("tags_fingerprint" , instanceTemplate .Properties .Tags .Fingerprint ); err != nil {
696
697
return fmt .Errorf ("Error setting tags_fingerprint: %s" , err )
697
698
}
699
+ } else {
700
+ d .Set ("tags_fingerprint" , "" )
698
701
}
699
702
if instanceTemplate .Properties .Labels != nil {
700
703
d .Set ("labels" , instanceTemplate .Properties .Labels )
@@ -706,7 +709,11 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
706
709
return fmt .Errorf ("Error setting name: %s" , err )
707
710
}
708
711
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 {
710
717
return fmt .Errorf ("Error setting disk: %s" , err )
711
718
}
712
719
}
@@ -755,6 +762,10 @@ func resourceComputeInstanceTemplateRead(d *schema.ResourceData, meta interface{
755
762
if err = d .Set ("tags" , instanceTemplate .Properties .Tags .Items ); err != nil {
756
763
return fmt .Errorf ("Error setting tags: %s" , err )
757
764
}
765
+ } else {
766
+ if err = d .Set ("tags" , nil ); err != nil {
767
+ return fmt .Errorf ("Error setting empty tags: %s" , err )
768
+ }
758
769
}
759
770
if instanceTemplate .Properties .ServiceAccounts != nil {
760
771
if err = d .Set ("service_account" , flattenServiceAccounts (instanceTemplate .Properties .ServiceAccounts )); err != nil {
0 commit comments