| --- |
| page_title: Generating code for config spec. |
| description: Learn how to generate the HCL2 configuration of your component easily. |
| --- |
| |
| # Auto Generate the HCL2 code of a plugin |
| |
| From v1.5, Packer can be configured using HCL2. Because Packer has so many |
| builders, provisioners, and post-processors, we created a on code generation |
| tool to add the HCL2-enabling code more easily. You can use this code generator |
| to create the HCL2 spec code of your custom plugin simply. |
| It's a Go binary package made available through the Packer plugin SDK |
| |
| 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-plugin-sdk/cmd/packer-sdc@latest` |
| |
| - Add `//go:generate packer-sdc mapstructure-to-hcl2 -type Config` at the top of |
| `config.go` |
| |
| - run `go generate ./my/example-plugin/...` |
| |
| This will generate a `my/example-plugin/config.hcl2spec.go` file containing |
| the configuration fields of `Config`. |
| |
| - Make sure that all the nested structs of `Config` are also auto generated the |
| same way. |
| |
| - Now we only need to make your Builder implement the interface by adding the |
| following snippet: |
| |
| ```go |
| func (b *Builder) ConfigSpec() hcldec.ObjectSpec { return b.config.FlatMapstructure().HCL2Spec() } |
| ``` |
| |
| 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-plugin-amazon/blob/main/builder/ebs/builder.go) |