【问题标题】:Is chef_type mandatory for a node?chef_type 对于节点是强制性的吗?
【发布时间】:2016-12-22 08:03:18
【问题描述】:

在使用 Chef Server 的项目中,我们使用以下概念:

  • 节点
  • 角色
  • 环境

环境角色 json文件看起来不错(它们有chef_typejson_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?
我想如果我在节点、角色和环境中有“正常”"key":"value",则应用以下优先(覆盖)顺序:节点>角色>环境,但根据该文档,优先级是角色 > 环境 > 配方,配方与节点位于同一表格单元格中。

【问题讨论】:

    标签: json chef-infra chef-attributes


    【解决方案1】:

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

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

    【讨论】:

    • 但是如果角色、节点和环境同级,那么覆盖顺序是什么?是 role > environment > node (根据docs.chef.io/attributes.html#attribute-precedence)吗?还是我想的那样:node > role > environment(在阅读文档之前)?我的假设是基于直觉:我将环境关联到一组机器,将角色关联到在这些机器上运行的应用程序,将节点关联到机器。而且我相信,如果我想让每台机器都有特定的行为,我需要在节点中添加一些东西。
    • 节点只能有正常级别的数据,角色/环境不能使用该级别,因此不可能发生冲突。
    猜你喜欢
    • 1970-01-01
    • 2015-09-11
    • 2021-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2020-07-05
    相关资源
    最近更新 更多