Предоставление Vagrant w / Chef - PullRequest
23 голосов
/ 20 января 2012

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

Я бы хотел сделать это как можно более переносимым, поэтому я подумал, что имеет смысл загружать кулинарные книги с URL-адреса, поэтому я пытаюсь это сделать в своей Vagrantfile:

config.vm.provision :chef_solo do |chef|
    chef.recipe_url = 'https://github.com/opscode/cookbooks/tarball/master'
    chef.add_recipe 'nginx'
    chef.add_recipe 'mysql'
    chef.add_role 'web'

    # You may also specify custom JSON attributes:
    # chef.json = { :mysql_password => '' }
end

Не думаю, что есть какой-то вопрос, что я просто что-то неправильно понимаю, но я не нашел источника документации, который, кажется, соответствует этому бродячему контексту.

Спасибо.

Ответы [ 4 ]

20 голосов
/ 20 января 2012

Способ, показанный выше, безусловно, будет работать нормально.

Однако, если вы собираетесь использовать Chef Solo, я рекомендую встраивать кулинарные книги непосредственно в репозиторий, который входит в систему контроля версий.Это делает так, что в каждый момент времени, когда вы делаете коммит, Vagrantfile выровнен с правильными версиями кулинарных книг.Таким образом, через 2 года, когда вы проверяете код с сегодняшнего дня, поваренные книги все еще должны работать технически.

Если вы хотите пойти по этому пути, создайте каталог, например cookbooks, который содержит поваренные книги.Затем настройте Vagrant так:

config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks"
    chef.add_recipe 'nginx'
    chef.add_recipe 'mysql'
    chef.add_role 'web'

    # You may also specify custom JSON attributes:
    # chef.json = { :mysql_password => '' }
end
16 голосов
/ 24 января 2012

К сожалению, не так много документации по Vagrant в сочетании с Chef.Я рекомендую изучить использование библиотекаря для управления своими кулинарными книгами.У меня обычно есть блок, похожий на этот в моем Vagrantfile:

config.vm.provision :chef_solo do |chef|
  chef.cookbooks_path = "chef/cookbooks"
  chef.roles_path     = "chef/roles"

  # ...
end

Я создаю новый каталог в корне моего проекта под названием chef и добавляю следующие строки в мой .gitignore:

# Ignore librarian bundled cookbooks and cache
/chef/cookbooks
/chef/tmp

В каталоге chef вы можете запустить librarian-chef init и начать добавлять поваренные книги в созданный Cheffile так же, как в Gemfile:

cookbook "apt",
  :git => "git://github.com/fnichol/chef-apt.git",
  :ref => "cacher-client-solo-support"

cookbook "imagemagick", "0.2.2"

cookbook "mongodb",
  :git => "git://github.com/edelight/chef-cookbooks.git",
  :ref => "0.11.0"

Вы получитеПреимущества возможности указывать git-репозитории, пути к файлам и версии для объединения, что очень полезно при использовании кулинарных книг из нескольких источников.При запуске librarian-chef install библиотекарь извлечет все указанные поваренные книги и сохранит их в каталоге cookbooks относительно местоположения вашего Cheffile.

0 голосов
/ 08 августа 2017

Я предпочитаю большой монолитный репозиторий со всеми моими кулинарными книгами. Поэтому я не пользуюсь библиотекарем или беркшельфом, я просто бродяга и шеф-повар. Я использую Chef для создания виртуальных машин с использованием VirtualBox, а также для «выпекания» контейнеров Docker.

Я не вижу проблем с переносимостью при таком подходе. Для местного развития все мои шеф-повара находятся в одном месте ~/chef. У меня есть папка ~/chef/vagrant, в которой находятся все мои файлы Vagrant.

Мои Vagrantfile всегда будут иметь что-то похожее на следующее.

  config.vm.provision 'chef_zero' do |chef|
    chef.environment = 'some_environment'
    chef.cookbooks_path = '~/chef/cookbooks'
    chef.roles_path = '~/chef/roles'
    chef.data_bags_path = '~/chef/data_bags'
    chef.encrypted_data_bag_secret_key_path = '~/chef/chef_key'
    chef.environments_path = '.'
    chef.nodes_path = '~/chef/nodes'
    chef.add_recipe 'motd'
    chef.add_recipe '..'
    chef.version = '12.14.89'
    # chef.log_level = 'debug'
  end
0 голосов
/ 21 марта 2016

Вы также можете использовать Berkshelf для управления своими кулинарными книгами.Berkshelf действительно облегчает управление кулинарными книгами.

Все, что вам нужно сделать, это установить gem berkshelf и запустить berks init для создания пустого файла Berksfile.

Существует несколько различных способов добавления поваренных книг в файл berksfile для разрешения зависимостей.*

Пример:

Чтобы разрешить поваренные книги из супермаркета используйте:

source 'http://chefsupermarket.com'

cookbook 'mycookbook', '~> 1.3.6'

Чтобы разрешить использование git:

cookbook "mycookbook", git: "https://github.com/cookbooks/mycookbook.git"

вы также можете хранить поваренные книги в своейлокальный каталог и разрешите их, используя berksfile, используя:

cookbook 'mycookbook', path: '/path_to_my/chef/cookbook'
...