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

问题描述:

假设我应该在最新的apt=6.1.4食谱内设置unattended_upgrades。对于在厨师中用什么样的用例来替换cookbook数组属性?

我用以下作用:

{                                      
    "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": "[email protected]" 
     } 
    } 
} 

但配置的最后一部分是这样的:

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

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

我发现只有一个解决方法 - 重置属性default_attributes部分default_base角色。如下所示:

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

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

这是什么?

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

我想你的意思是那些第二是override_attributes,这是一个办法解决这个。不幸的是,属性中数组合并的机制非常棘手,并且依赖于大量的Chef内部,所以这可能是最简单的选择。