¿Cómo controlar la versión de Chef que Vagrant utiliza para aprovisionar máquinas virtuales?


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 esas. ¿Necesito cambiar algo en la caja base Vagrant, o algo en la instalación de mi sistema (físico)?

Author: Steve Bennett, 2012-07-04

6 answers

Usando el plugin Vagrant vagrant-omnibus funcionó muy bien para mí:

vagrant plugin install vagrant-omnibus

A continuación, simplemente puede configurar su versión de chef en el Vagrantfile antes de hacer el aprovisionamiento:

config.omnibus.chef_version = :latest

También puede especificar una versión específica:

config.omnibus.chef_version = '11.6.0'
 103
Author: mirkokiefer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-30 16:00:13

Añadir 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 bloque config.vm.provision :chef_solo.

Accesorios para el 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. He añadido --no-upgrade para acelerar las cosas y coincidir con el --conservative en la segunda línea. En su lugar, podrías hacer lo que hizo Jason, y eliminar tanto el --no-upgrade y --conservative.

Editado a incluir edición sugerida por usuario anonymous228653

 40
Author: Bryan Larsen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-27 14:25:29

Reconstruye la caja base. Primero, tráelo sin aprovisionamiento y SSH a él.

vagrant up --no-provision 
vagrant ssh

Luego, ejecute 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 la caja de todo lo que no es necesario, como archivos de paquetes descargados o cachés.

Por ejemplo, utilizo el instalador de Pila completa Opscode Omnibus para Chef en mis Vagrant boxes (originalmente construido 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 se olvide de "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, empaquete la caja y agréguela a su entorno Vagrant para su uso.

vagrant package
vagrant box add mynewlucid32 package.box

Si desea usar el mismo nombre de caja, deberá eliminar la caja existente (~/.vagabundo.d / boxes / BOXNAME) primero.

 31
Author: jtimberman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-05 09:31:57

Existen varias opciones que puede especificar al usar Chef para el aprovisionamiento. Uno de ellos es 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
 12
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-10 07:19:02

No puedo publicar comentarios sobre las respuestas, pero quería agregar una nota a la respuesta de Bryan Larsen anterior. Para que su comando de aprovisionamiento funcione, necesitaba agregar una línea antes para poder construir las extensiones nativas de gem 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.

 11
Author: Jason Mayfield,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-27 23:44:15

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
 0
Author: codeforester,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-18 17:51:23