func overwriteFile()

in mpdev/internal/tf/overwrite.go [163:193]


func overwriteFile(filename string, varname string, value string) error {
	b, err := os.ReadFile(filename)
	if err != nil {
		return err
	}
	file, diag := hclwrite.ParseConfig(b, "", hcl.Pos{Line: 1, Column: 1})
	if diag.HasErrors() {
		return diag
	}

	block := file.Body().FirstMatchingBlock("variable", []string{varname})
	if block == nil {
		return fmt.Errorf("did not find block with variable: %s", varname)
	}

	// SetAttributeValue() is cleaner to overwrite values, however SetAttributeRaw gives more
	// control over formatting. SetAttributeValue() and File.WriteTo() would overwrite all
	// formatting. See: https://github.com/hashicorp/hcl/issues/316
	block.Body().SetAttributeRaw("default", getAttributeValueTokens(value))

	f, err := os.OpenFile(filename, os.O_WRONLY|os.O_TRUNC, 0000)
	if err != nil {
		return err
	}
	defer f.Close()

	rawBytes := file.BuildTokens(nil).Bytes()
	formattedBytes := hclwrite.Format(rawBytes)
	_, err = f.Write(formattedBytes)
	return err
}