Chef infra 如何将属性从打包机构建传递到coobook?

Chef infra 如何将属性从打包机构建传递到coobook?,chef-infra,packer,Chef Infra,Packer,我正在尝试从打包机构建中预先设置厨师属性,但似乎无法使其正常工作: "provisioners": [ { "chef_environment": "test_cookbook", "environments_path": "environments", "execute_command": "{{if .Sudo}}sudo {{end}}chef-solo --no-color --legacy-mode -c {{.ConfigPath

我正在尝试从打包机构建中预先设置厨师属性,但似乎无法使其正常工作:

    "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

我已经提到过这一点。

当为打包机的Chef provisioner使用
json
键时,传递给Chef的属性将是以嵌套在
json
键中的键开始的键值对。因此,您可以从
test\u食谱
键中访问属性,如:

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"
}

似乎
my\u attr
键嵌套在映射中的
test\u食谱
键中。您是否尝试过使用
test\u食谱
键?这就是答案,谢谢!