如何在打包程序配置脚本中传递参数?

时间:2017-12-01 15:18:32

标签: packer

我正在努力将输入参数传递给打包器配置脚本。我尝试了各种选择,但没有快乐。

目标是我的provision.sh应该接受我在打包程序构建期间发送的输入参数。

packer build -var role = abc test.json

我能够在json文件中获取用户变量但是我无法传递它的配置脚本。我必须根据输入参数做出决定。

我试过像

这样的东西
"provisioners": 
{
  "type": "shell",
  "scripts": [
  "provision.sh {{user `role`}}"
 ]
}

但是打包器验证本身失败,没有此类文件/目录错误消息。

如果有人可以帮助我,那将是真正的帮助。

提前致谢。

2 个答案:

答案 0 :(得分:11)

您应该使用environment_vars选项,请参阅文档Shell Provisioner - environment_vars

示例:

"provisioners": [
  {
    "type": "shell"
    "environment_vars": [
      "HOSTNAME={{user `vm_name`}}",
      "FOO=bar"
    ],
    "scripts": [
      "provision.sh"
    ],
  }
 ]

答案 1 :(得分:4)

如果您的脚本已配置为使用参数;您只需将其作为inline而不是scripts数组运行。

为了做到这一点,脚本必须已经存在于系统上 - 您可以通过使用file配置程序将其复制到系统来实现此目的。

  "provisioners": [
    {
      "type":        "file",
      "source":      "scripts/provision.sh",
      "destination": "/tmp/provision.sh"
    },
    {
      "type": "shell",
      "inline": [
        "chmod u+x /tmp/provision.sh",
        "/tmp/provision.sh {{user `vm_name`}}"]
    }
  ]