4
0

More than 1 year has passed since last update.

`packer hcl2_upgrade` を実行し生成された `.pkr.hcl` ファイルに `"template: hcl2_upgrade:3: unexpected \"\\\\\" in operand"` が出力された

Last updated at Posted at 2023-05-31

はじめに

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 を実行すると...

sample_packer_template.json
{
  "builders": [{
    "type": "amazon-ebs",
    ...
    "ami_name": "ami_name-{{isotime \"2006-01-02-15-04-MST\"| clean_resource_name}}"
  }],
}

下記のような .pkr.hcl ファイルが生成されます。

sample_packer_template.json.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 を実行すると...

sample_packer_template.json
{
  "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 ファイルが出力されます。

sample_packer_template.json.pkr.hcl
source "amazon-ebs" "autogenerated_1" {
  ami_name      = "ami_name-{{ clean_resource_name `${legacy_isotime("2006-01-02-15-04-MST")}` }}"

References

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0