如何将Packer构建的属性传递给Chef Cookbook?

3
我试图在Packer构建中预设一个Chef属性,但似乎无法使其工作:

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

它总是作为一个空值传递

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

我已经参考了这个在Chef Solo JSON中使用属性


1
看起来 my_attr 键是嵌套在映射中的 test_cookbook 键内部。你尝试过访问 test_cookbook 键吗? - Matt Schuchard
那就是答案,谢谢! - user_dev
1个回答

3
当使用Packer的Chef provisioner的json关键字时,传递给Chef的属性将是以该关键字嵌套内部的键值对。因此,您可以从test_cookbook关键字中访问您的属性,例如:
output="#{Chef::Log.info(node['test_cookbook']['my_attr'])}"
log output
file "/tmp/#{node['test_cookbook']['my_attr']}" do
  content output
end

这应该将String test赋值给本地变量output,并将其作为内容放置在您的临时文件中。这是由于您在json键中设置的映射造成的:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接