web-dev-qa-db-fra.com

Comment contrôler la version de Chef utilisée par Vagrant pour provisionner les ordinateurs virtuels?

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)?

69
Steve Bennett

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'
103
mirkokiefer

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

40
Bryan Larsen

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).

31
jtimberman

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
12
Sam

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.

11
Jason Mayfield

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
0
codeforester