135 lines
3.6 KiB
Plaintext
135 lines
3.6 KiB
Plaintext
---
|
|
description: |
|
|
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.
|
|
page_title: packer hcl2_upgrade - Commands
|
|
sidebar_title: <tt>hcl2_upgrade</tt>
|
|
---
|
|
|
|
-> **Note:** This command is Beta, and currently being improved upon; do not
|
|
hesitate [opening a new
|
|
issue](https://github.com/hashicorp/packer/issues/new/choose) if you find
|
|
something wrong.
|
|
|
|
# `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:
|
|
|
|
```shell-session
|
|
$ packer hcl2_upgrade my-template.json
|
|
|
|
Successfully created my-template.json.pkr.hcl
|
|
```
|
|
|
|
## Upgrading variables file
|
|
|
|
From **v1.7.1**, the `hcl2_upgrade` command can upgrade a variables file.
|
|
|
|
<Tabs>
|
|
<Tab heading="Original file (variables.json)">
|
|
|
|
```json
|
|
{
|
|
"variables": {
|
|
"aws_region": null,
|
|
"aws_secondary_region": "{{ env `AWS_DEFAULT_REGION` }}",
|
|
"aws_secret_key": "",
|
|
"aws_access_key": "",
|
|
},
|
|
"sensitive-variables": [
|
|
"aws_secret_key",
|
|
"aws_access_key",
|
|
]
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
<Tab heading="Result file (variables.pkr.hcl)">
|
|
|
|
```hcl
|
|
variable "aws_access_key" {
|
|
type = string
|
|
default = ""
|
|
sensitive = true
|
|
}
|
|
|
|
variable "aws_region" {
|
|
type = string
|
|
}
|
|
|
|
variable "aws_secondary_region" {
|
|
type = string
|
|
default = "${env("AWS_DEFAULT_REGION")}"
|
|
}
|
|
|
|
variable "aws_secret_key" {
|
|
type = string
|
|
default = ""
|
|
sensitive = true
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## 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:
|
|
|
|
- `` {{ user `my_var` }} `` becomes `${var.my_var}`.
|
|
- `` {{ env `my_var` }} `` becomes `${var.my_var}`. Packer HCL2 supports
|
|
environment variables through input variables. See
|
|
[docs](/docs/templates/hcl_templates/variables#environment-variables)
|
|
for more info.
|
|
- `{{ timestamp }}` becomes `${local.timestamp}`, the local variable
|
|
will be created for all generated files.
|
|
- `` {{ build `ID` }} `` becomes `${build.ID}`.
|
|
|
|
The rest of the calls should remain go template calls for now, this will be
|
|
improved over time.
|
|
|
|
-> **Note**: The `hcl2_upgrade` command does its best to transform template
|
|
calls to their JSON counterpart, but it might fail. In that case the
|
|
`hcl2_upgrade` command will simply output the local HCL2 block without
|
|
transformation and with the error message in a comment. We are currently
|
|
working on improving this part of the transformer.
|
|
|
|
## Options
|
|
|
|
- `-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.
|
|
|
|
## 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 v1.7.0 and lower, `hcl2_upgrade` doesn't upgrade variables to local variables,
|
|
and it is up to you to upgrade them manually. Upgrade to **v1.7.1** to let the command do it
|
|
automatically for you.
|
|
|
|
Here is an example of a local variable using a string input variables:
|
|
|
|
```hcl
|
|
variable "foo" {
|
|
default = "Hello,"
|
|
}
|
|
|
|
variable "bar" {
|
|
default = "World!"
|
|
}
|
|
|
|
locals {
|
|
baz = "${var.foo} ${var.bar}"
|
|
}
|
|
```
|