Вопрос по chef, vagrant, rubygems – Как контролировать версию Chef, которую использует Vagrant для предоставления виртуальных машин?

69

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

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

Ваш Ответ

6   ответов
103

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

vagrant plugin install vagrant-omnibus

Затем вы можете просто сконфигурировать свою версию chef в Vagrantfile перед выполнением инициализации:

config.omnibus.chef_version = :latest

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

config.omnibus.chef_version = '11.6.0'
да, вы можете использоватьconfig.omnibus.chef_version = '11.6.0'
Я установил плагин и добавил строку перед настройкой положенияconfig.omnibus.chef_version = :latest config.vm.provision :chef_solo do |chef|                             но шеф-повар соло по-прежнему использует 10.26.0 и выдает ту же ошибку
Да. Это правильный ответ для потока, поскольку он не зависит от того, является ли устройство машиной Ubuntu. Для полного рабочего примераcheck my repo
Это работает, если вы замените:latest по конкретной версии? Steve Bennett
За это следует проголосовать, и, возможно, пометить как правильный ответ, а более старый, в настоящее время помеченный правильный ответ
12

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

Например, см.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
На мой взгляд, это должно быть помечено как правильный ответ. Основания: (1) он не зависит от внешних плагинов и операционных систем (2) упрощает стандартизацию сред разработки ваших команд.
11

но я хотел добавить примечание к ответу Брайана Ларсена выше. Чтобы заставить его команду инициализации работать, мне нужно было добавить строку перед ней, чтобы иметь возможность создавать собственные расширения 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, на случай, если это будет важно для всех.

31

поднимите его без предоставления и 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).

Вы можете найти эту и несколько других команд в скрипте postinstall.sh здесь:gist.github.com/1052287
К вашему сведению, вместоwget -O - https://opscode.com/chef/install.sh | sudo bash следующее новоеrecommend процедура.sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash Первое может привести к тому, что «невозможно получить действительный пакет!»
40

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 блок.

реквизиты для комментария haurakihttp://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/

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

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

проверено и работает на меня
на самом деле, я думаю, что вы можете в значительной степени игнорировать статью блога. Это еще одно решение, но то, которое я выбрал из комментариев, короткое, приятное и эффективное.
Спасибо - не в состоянии проверить это в данный момент, но звучит законно. (Примечание из блога: на самом деле Chef запускается дважды: один раз, чтобы обновить Chef, затем один раз по-настоящему.) Steve Bennett
Я получил этот ответ, и хотя он работает, использование пакетов chef может быть более чистым способом:config.vm.provision :shell, :inline => 'wget -q https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chef_11.6.2-1.ubuntu.12.04_amd64.deb -O /tmp/chef_11.6.2-1.ubuntu.12.04_amd64.deb' config.vm.provision :shell, :inline => "dpkg -i /tmp/chef_11.6.2-1.ubuntu.12.04_amd64.deb"
Обратите внимание на комментарий Джейсона Мэйфилда, приведенный ниже - если ваш образ виртуальной машины не поставляется с Ruby, возможно, вам также понадобится добавить эту строку (до того, как было сказано выше):config.vm.provision :shell, inline: 'apt-get install ruby1.9.1-dev' Steve Bennett
0

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

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.6.0

Похожие вопросы