diff --git a/website/source/guides/hcl/component-object-spec/index.html.md.erb b/website/source/guides/hcl/component-object-spec/index.html.md.erb index 4d75fc4e4..f548abdc8 100644 --- a/website/source/guides/hcl/component-object-spec/index.html.md.erb +++ b/website/source/guides/hcl/component-object-spec/index.html.md.erb @@ -8,27 +8,28 @@ description: |- # Auto Generate the HCL2 code of a plugin -From version 1.5.0 Packer can be configured using HCL2. Because Packer has so -many builders, provisioner & post-proessors, we relied on code generation to +From v1.5, Packer can be configured using HCL2. Because Packer has so many +builders, provisioner & post-processors, we relied on code generation to iterate more easily. The good new is that you can benefit from this code -generator to get the HCL2 spec code of your component simply. Is it a Go binary -package and is located in `cmd/mapstructure-to-hcl2`. +generator to get the HCL2 spec code of your component simply. It's a Go binary +package and is located in [`cmd/mapstructure-to-hcl2`](https://github.com/hashicorp/packer/tree/master/cmd/mapstructure-to-hcl2). -Say you want to configure the Config struct of a Builder in a package located -in `my/example-plugin/config.go`. Here are some simple steps you can follow to -have most of the code generated: +Say you want to configure the `Config` struct of a `Builder` in a package +located in `my/example-plugin/config.go`. Here are some simple steps you can +follow to make it HCL2 enabled: * run `go install github.com/hashicorp/packer/cmd/mapstructure-to-hcl2` * Add `//go:generate mapstructure-to-hcl2 -type Config` at the top of `config.go` -* run `go generate my/example-plugin` +* run `go generate ./my/example-plugin/...` This will generate a `my/example-plugin/config.hcl2spec.go` file containing - the configuration fields of Config. + the configuration fields of `Config`. -* Make sure that all the nested fields of Config are auto generated the same way. +* Make sure that all the nested structs of `Config` are also auto generated the + same way. * Now we only need to make Builder implement the interface by adding the following snippet: @@ -39,3 +40,5 @@ following snippet: From now on every time you add or change a field of Config you will need to run the `go generate` command again. + +A good example of this is the [Config struct of the amazon-ebs builder](https://github.com/hashicorp/packer/blob/master/builder/amazon/ebs/builder.go) \ No newline at end of file