2017-10-20 24 views
0

Supposons que je devrais configurer unattended_upgrades dans le dernier livre de recettes apt=6.1.4.Quels sont les cas d'utilisation pour remplacer l'attribut de tableau de recettes dans le chef?

J'utilise le rôle suivant pour que:

{                                      
    "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]" 
     } 
    } 
} 

Mais la dernière partie de config ressemble:

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

Ubuntu xenial est un élément de tableau défini dans Cookbook apt `attributs/fichier default.rb . Et il est fusionné avec l'attribut de rôle tel que décrit dans le doc. C'est parce que c'est un tableau.

J'ai trouvé seulement une solution de contournement - est un attribut de remise à zéro dans la section default_attributes dans le rôle default_base. Comme suit:

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

En conséquence, le rôle résultant contient la même déclaration d'attribut dans le même rôle, mais dans différents niveaux de priorité.

Qu'est ce que c'est?

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

Répondre

0

Je pense que vous vouliez dire la deuxième de ceux qui doivent être override_attributes, qui est une solution de contournement pour cela. Malheureusement, la mécanique de fusion des matrices dans les attributs est très compliquée et dépend de beaucoup d'internes de Chef, donc c'est probablement l'option la plus facile.