如何将打包程序构建的属性传递给厨师食谱?

How to pass an attribute from a packer build to a chef coobook?

我正在尝试从加壳构建中预先设置厨师属性,但我似乎无法让它工作:

    "provisioners": [
    {
      "chef_environment": "test_cookbook",

      "environments_path": "environments",
      "execute_command": "{{if .Sudo}}sudo {{end}}chef-solo --no-color --legacy-mode -c {{.ConfigPath}} -j {{.JsonPath}}",
      "json": {
          "test_cookbook": {
            "my_attr": "test"
          }
      },
      "run_list": [
        "test_cookbook"
      ],
      "type": "chef-solo",
    }
  ]

它总是作为 nil 值传递

output="#{Chef::Log.info(node['my_attr'])}"
log output
file "/tmp/#{node['my_attr']}" do
  content output
end

我已经提到了这个Using attributes in Chef Solo JSON

当为 Packer 的 Chef 供应器使用 json 键时,传递给 Chef 的属性将是 key-value 对,以嵌套在 json 键中的键开始。因此,您可以从 test_cookbook 键中访问您的属性,例如:

output="#{Chef::Log.info(node['test_cookbook']['my_attr'])}"
log output
file "/tmp/#{node['test_cookbook']['my_attr']}" do
  content output
end

这应该将字符串 test 分配给局部变量 output 并将其作为内容放入临时文件中。这是由于您在 json 键中设置的映射为:

"test_cookbook": {
  "my_attr": "test"
}