Json 节点是否必须使用chef_类型?
在使用Chef Server的项目中,我们使用以下概念:Json 节点是否必须使用chef_类型?,json,chef-infra,chef-attributes,Json,Chef Infra,Chef Attributes,在使用Chef Server的项目中,我们使用以下概念: 节点 角色 环境 环境和角色json文件看起来不错(它们有chef_类型和json_类): ENV.json { "name": "ENV", "chef_type": "environment", "json_class": "Chef::Environment", ... "cookbook_versions": { ... } } { "name": "
- 节点
- 角色
- 环境
chef_类型
和json_类
):
- ENV.json
{ "name": "ENV", "chef_type": "environment", "json_class": "Chef::Environment", ... "cookbook_versions": { ... } }
{ "name": "my_role", "chef_type": "role", "json_class": "Chef::Role", ... "run_list": [ "role[my_role]", "recipe[my_recipe]" ] }
{ "chef_environment": "ENV", "name": "my.machine", "normal": { "key": "val" }, "run_list": [ "role[my_role]" ] }
- 我的角色.json
{ "name": "ENV", "chef_type": "environment", "json_class": "Chef::Environment", ... "cookbook_versions": { ... } }
{ "name": "my_role", "chef_type": "role", "json_class": "Chef::Role", ... "run_list": [ "role[my_role]", "recipe[my_recipe]" ] }
{ "chef_environment": "ENV", "name": "my.machine", "normal": { "key": "val" }, "run_list": [ "role[my_role]" ] }
chef\u类型
,没有json\u类
):
- my.machine.json
{ "name": "ENV", "chef_type": "environment", "json_class": "Chef::Environment", ... "cookbook_versions": { ... } }
{ "name": "my_role", "chef_type": "role", "json_class": "Chef::Role", ... "run_list": [ "role[my_role]", "recipe[my_recipe]" ] }
{ "chef_environment": "ENV", "name": "my.machine", "normal": { "key": "val" }, "run_list": [ "role[my_role]" ] }
我假设,如果在节点、角色和环境中有“正常”
“键”:“值”
,则应用以下优先级(覆盖)顺序:node>role>environment,但根据该文档,优先级为role>environment>recipe,并且recipe与node位于同一个表单元格中。我们一直在缓慢地修复JSON加载代码,使其不依赖于JSON_类
自动膨胀位。据我所知,chef_type
从未实际使用过,但某些测试代码仍然可以检查它
至于优先级问题:角色和环境可以包含默认和覆盖级别的属性。覆盖>正常>默认。一般来说,我们建议不要使用正常水平。它没有被弃用,但我们正朝着这个方向前进(非常缓慢,因为我们有很多年的时间来考虑兼容性)。但是如果角色、节点和环境具有相同的级别,那么覆盖顺序是什么?是否为角色>环境>节点(根据)?还是像我想象的那样:节点>角色>环境(在阅读文档之前)?我的假设基于直觉:我将环境与一组机器相关联,将角色与在这些机器上运行的应用程序相关联,将节点与机器相关联。我认为,如果我想让每台机器都有一个特定的行为,我需要在节点中添加一些东西。节点只能有正常级别的数据,角色/环境不能使用该级别,因此不可能发生冲突。