»hcl2_upgrade Command

The packer hcl2_upgrade Packer command is used to transpile a JSON configuration template to it's formatted HCL2 counterpart. The command will return a zero exit status on success, and a non-zero exit status on failure.

Example usage:

$ packer hcl2_upgrade my-template.json

Successfully created my-template.json.pkr.hcl

»User variables using other user variables

Packer JSON recently started allowing using user variables from variables. In HCL2, input variables cannot use functions nor other variables and are virtually static, local variables must be used instead to craft more dynamic variables. For that reason hcl2_upgrade cannot decide for you what local variables to create and the hcl2_upgrade command will simply output all seen variables as an input variable, it is now up to you to create a local variable.

Here is an example of a local variable using a string input variables:

variable "foo" {
  default = "Hello,"

variable "bar" {
  default = "World!"

locals {
  baz = "${var.foo} ${var.bar}"

»Go template functions

hcl2_upgrade will do its best to transform your go template calls to HCL2, here is the list of calls that should get transformed:

The rest of the calls should remain go template calls for now, this will be improved over time.


  • -output-file - File where to put the hcl2 generated config. Defaults to JSON_TEMPLATE.pkr.hcl
  • -with-annotations - Adds helper annotations with information about the generated HCL2 blocks.