Packer
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 ofconfig.go
run
go generate ./my/example-plugin/...
This will generate a
my/example-plugin/config.hcl2spec.go
file containing the configuration fields ofConfig
.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