chef_type 对一个节点来说是必须的吗?
Is chef_type mandatory for a node?
在使用 Chef Server 的项目中,我们使用了以下概念:
- 节点
- 角色
- 环境
environment 和 role json 文件看起来不错(它们有 chef_type
和 json_class
):
ENV.json
{
"name": "ENV",
"chef_type": "environment",
"json_class": "Chef::Environment",
...
"cookbook_versions": {
...
}
}
my_role.json
{
"name": "my_role",
"chef_type": "role",
"json_class": "Chef::Role",
...
"run_list": [
"role[my_role]",
"recipe[my_recipe]"
]
}
但是节点看起来像这样(没有chef_type
,没有json_class
):
my.machine.json
{
"chef_environment": "ENV",
"name": "my.machine",
"normal": {
"key": "val"
},
"run_list": [
"role[my_role]"
]
}
它是真正的 Chef 节点吗?
并且是否满足以下precedence?
我假设如果我在节点、角色和环境中有 "normal" "key":"value"
,则应用以下优先级(覆盖)顺序:node > role > environment,但是根据该文档,优先级是 role > environment > recipe 并且 recipe 与节点在同一个 table 单元格中。
我们一直在慢慢修复 JSON 加载代码,使其不依赖于 json_class
auto-inflation 位。据我所知,chef_type
从未实际使用过,但它可能仍会被某些测试代码检查。
关于优先级问题:角色和环境可以包含默认和覆盖级别的属性。覆盖>正常>默认。一般来说,我们建议不要使用正常级别。它没有被弃用,但我们正在朝那个方向前进(非常缓慢,因为我们有很多年的兼容性需要考虑)。
在使用 Chef Server 的项目中,我们使用了以下概念:
- 节点
- 角色
- 环境
environment 和 role json 文件看起来不错(它们有 chef_type
和 json_class
):
ENV.json
{ "name": "ENV", "chef_type": "environment", "json_class": "Chef::Environment", ... "cookbook_versions": { ... } }
my_role.json
{ "name": "my_role", "chef_type": "role", "json_class": "Chef::Role", ... "run_list": [ "role[my_role]", "recipe[my_recipe]" ] }
但是节点看起来像这样(没有chef_type
,没有json_class
):
my.machine.json
{ "chef_environment": "ENV", "name": "my.machine", "normal": { "key": "val" }, "run_list": [ "role[my_role]" ] }
它是真正的 Chef 节点吗?
并且是否满足以下precedence?
我假设如果我在节点、角色和环境中有 "normal" "key":"value"
,则应用以下优先级(覆盖)顺序:node > role > environment,但是根据该文档,优先级是 role > environment > recipe 并且 recipe 与节点在同一个 table 单元格中。
我们一直在慢慢修复 JSON 加载代码,使其不依赖于 json_class
auto-inflation 位。据我所知,chef_type
从未实际使用过,但它可能仍会被某些测试代码检查。
关于优先级问题:角色和环境可以包含默认和覆盖级别的属性。覆盖>正常>默认。一般来说,我们建议不要使用正常级别。它没有被弃用,但我们正在朝那个方向前进(非常缓慢,因为我们有很多年的兼容性需要考虑)。