0

In https://packer.io/guides/hcl/from-json-v1/, it says

Note: Starting from version 1.5.0 Packer can read HCL2 files.

And my packer is packer_1.5.5_linux_amd64.zip which is suppose to be able to read HCL2 files. However, when I tried it, I got

$ packer build -only=docker hcl-example
Failed to parse template: Error parsing JSON: invalid character '#' looking for beginning of value
At line 1, column 1 (offset 1):
    1: #
      ^

==> Builds finished but no artifacts were created.

$ packer build -h 
Usage: packer build [options] TEMPLATE

  Will execute multiple builds in parallel as defined in the template.
  The various artifacts created by the template will be outputted.

Options:

  -color=false                  Disable color output. (Default: color)
  -debug                        Debug mode enabled for builds.
  -except=foo,bar,baz           Run all builds and post-procesors other than these.
  -only=foo,bar,baz             Build only the specified builds.
  -force                        Force a build to continue if artifacts exist, deletes existing artifacts.
  -machine-readable             Produce machine-readable output.
  -on-error=[cleanup|abort|ask] If the build fails do: clean up (default), abort, or ask.
  -parallel=false               Disable parallelization. (Default: true)
  -parallel-builds=1            Number of builds to run in parallel. 0 means no limit (Default: 0)
  -timestamp-ui                 Enable prefixing of each ui output with an RFC3339 timestamp.
  -var 'key=value'              Variable for templates, can be used multiple times.
  -var-file=path                JSON file containing user variables. [ Note that even in HCL mode this expects file to contain JSON, a fix is comming soon ]

and I don't see any switches from above to switch to HCL2 mode.

What I'm missing here?

$ packer version
Packer v1.5.5

$ cat hcl-example
# the source block is what was defined in the builders section and represents a
# reusable way to start a machine. You build your images from that source.source

"amazon-ebs" "example" {
    ami_name = "packer-test"
    region = "us-east-1"
    instance_type = "t2.micro"
}

[UPDATE:]

To address Matt's comment/concern, I've changed the content of hcl-example to the whole list in https://packer.io/guides/hcl/from-json-v1/, and

mv hcl-example hcl-example.hcl

$ packer validate hcl-example.hcl
Failed to parse template: Error parsing JSON: invalid character '#' looking for beginning of value
At line 1, column 1 (offset 1):
    1: #
      ^
xpt
  • 20,363
  • 37
  • 127
  • 216
  • You probably need the `.hcl` extension for the file, as it may be using the extension to determine the language of the template. Additionally, you specify `-only=docker`, but there is no `docker` builder in the template. – Matthew Schuchard Apr 04 '20 at 11:40
  • The actual packer HCL2 config file that I tested _first_ has the .hcl extension and there is docker builder in it, and it fails the same way. I use this simplified version to stress that the problem is at the template file parsing phase, not to distract that fact with glory details. But thanks to your suggestion, I've updated my OP. – xpt Apr 04 '20 at 12:39

1 Answers1

1

Named it with .pkr.hcl extension solved the problem.

xpt
  • 20,363
  • 37
  • 127
  • 216