Chef infra 在JSON中使用属性
可以在Chef Solo的JSON中指定属性值吗?我有一个带有运行列表的solo.json,我想在那里指定属性。厨师长文档似乎表明我可以做以下事情:Chef infra 在JSON中使用属性,chef-infra,chef-solo,Chef Infra,Chef Solo,可以在Chef Solo的JSON中指定属性值吗?我有一个带有运行列表的solo.json,我想在那里指定属性。厨师长文档似乎表明我可以做以下事情: { "hostname": { "test": "value2" }, "default_attributes": { "hostname": { "test": "value3" } }, "override_attributes":
{
"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值
有没有方法引用这些值?节点数据中唯一可以存储的属性级别是
普通
,其他所有属性都在聚合开始时重置,并从角色、环境和食谱中重建。您想要的东西如下所示:
{
"normal": {
"hostname": {
"test": "something"
}
},
"run_list": [
"recipe[hostname::default]"
]
}
我尝试使用上面的示例为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值是否正确?到目前为止,我唯一的解决方法是为每个“git_分支”创建一个新的配方:
属性,我希望使用chef solo进行测试,并将更新的运行列表添加到不同的JSON文件中。基本上,复制整个配方以更改单个节点。正常['my_cookbook']['git_branch']
值。不用说,这不应该是一个解决方案
使用Chef 14.0.202进行跟进:
不使用Chef Solo works在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使用。一个更简单的方法(至少对我来说)是创建“覆盖”只有一个带有节点的属性文件的cookbook.override
值,然后运行chef solo-c~/.chef/solo.rb-j~/.chef/solo.json-o my_overrides_cookbook,recipe[recipe_to_run]
,以保证它会覆盖您的默认提示。对于chef solo,在从角色文件中删除“default_attributes”:{…}之后,chef solo将尊重该角色文件中的所有属性。