in mpdev/internal/tf/overwrite.go [274:348]
func OverwriteMetadata(config *overwriteConfig, dir string) error {
data, err := os.ReadFile(path.Join(dir, metadataFile))
if err != nil {
// CLI only modules will not have a metadata file. Ignore file not found errors
if os.IsNotExist(err) {
return nil
}
return err
}
json, err := yaml.YAMLToJSON(data)
if err != nil {
return fmt.Errorf("failure parsing %s error: %w", metadataFile, err)
}
if config.NewValues != nil {
fmt.Printf("Replacing the default values of the variables: %s in %s\n",
config.NewValues, metadataFile)
for varName, newValue := range config.NewValues {
varQuery := fmt.Sprintf(`spec.interfaces.variables.#(name=="%s")`, varName)
varEntry := gjson.GetBytes(json, varQuery)
if varEntry.Raw == "" {
return fmt.Errorf("missing variable entry for variable: %s in %s",
varName, metadataFile)
}
// sjson.SetBytes doesn't work when spec.interfaces.variables.#(name=="%s").defaultValue
// doesn't already exist. Retrieving and setting the whole variable entry
// as a workaround.
varEntryMap := varEntry.Value().(map[string]interface{})
varEntryMap["defaultValue"] = newValue
json, err = sjson.SetBytes(json, varQuery, varEntryMap)
if err != nil {
return fmt.Errorf("error setting the updated entry for variable: %s. error: %w",
varName, err)
}
}
} else {
fmt.Printf("Replacing the default values of the variables: %s in %s\n",
config.Variables, metadataFile)
for _, variable := range config.Variables {
query := fmt.Sprintf(`spec.interfaces.variables.#(name=="%s").defaultValue`, variable)
defaultVal := gjson.GetBytes(json, query).String()
if defaultVal == "" {
return fmt.Errorf("Missing valid default value for variable: %s in %s",
variable, metadataFile)
}
replaceVal, ok := config.Replacements[defaultVal]
if !ok {
return fmt.Errorf("default value: %s of variable: %s in %s not found"+
" in replacements", defaultVal, variable, metadataFile)
}
json, err = sjson.SetBytes(json, query, replaceVal)
if err != nil {
return fmt.Errorf("Error setting default value of variable: %s. error: %w",
variable, err)
}
}
}
modifiedYaml, err := yaml.JSONToYAML([]byte(json))
if err != nil {
return err
}
err = os.WriteFile(path.Join(dir, metadataFile), modifiedYaml, 0644)
if err != nil {
return err
}
fmt.Printf("Successfully replaced default values in %s\n", metadataFile)
return nil
}