packer-cn/website/source/guides/hcl/component-object-spec/index.html.md.erb

42 lines
1.5 KiB
Plaintext
Raw Normal View History

2019-12-18 09:51:32 -05:00
---
layout: guides
page_title: Generating code for config spec.
sidebar_current: hcl-component-object-spec
2019-12-18 09:51:32 -05:00
description: |-
Learn how to generate the HCL2 configuration of your component easily.
---
# 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
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`.
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:
* 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`
This will generate a `my/example-plugin/config.hcl2spec.go` file containing
the configuration fields of Config.
* Make sure that all the nested fields of Config are auto generated the same way.
* Now we only need to make Builder implement the interface by adding the
following snippet:
```go
func (b *Builder) ConfigSpec() hcldec.ObjectSpec { return b.config.FlatMapstructure().HCL2Spec() }
```
From now one every time you add or change a field of Config you will need to
run he `go generate` command again.