Json 节点是否必须使用chef_类型?

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 Server的项目中,我们使用以下概念:

  • 节点
  • 角色
  • 环境
环境角色json文件看起来不错(它们有
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]"
        ]
    }
    
它是真正的厨师节点吗

is是否满足以下要求?

我假设,如果在节点、角色和环境中有“正常”
“键”:“值”
,则应用以下优先级(覆盖)顺序:node>role>environment,但根据该文档,优先级为role>environment>recipe,并且recipe与node位于同一个表单元格中。

我们一直在缓慢地修复JSON加载代码,使其不依赖于
JSON_类
自动膨胀位。据我所知,
chef_type
从未实际使用过,但某些测试代码仍然可以检查它


至于优先级问题:角色和环境可以包含默认和覆盖级别的属性。覆盖>正常>默认。一般来说,我们建议不要使用正常水平。它没有被弃用,但我们正朝着这个方向前进(非常缓慢,因为我们有很多年的时间来考虑兼容性)。

但是如果角色、节点和环境具有相同的级别,那么覆盖顺序是什么?是否为角色>环境>节点(根据)?还是像我想象的那样:节点>角色>环境(在阅读文档之前)?我的假设基于直觉:我将环境与一组机器相关联,将角色与在这些机器上运行的应用程序相关联,将节点与机器相关联。我认为,如果我想让每台机器都有一个特定的行为,我需要在节点中添加一些东西。节点只能有正常级别的数据,角色/环境不能使用该级别,因此不可能发生冲突。