rubygems - hashicorp - ¿Cómo controlar la versión de Chef que Vagrant usa para aprovisionar máquinas virtuales?
vagrant vbox (6)
Una receta actual de Chef no se está ejecutando debido a un error en la versión 0.10.10. ¿Cómo puedo actualizar la versión de Chef que usa Vagrant a 0.10.12?
No quiero simplemente actualizarlo para la instancia actual de la VM, sigo destruyendo y reconstruyendo esos. ¿Debo cambiar algo en la caja base de Vagrant, o algo en la instalación de mi sistema (físico)?
Agrega las líneas
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"
a su Vagrantfile antes de su config.vm.provision :chef_solo
bloque de config.vm.provision :chef_solo
.
puntales al comentario de hauraki en http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/
editado para incluir el comentario de Jason Mayfield. Asegúrate de darle un voto positivo también. --conservative
--no-upgrade
para acelerar las cosas y --conservative
el --conservative
en la segunda línea. En su lugar, podría hacer lo que hizo Jason, y eliminar tanto el --no-upgrade
como el --conservative
.
editado para incluir la edición sugerida por usuario anónimo228653
Hay varias options que puede especificar al usar Chef para el aprovisionamiento. Una de estas es la version
, que le permite especificar la versión de Chef que desea.
Por ejemplo, vea la línea chef.version
en este extracto de un Vagrantfile
mío:
config.vm.provision :chef_solo do |chef|
chef.version = "10.14.2"
chef.cookbooks_path = "cookbooks"
chef.add_recipe("vagrant_main")
end
No puedo publicar comentarios sobre las respuestas, pero quería agregar una nota a la respuesta anterior de Bryan Larsen. Para que su comando de aprovisionamiento funcionara, necesitaba agregar una línea antes de poder crear las extensiones gemelas nativas durante la instalación de la nueva versión de Chef. Por lo tanto, se convirtió en:
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''
Esto fue en Ubuntu 13.04, en caso de que le importe a alguien.
Reconstruye el cuadro base. Primero, créelo sin aprovisionamiento y SSH.
vagrant up --no-provision
vagrant ssh
Luego, realice los comandos que necesita para actualizar la caja. Esto puede incluir la actualización de Chef y Ruby. Opcionalmente, actualice los paquetes para el sistema operativo, etc. Debe limpiar el cuadro de todo lo que no se requiere, como los archivos de paquete descargados o las memorias caché.
Por ejemplo, utilizo Opscode Omnibus Full Stack Installer para Chef en mis cajas Vagrant (originalmente construidas con VeeWee ), y también actualizo los paquetes.
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
No te olvides de "poner a cero" el disco para reducir el tamaño.
# 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
Luego, empaca la caja y agrégala a tu entorno Vagrant para su uso.
vagrant package
vagrant box add mynewlucid32 package.box
Si desea utilizar el mismo nombre de casilla, primero deberá eliminar la casilla existente (~ / .vagrant.d / boxes / BOXNAME).
Si está utilizando Chef Test Kitchen, puede especificar la versión de Chef en el archivo .kitchen.yml
, así:
provisioner:
name: chef_zero
require_chef_omnibus: 12.6.0
Usando el plugin Vagrant vagrant-omnibus funcionó muy bien para mí:
vagrant plugin install vagrant-omnibus
A continuación, puede simplemente configurar su versión de chef en Vagrantfile antes de realizar el aprovisionamiento:
config.omnibus.chef_version = :latest
También puede especificar una versión específica:
config.omnibus.chef_version = ''11.6.0''