apt-get update et apt-get upgrade dans Chef

Si le package "nginx" dans Chef est traduit en apt-get install nginx sur un noeud Ubuntu, que peut-on écrire dans une recette de Chef qui se traduirait par:

 apt-get -y update apt-get -y upgrade 

Impossible de trouver dans le livre de recettes apt .

    La recette par défaut du livre de recettes «apt» Opscode exécutera apt-get update pour s’assurer que le cache du paquet est mis à jour. Nous vous recommandons de placer cette liste au début de la liste d’exécution de votre nœud afin de pouvoir installer les versions ultérieures avec les versions appropriées.

    Nous déconseillons généralement aux utilisateurs d’utiliser « apt-get upgrade » dans une recette, pour deux raisons.

    1. apt-get peut mettre à jour un paquet qui a des problèmes de configuration ou d’autres problèmes qui ne peuvent pas être résolus sans exécuter à nouveau la commande, ou exécuter manuellement d’autres commandes apt / dpkg.
    2. Les mises à niveau automatisées de tous les packages sur le système peuvent avoir des effets secondaires inattendus sur le système en cours d’exécution (les cas d’arête sont nombreux et peut-être épineux, donc je ne peux pas les couvrir tous).

    Au lieu de cela, utilisez l’action “mettre à niveau” pour les packages qui doivent toujours être mis à jour vers la dernière version.

     package "nginx" do action :upgrade end 

    Si vous réutilisez un livre de recettes qui définit le livre de recettes, vous pouvez écrire une recette qui modifie l’action de la ressource existante, comme ceci:

     resources("package[nginx]").action(:upgrade) 

    La méthode #resources dans une recette recherchera dans la collection de ressources la ressource spécifiée (package nginx). Ensuite, en envoyant la méthode #action avec l’argument :upgrade indiquera au chef que l’action doit être mise à niveau.

    Modifier la mise à jour : soyez prudent lorsque vous choisissez des paquets qui seraient mis à niveau automatiquement de cette manière. Un changement en amont d’un paquet peut avoir des effets néfastes sur le système. Cela est particulièrement vrai si un tel package effectue un redémarrage des services qu’il gère lors des scripts de post-installation. Connaissez votre infrastructure et, en cas de doute, exécutez votre propre référentiel de packages contenant les packages essentiels dont vous avez besoin pour la stack d’applications.

    La recette du chef Apt ne sera pas mise à jour avec chaque chef cuisinier. L’atsortingbut qui contrôle cela s’appelle le period_update_min_delay et a pour valeur 86400 (l’atsortingbut doit s’appeler sec_delay). Si le fichier suivant existe et a plus de 24 heures, apt mettra à jour le cache.

     /var/lib/apt/periodic/update-success-stamp 

    Il semble également que la recette apt (default.rb) inclue une directive pour forcer une mise à jour que votre recette pourrait appeler.

     # For other recipes to call to force an update execute 'apt-get update' do 

    Si vous faites cela, vous voudrez un not_if pour éviter de l’exécuter trop souvent, à quel point vous pourriez aussi bien l’appeler manuellement. J’en ai eu marre de jouer avec ça et j’ai fini par appeler apt-get update dans une strophe avant mon installation.

     execute "apt-get-update" do command "apt-get update" end 

    Je pense que la solution à long terme pour les mises à jour de sécurité consiste à définir le délai de mise à jour sur quelques heures.