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
}