如何将属性从打包程序版本传递到厨师coobook?

时间:2019-05-15 23:49:18

标签: chef packer

我正在尝试从打包程序版本中预设厨师属性,但是我似乎无法正常工作:

    "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

1 个答案:

答案 0 :(得分:1)

当为Packer的Chef供应商使用json键时,传递给Chef的属性将是键值对,该键值对以嵌套在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"
}