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 Configat the top of- config.go
- run - go generate ./my/example-plugin/...- This will generate a - my/example-plugin/config.hcl2spec.gofile containing the configuration fields of- Config.
- Make sure that all the nested structs of - Configare 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 generatecommand again.
A good example of this is the Config struct of the amazon-ebs builder