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:
Joe Selman 2017-08-01 10:47:58 -07:00 committed by GitHub
parent 42e901fce4
commit 28f8931f0b
3 changed files with 25 additions and 23 deletions

View File

@ -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 {

View File

@ -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)
}

View File

@ -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)
}