func OverwriteDisplay()

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
}