是否可以在Chef Solo的JSON中指定属性值?我有一个带有运行列表的solo.json,我想在那里指定属性。 Chef文档似乎表明我应该可以做类似的事情:
{
"hostname": {
"test": "value2"
},
"default_attributes": {
"hostname": {
"test": "value3"
}
},
"override_attributes": {
"hostname": {
"test": "value4"
}
},
"default": {
"hostname": {
"test": "value5"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
但是,每当我尝试访问配方中的值时:
p node['hostname']['test']
我只是获取了attributes / default.rb中定义的值,如果我没有在那里定义它,我会得到一个nil值。
有没有办法引用这些值?
答案 0 :(得分:3)
您可以在节点数据中存储的唯一属性级别为normal
,其他所有属性在融合开始时重置,并从角色,环境和烹饪书重建。你想要像这样的东西:
{
"normal": {
"hostname": {
"test": "something"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
答案 1 :(得分:1)
我尝试使用上面的示例在Chef-solo的JSON文件中设置属性,并且"normal": {...}
块被完全忽略了。已读取运行列表,但属性似乎永远无法正常工作。
我的命令是:
chef-solo -c /path/to/config_file.rb -j /path/to/file.json
我的JSON文件:
{
"name": "my_json_file",
"description": "JSON run-list and attributes.",
"normal": {
"my_cookbook": {
"git_branch": "staging"
}
},
"run_list": [
"recipe[my_cookbook::recipe1]",
"recipe[my_cookbook::recipe2]",
]
}
在收敛期间,Chef直接回到attributes/default.rb
内部的默认值。是否正确输入JSON值?到目前为止,我唯一的解决方法是为我想用Chef-solo测试的每个"git_branch":
属性创建一个新配方,并将更新后的运行列表添加到另一个JSON文件中。本质上,复制整个配方以更改单个node.normal['my_cookbook']['git_branch']
值。不用说,这不是解决方案。
使用Chef 14.0.202
答案 2 :(得分:0)
跟进:
未通过Chef Solo工作在JSON文件中设置属性优先级。 JSON应该看起来像这样:
{
"name": "my_json_file",
"description": "JSON run-list and attributes.",
"my_cookbook": {
"git_branch": "staging"
},
"run_list": [
"recipe[my_cookbook::recipe1]",
"recipe[my_cookbook::recipe2]",
]
}
不包括"normal": {...}
或"default_attributes": {...}
等,将传递Chef-solo使用的属性。