如何将打包程序构建的属性传递给厨师食谱?
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"
}
我正在尝试从加壳构建中预先设置厨师属性,但我似乎无法让它工作:
"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"
}