Подтвердить что ты не робот

Как управлять версией шеф-повара, который использует Vagrant для предоставления виртуальных машин?

Текущий рецепт шеф-повара не работает из-за ошибки в версии 0.10.10. Как я могу обновить версию шеф-повара, используемого Vagrant, до 0,10.12?

Я не хочу просто обновлять его для текущего экземпляра виртуальной машины - я продолжаю уничтожать и восстанавливать их. Нужно ли мне что-то менять в базовом блоке Vagrant или что-то в моей (физической) установке системы?

4b9b3361

Ответ 1

Использование плагина Vagrant vagrant-omnibus отлично поработало для меня:

vagrant plugin install vagrant-omnibus

Затем вы можете просто настроить версию своего шеф-повара в Vagrantfile перед выполнением настройки:

config.omnibus.chef_version = :latest

Вы также можете указать конкретную версию:

config.omnibus.chef_version = '11.6.0'

Ответ 2

Добавьте строки

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"

в ваш Vagrantfile перед вашим блоком config.vm.provision :chef_solo.

реквизит к hauraki комментарий http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/

отредактирован, чтобы включить комментарий Джейсона Мэйфилда. Удостоверьтесь и дайте ему верхнюю часть. Я добавил --no-upgrade для ускорения работы и соответствия --conservative во второй строке. Вместо этого вы могли бы сделать то, что сделал Джейсон, и удалить оба --no-upgrade и --conservative.

отредактирован, чтобы включить предлагаемое редактирование анонимным пользователем228653

Ответ 3

Восстановите базовую коробку. Во-первых, поднимите его без обеспечения и SSH.

vagrant up --no-provision 
vagrant ssh

Затем выполните команды, необходимые для обновления поля. Это может включать в себя обновление Chef и Ruby. При необходимости обновите пакеты для ОС и т.д. Вы должны очистить все, что не требуется, таких как загруженные файлы пакетов или кеши.

Например, я использую Opscode Omnibus Установщик полных стеков для шеф-повара в моих ящичных коробках (изначально построенный с VeeWee), и я также обновляю пакеты.

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

Не забудьте "обнулить" диск, чтобы уменьшить размер.

# 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

Затем упакуйте окно и добавьте его в свою среду Vagrant для использования.

vagrant package
vagrant box add mynewlucid32 package.box

Если вы хотите использовать одно и то же имя поля, сначала нужно удалить существующее поле (~/.vagrant.d/boxes/BOXNAME).

Ответ 4

Я не могу оставлять комментарии к ответам, но я хотел добавить примечание к ответу Брайана Ларсена выше. Чтобы заставить свою команду настройки работать, мне нужно было добавить строку перед ней, чтобы иметь возможность создавать собственные расширения gem во время установки новой версии Chef. Поэтому он стал:

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'

Это было на Ubuntu 13.04, в случае, если это имеет значение для всех.

Ответ 5

Существует ряд параметров, которые вы можете указать при использовании Chef для обеспечения. Один из них - version, который позволяет вам указать желаемую версию шеф-повара.

Например, см. строку chef.version в этом извлечении из Vagrantfile моего:

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

Ответ 6

Если вы используете Chef Test Kitchen, то вы можете указать версию Chef в файле .kitchen.yml, например:

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.6.0