wake-up-neo.net

Wie steuern Sie die Version von Chef, mit der Vagrant VMs bereitstellt?

Ein aktuelles Chefrezept wird aufgrund eines Fehlers in Version 0.10.10 nicht ausgeführt. Wie kann ich die von Vagrant verwendete Version von Chef auf 0.10.12 aktualisieren?

Ich möchte es nicht einfach für die aktuelle Instanz von VM aktualisieren - ich zerstöre diese immer wieder und baue sie neu auf. Muss ich etwas an der Vagrant-Basisbox oder an der Installation meines (physischen) Systems ändern?

69
Steve Bennett

Mit dem Vagrant-Plugin Vagrant-Omnibus hat es für mich super funktioniert:

vagrant plugin install vagrant-omnibus

Sie können dann einfach Ihre Kochversion in der Vagrantfile konfigurieren, bevor Sie die Bereitstellung durchführen:

config.omnibus.chef_version = :latest

Sie können auch eine bestimmte Version angeben:

config.omnibus.chef_version = '11.6.0'
103
mirkokiefer

Fügen Sie die Zeilen hinzu

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"

zu Ihrem Vagrantfile vor Ihrem config.vm.provision :chef_solo-Block.

requisiten zu haurakis Kommentar zu http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/

bearbeitet, um Jason Mayfields Kommentar aufzunehmen. Stellen Sie sicher, und geben Sie ihm auch eine positive Stellungnahme. Ich habe --no-upgrade hinzugefügt, um die Dinge zu beschleunigen und den --conservative in der zweiten Zeile abzugleichen. Sie können stattdessen das tun, was Jason getan hat, und sowohl den --no-upgrade als auch den --conservative entfernen.

bearbeitet, um die vorgeschlagene Bearbeitung durch den anonymen Benutzer228653 aufzunehmen

40
Bryan Larsen

Erstellen Sie die Basisbox neu. Zuerst bringen Sie es ohne Provisioning und SSH dazu.

vagrant up --no-provision 
vagrant ssh

Führen Sie dann die Befehle aus, die Sie zum Aktualisieren der Box benötigen. Dies kann die Aktualisierung von Chef und Ruby beinhalten. Aktualisieren Sie optional die Pakete für das Betriebssystem usw. Sie sollten alle nicht benötigten Komponenten wie heruntergeladene Paketdateien oder Zwischenspeicher bereinigen.

Zum Beispiel verwende ich den Opscode Omnibus Full Stack Installer für Chef in meinen Vagrant-Boxen (ursprünglich mit VeeWee erstellt) und aktualisiere auch die Pakete.

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

Vergessen Sie nicht, die Festplatte auf Null zu stellen, um die Größe zu verringern.

# 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

Verpacken Sie dann die Box und fügen Sie sie Ihrer Vagrant-Umgebung hinzu.

vagrant package
vagrant box add mynewlucid32 package.box

Wenn Sie denselben Boxnamen verwenden möchten, müssen Sie zuerst die vorhandene Box (~/.vagrant.d/boxes/BOXNAME) entfernen.

31
jtimberman

Es gibt eine Reihe von Optionen , die Sie angeben können, wenn Sie Chef für die Bereitstellung verwenden. Eine davon ist version, mit der Sie die gewünschte Chefversion angeben können.

Siehe zum Beispiel die chef.version-Zeile in diesem Auszug aus einer Vagrantfile von mir:

config.vm.provision :chef_solo do |chef|
   chef.version = "10.14.2"
   chef.cookbooks_path = "cookbooks"
   chef.add_recipe("vagrant_main")
 end
12
Sam

Ich kann keine Kommentare zu den Antworten posten, aber ich wollte Bryan Larsen 'Antwort oben hinzufügen. Um seinen Provisioning-Befehl zum Laufen zu bringen, musste ich vor dem Befehl eine Zeile hinzufügen, um während der Installation der neuen Chef-Version die systemeigenen Erweiterungen erstellen zu können. Daher wurde es:

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'

Dies war auf Ubuntu 13.04, falls es für jeden von Belang ist.

11
Jason Mayfield

Wenn Sie Chef Test Kitchen verwenden, können Sie die Chef-Version in der .kitchen.yml-Datei wie folgt angeben:

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.6.0
0
codeforester