我正在尝试从打包程序版本中预设厨师属性,但是我似乎无法正常工作:
"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。
答案 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"
}