如何在Packer中使用文件配置器的用户变量?

Mar*_*Man 8 packer

我有一个包装工json喜欢:

"builders": [{...}],
"provisioners": [
          {
                "type": "file",
                "source": "packer/myfile.json",
                "destination": "/tmp/myfile.json"
           }
  ],
"variables": {
        "myvariablename": "value"
 }
Run Code Online (Sandbox Code Playgroud)

和myfile.json是:

{
   "var" : "{{ user `myvariablename`}}"
}
Run Code Online (Sandbox Code Playgroud)

进入文件的变量确实被替换,在文件可用于此处的唯一选项后,是否使用shell provisioner进行sed替换?

使用封隔器版本0.12.0

Ric*_*sen 8

您必须将这些作为环境变量传递.例如:

  "provisioners": [
    {
      "type": "shell"
      "environment_vars": [
        "http_proxy={{user `proxy`}}",
      ],
      "scripts": [
        "some_script.sh"
      ],
    }
  ],
  "variables": {
    "proxy": null
  }
Run Code Online (Sandbox Code Playgroud)

在脚本中你可以使用 $http_proxy


小智 -3

用户变量必须首先在模板的变量部分中定义。即使您希望用户变量默认为空字符串,也必须对其进行定义。这种明确性有助于减少新手了解可以使用模板中的变量修改哪些内容所需的时间。

变量部分是用户变量名称到默认值的键/值映射。默认值可以是空字符串。一个例子如下所示:

 {
 "variables": {
"aws_access_key": "",
 "aws_secret_key": ""
 },

"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
// ...
}]
}
Run Code Online (Sandbox Code Playgroud)

检查此链接以获取更多信息