mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-07-03 08:42:39 +00:00
Fix bug where startup-script metadata did not refresh (#180)
* Fix bug where startup-script metadata did not refresh * Remove MetadataFormatSchema and replace with explicit filters/transforms
This commit is contained in:
parent
42e901fce4
commit
28f8931f0b
|
@ -76,19 +76,6 @@ func MetadataUpdate(oldMDMap map[string]interface{}, newMDMap map[string]interfa
|
|||
}
|
||||
}
|
||||
|
||||
// Format metadata from the server data format -> schema data format
|
||||
func MetadataFormatSchema(curMDMap map[string]interface{}, md *compute.Metadata) map[string]interface{} {
|
||||
newMD := make(map[string]interface{})
|
||||
|
||||
for _, kv := range md.Items {
|
||||
if _, ok := curMDMap[kv.Key]; ok {
|
||||
newMD[kv.Key] = *kv.Value
|
||||
}
|
||||
}
|
||||
|
||||
return newMD
|
||||
}
|
||||
|
||||
// flattenComputeMetadata transforms a list of MetadataItems (as returned via the GCP client) into a simple map from key
|
||||
// to value.
|
||||
func flattenComputeMetadata(metadata []*compute.MetadataItems) map[string]string {
|
||||
|
|
|
@ -843,17 +843,25 @@ func resourceComputeInstanceRead(d *schema.ResourceData, meta interface{}) error
|
|||
return err
|
||||
}
|
||||
|
||||
// Synch metadata
|
||||
md := instance.Metadata
|
||||
md := flattenMetadata(instance.Metadata)
|
||||
|
||||
_md := MetadataFormatSchema(d.Get("metadata").(map[string]interface{}), md)
|
||||
|
||||
if script, scriptExists := d.GetOk("metadata_startup_script"); scriptExists {
|
||||
d.Set("metadata_startup_script", script)
|
||||
delete(_md, "startup-script")
|
||||
if _, scriptExists := d.GetOk("metadata_startup_script"); scriptExists {
|
||||
d.Set("metadata_startup_script", md["startup-script"])
|
||||
// Note that here we delete startup-script from our metadata list. This is to prevent storing the startup-script
|
||||
// as a value in the metadata since the config specifically tracks it under 'metadata_startup_script'
|
||||
delete(md, "startup-script")
|
||||
}
|
||||
|
||||
if err = d.Set("metadata", _md); err != nil {
|
||||
existingMetadata := d.Get("metadata").(map[string]interface{})
|
||||
|
||||
// Delete any keys not explicitly set in our config file
|
||||
for k := range md {
|
||||
if _, ok := existingMetadata[k]; !ok {
|
||||
delete(md, k)
|
||||
}
|
||||
}
|
||||
|
||||
if err = d.Set("metadata", md); err != nil {
|
||||
return fmt.Errorf("Error setting metadata: %s", err)
|
||||
}
|
||||
|
||||
|
|
|
@ -102,9 +102,16 @@ func resourceComputeProjectMetadataRead(d *schema.ResourceData, meta interface{}
|
|||
return handleNotFoundError(err, d, fmt.Sprintf("Project metadata for project %q", projectID))
|
||||
}
|
||||
|
||||
md := project.CommonInstanceMetadata
|
||||
md := flattenMetadata(project.CommonInstanceMetadata)
|
||||
existingMetadata := d.Get("metadata").(map[string]interface{})
|
||||
// Remove all keys not explicitly mentioned in the terraform config
|
||||
for k := range md {
|
||||
if _, ok := existingMetadata[k]; !ok {
|
||||
delete(md, k)
|
||||
}
|
||||
}
|
||||
|
||||
if err = d.Set("metadata", MetadataFormatSchema(d.Get("metadata").(map[string]interface{}), md)); err != nil {
|
||||
if err = d.Set("metadata", md); err != nil {
|
||||
return fmt.Errorf("Error setting metadata: %s", err)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user