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

Tha*_*ayz 9 packer

我很难将输入参数传递给打包器配置脚本.我尝试了各种选择,但没有快乐.

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

packer build -var role = abc test.json

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

我试过类似的东西

"provisioners": 
{
  "type": "shell",
  "scripts": [
  "provision.sh {{user `role`}}"
 ]
}
Run Code Online (Sandbox Code Playgroud)

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

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

提前致谢.

Ric*_*sen 17

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

例:

"provisioners": [
  {
    "type": "shell"
    "environment_vars": [
      "HOSTNAME={{user `vm_name`}}",
      "FOO=bar"
    ],
    "scripts": [
      "provision.sh"
    ],
  }
 ]
Run Code Online (Sandbox Code Playgroud)

  • $1、$2 等是_参数_。_环境变量_可以在脚本中与其名称一起使用,即“$HOSTNAME”和“$FOO”。我建议您开始阅读一些 (ba)sh 脚本的介绍,例如 http://tldp.org/LDP/abs/html/ (2认同)

TJ *_*dle 5

如果您的脚本已配置为使用参数;您只需要运行它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`}}"]
    }
  ]
Run Code Online (Sandbox Code Playgroud)