| package hclwrite_test |
| |
| import ( |
| "fmt" |
| |
| "github.com/hashicorp/hcl/v2" |
| "github.com/hashicorp/hcl/v2/hclwrite" |
| "github.com/zclconf/go-cty/cty" |
| ) |
| |
| func Example_generateFromScratch() { |
| f := hclwrite.NewEmptyFile() |
| rootBody := f.Body() |
| rootBody.SetAttributeValue("string", cty.StringVal("bar")) // this is overwritten later |
| rootBody.AppendNewline() |
| rootBody.SetAttributeValue("object", cty.ObjectVal(map[string]cty.Value{ |
| "foo": cty.StringVal("foo"), |
| "bar": cty.NumberIntVal(5), |
| "baz": cty.True, |
| })) |
| rootBody.SetAttributeValue("string", cty.StringVal("foo")) |
| rootBody.SetAttributeValue("bool", cty.False) |
| rootBody.SetAttributeTraversal("path", hcl.Traversal{ |
| hcl.TraverseRoot{ |
| Name: "env", |
| }, |
| hcl.TraverseAttr{ |
| Name: "PATH", |
| }, |
| }) |
| rootBody.AppendNewline() |
| fooBlock := rootBody.AppendNewBlock("foo", nil) |
| fooBody := fooBlock.Body() |
| rootBody.AppendNewBlock("empty", nil) |
| rootBody.AppendNewline() |
| barBlock := rootBody.AppendNewBlock("bar", []string{"a", "b"}) |
| barBody := barBlock.Body() |
| |
| fooBody.SetAttributeValue("hello", cty.StringVal("world")) |
| |
| bazBlock := barBody.AppendNewBlock("baz", nil) |
| bazBody := bazBlock.Body() |
| bazBody.SetAttributeValue("foo", cty.NumberIntVal(10)) |
| bazBody.SetAttributeValue("beep", cty.StringVal("boop")) |
| bazBody.SetAttributeValue("baz", cty.ListValEmpty(cty.String)) |
| |
| fmt.Printf("%s", f.Bytes()) |
| // Output: |
| // string = "foo" |
| // |
| // object = { |
| // bar = 5 |
| // baz = true |
| // foo = "foo" |
| // } |
| // bool = false |
| // path = env.PATH |
| // |
| // foo { |
| // hello = "world" |
| // } |
| // empty { |
| // } |
| // |
| // bar "a" "b" { |
| // baz { |
| // foo = 10 |
| // beep = "boop" |
| // baz = [] |
| // } |
| // } |
| } |
| |
| func ExampleExpression_RenameVariablePrefix() { |
| src := []byte( |
| "foo = a.x + a.y * b.c\n" + |
| "bar = max(a.z, b.c)\n", |
| ) |
| f, diags := hclwrite.ParseConfig(src, "", hcl.Pos{Line: 1, Column: 1}) |
| if diags.HasErrors() { |
| fmt.Printf("errors: %s", diags) |
| return |
| } |
| |
| // Rename references of variable "a" to "z" |
| for _, attr := range f.Body().Attributes() { |
| attr.Expr().RenameVariablePrefix( |
| []string{"a"}, |
| []string{"z"}, |
| ) |
| } |
| |
| fmt.Printf("%s", f.Bytes()) |
| // Output: |
| // foo = z.x + z.y * b.c |
| // bar = max(z.z, b.c) |
| } |