はじめに
Packer の v1.7.0 から Packer template の記述方法として JSON ではなく HCL2 を利用することが推奨されています。
JSON で記述された Packer template を HCL2 形式に変換する hcl2_upgrade
コマンドを実行し生成された .pkr.hcl
ファイルに、 "template: hcl2_upgrade:3: unexpected \"\\\\\" in operand"
が出力されたときの対処法を記載します。
対処方法
今回はエスケープに利用している \"
(escaped quote) が原因でうまく JSON をパース出来ていませんでした。
\"
(escaped quote) を "`" (backtick) に変更することでこの問題を回避することが出来ます。
Before
下記のように定義された JSON ファイルに対して packer hcl2_upgrade
を実行すると...
{
"builders": [{
"type": "amazon-ebs",
...
"ami_name": "ami_name-{{isotime \"2006-01-02-15-04-MST\"| clean_resource_name}}"
}],
}
下記のような .pkr.hcl
ファイルが生成されます。
# could not parse template for following block: "template: hcl2_upgrade:3: unexpected \"\\\\\" in operand"
source "amazon-ebs" "autogenerated_1" {
ami_name = "ami_name-{{isotime \"2006-01-02-15-04-MST\"| clean_resource_name}}"
After
記述を変更し packer hcl2_upgrade
を実行すると...
{
"builders": [{
"type": "amazon-ebs",
...
"ami_name": "ami_name-{{isotime `2006-01-02-15-04-MST`| clean_resource_name}}"
}],
}
"template: hcl2_upgrade:3: unexpected \"\\\\\" in operand"
が .pkr.hcl
ファイル内に出力されずに意図した形式 (legacy_isotime
) を利用した .pkr.hcl
ファイルが出力されます。
source "amazon-ebs" "autogenerated_1" {
ami_name = "ami_name-{{ clean_resource_name `${legacy_isotime("2006-01-02-15-04-MST")}` }}"
References