在厨师中替换cookbook数组属性有什么用例?

时间:2017-10-20 08:16:27

标签: chef

假设我应该在最新的unattended_upgrades食谱中设置apt=6.1.4

我使用以下角色:

{                                                                                                                                                     
  "name": "default_base",
  "description": "Role applied to all workstations and servers",
  "json_class": "Chef::Role",
  "default_attributes": {
    "apt": {
      "unattended_upgrades" : { 
        "enable": "true",
        "allowed_origins" : [
          "${distro_id}:${distro_codename}-security"
        ], 
        "mail": "ops@example.com"
      }   
    }
}

但配置的最后部分如下:

Unattended-Upgrade::Allowed-Origins {
        "Ubuntu xenial";
        "${distro_id}:${distro_codename}-security";
};

Ubuntu xenial是apt cookbook`instributes / default.rb文件中定义的数组元素。并且它与文档中描述的角色属性合并。这是因为它是数组。

我发现只有一种解决方法 - 在default_attributes角色的default_base部分重置该属性。如下:

"default_attributes": {
  "apt": {
    "unattended_upgrades" : {
      "allowed_origins" : []
    }
  }
}

因此,生成的角色在同一角色中包含相同的属性声明,但在不同的优先级中。

这是什么?

Common use case | Good solution | Dirty hack | Unskillful engineer

1 个答案:

答案 0 :(得分:0)

我认为你的第二个是override_attributes,这是一个解决方法。遗憾的是,属性中数组合并的机制非常棘手,并且依赖于很多Chef内部,所以这可能是最简单的选择。