假设我应该在最新的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
答案 0 :(得分:0)
我认为你的第二个是override_attributes
,这是一个解决方法。遗憾的是,属性中数组合并的机制非常棘手,并且依赖于很多Chef内部,所以这可能是最简单的选择。