Une recette actuelle de Chef n'est pas en cours d'exécution à cause d'un bogue de la version 0.10.10. Comment puis-je mettre à niveau la version de Chef utilisée par Vagrant vers la version 0.10.12?
Je ne veux pas simplement le mettre à jour pour l'instance actuelle de la VM - je ne cesse de les détruire et de les reconstruire. Dois-je modifier quelque chose dans la boîte de base Vagrant ou quelque chose dans l'installation de mon système (physique)?
Utiliser le plugin Vagrant vagrant-omnibus a très bien fonctionné pour moi:
vagrant plugin install vagrant-omnibus
Vous pouvez ensuite simplement configurer la version de votre chef dans le fichier Vagrant avant d’effectuer le provisioning:
config.omnibus.chef_version = :latest
Vous pouvez également spécifier une version spécifique:
config.omnibus.chef_version = '11.6.0'
Ajouter les lignes
config.vm.provision :Shell, :inline => 'apt-get install build-essential Ruby1.9.1-dev --no-upgrade --yes'
config.vm.provision :Shell, :inline => "gem install chef --version 11.4.2 --no-rdoc --no-ri --conservative"
à votre Vagrantfile avant votre bloc config.vm.provision :chef_solo
.
accessoires au commentaire de hauraki sur http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/
édité pour inclure le commentaire de Jason Mayfield. Assurez-vous et donnez-lui un vote positif aussi. J'ai ajouté --no-upgrade
pour accélérer les choses et faire correspondre le --conservative
sur la deuxième ligne. Vous pouvez à la place faire ce que Jason a fait et supprimer les --no-upgrade
et --conservative
.
modifié pour inclure la modification proposée par un utilisateur anonyme228653
Reconstruisez la boîte de base. Tout d'abord, apportez-le sans provisioning et SSH.
vagrant up --no-provision
vagrant ssh
Ensuite, exécutez les commandes nécessaires pour mettre à jour la boîte. Cela peut inclure la mise à jour de Chef et Ruby. Vous pouvez éventuellement mettre à jour les paquetages pour le système d'exploitation, etc. Vous devez nettoyer tout ce qui n'est pas nécessaire, comme les fichiers de paquetage téléchargés ou les caches.
Par exemple, j'utilise le programme d'installation complet de pile Opscode Omnibus pour Chef dans mes boîtes vagabondes (construites à l'origine avec VeeWee ), et met également à jour les packages.
Sudo dpkg --purge chef chef-full
Sudo true && curl -L https://www.opscode.com/chef/install.sh | Sudo bash
Sudo apt-get update && Sudo aptitude safe-upgrade
Sudo rm /var/cache/apt/archives/*.deb
N'oubliez pas de "mettre à zéro" le disque pour réduire la taille.
# a bunch of commands like gem install chef, apt-get upgrade, whatever
Sudo dd if=/dev/zero of=/EMPTY bs=1M
Sudo rm /EMPTY
exit
Emballez ensuite la boîte et ajoutez-la à votre environnement Vagrant pour pouvoir l'utiliser.
vagrant package
vagrant box add mynewlucid32 package.box
Si vous souhaitez utiliser le même nom de boîte, vous devez d'abord supprimer la boîte existante (~/.vagrant.d/boxes/BOXNAME).
Il existe un certain nombre de options que vous pouvez spécifier lors de l'utilisation de Chef pour le provisionnement. L’un d’eux est version
, ce qui vous permet de spécifier la version de Chef souhaitée.
Par exemple, voir la ligne chef.version
dans cet extrait d'un Vagrantfile
du mien:
config.vm.provision :chef_solo do |chef|
chef.version = "10.14.2"
chef.cookbooks_path = "cookbooks"
chef.add_recipe("vagrant_main")
end
Je ne peux pas poster de commentaires sur les réponses, mais je voulais ajouter une note à la réponse de Bryan Larsen ci-dessus. Pour que sa commande de provisioning fonctionne, je devais ajouter une ligne avant de pouvoir créer les extensions natives gem lors de l'installation de la nouvelle version de Chef. Par conséquent, il est devenu:
config.vm.provision :Shell, inline: 'apt-get install Ruby1.9.1-dev'
config.vm.provision :Shell, inline: 'gem install chef --version 11.4.4 --no-rdoc --no-ri'
C'était sur Ubuntu 13.04, au cas où cela importerait à quiconque.
Si vous utilisez Chef Test Kitchen, vous pouvez spécifier la version de Chef dans le fichier .kitchen.yml
, comme suit:
provisioner:
name: chef_zero
require_chef_omnibus: 12.6.0