in mpdev/internal/tf/overwrite.go [351:446]
func OverwriteDisplay(config *overwriteConfig, dir string) error {
fmt.Printf("Replacing the values of the display variables: %s in %s\n",
config.Variables, metadataDisplayFile)
data, err := os.ReadFile(path.Join(dir, metadataDisplayFile))
if err != nil {
// CLI only modules will not have a metadata display 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", metadataDisplayFile, err)
}
if config.NewValues != nil {
for varName, newValue := range config.NewValues {
variableQuery := fmt.Sprintf(`spec.ui.input.variables.%s`, varName)
variableInfo := gjson.GetBytes(json, variableQuery).String()
if variableInfo == "" {
return fmt.Errorf("missing valid display info for variable: %s in %s",
varName, metadataDisplayFile)
}
enumValueLabels := gjson.Get(variableInfo, "enumValueLabels").Array()
if len(enumValueLabels) == 0 {
fmt.Printf("No enum value labels for display variable: %s in %s\n",
varName, metadataDisplayFile)
continue
}
var replacementEnumValueLabels []EnumValueLabel
for _, enumValueLabel := range enumValueLabels {
currLabel := enumValueLabel.Get("label").String()
replacementEnumValueLabels = append(replacementEnumValueLabels, EnumValueLabel{Label: currLabel, Value: newValue})
}
enumQuery := fmt.Sprintf(`spec.ui.input.variables.%s.enumValueLabels`, varName)
json, err = sjson.SetBytes(json, enumQuery, replacementEnumValueLabels)
if err != nil {
return fmt.Errorf("error setting default value of variable: %s. error: %w",
varName, err)
}
}
} else {
for _, variable := range config.Variables {
variableQuery := fmt.Sprintf(`spec.ui.input.variables.%s`, variable)
variableInfo := gjson.GetBytes(json, variableQuery).String()
if variableInfo == "" {
return fmt.Errorf("missing valid display info for variable: %s in %s",
variable, metadataDisplayFile)
}
enumValueLabels := gjson.Get(variableInfo, "enumValueLabels").Array()
if len(enumValueLabels) == 0 {
fmt.Printf("No enum value labels for display variable: %s in %s\n",
variable, metadataDisplayFile)
continue
}
var replacementEnumValueLabels []EnumValueLabel
for _, enumValueLabel := range enumValueLabels {
currValue := enumValueLabel.Get("value").String()
currLabel := enumValueLabel.Get("label").String()
replaceVal, ok := config.Replacements[currValue]
if !ok {
return fmt.Errorf("enum value: %s of variable: %s in %s not found"+
" in replacements", currValue, variable, metadataDisplayFile)
}
replacementEnumValueLabels = append(replacementEnumValueLabels, EnumValueLabel{Label: currLabel, Value: replaceVal})
}
enumQuery := fmt.Sprintf(`spec.ui.input.variables.%s.enumValueLabels`, variable)
json, err = sjson.SetBytes(json, enumQuery, replacementEnumValueLabels)
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, metadataDisplayFile), modifiedYaml, 0644)
if err != nil {
return err
}
fmt.Printf("Successfully replaced display values in %s\n", metadataDisplayFile)
return nil
}