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

Предоставление бродяг с шеф-поваром

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

Я хотел бы сделать это как можно более переносимым, поэтому я подумал, что имеет смысл загружать кулинарные книги из 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

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

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

К сожалению, в Vagrant не так много документации в сочетании с шеф-поваром. Я рекомендую изучить librarian, чтобы управлять своими кулинарами для вас. У меня обычно есть блок, подобный этому в моем 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.

Ответ 3

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

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

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

Пример:

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

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'

Ответ 4

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

Я не вижу никаких проблем с переносимостью при таком подходе. Для локального развития все мои вещи шеф-повара находятся в одном месте ~/chef. У меня есть папка ~/chef/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