website/content/guides/hcl/component-object-spec.mdx
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
[!IMPORTANT]
Documentation Update: Product documentation previously located in/websitehas moved to thehashicorp/web-unified-docsrepository, where all product documentation is now centralized. Please make contributions directly toweb-unified-docs, since changes to/websitein this repository will not appear on developer.hashicorp.com. ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
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:
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