Как подготовить виртуальную машину Vagrant с помощью Chef и файла .rb, заполненного инструкциями

Как подготовить виртуальную машину Vagrant с помощью Chef и файла .rb, заполненного инструкциями

Я, вероятно, неправильно понял всю концепцию: у меня есть рабочая Vagrant VM с Ubuntu 12.04, поверх нее я хочу установить несколько пакетов и файлов конфигурации. Я установил их в Chef, по пути cookbooks/my_project/recipes у меня есть файл vagrant-dev.rb со всеми инструкциями. Теперь моя конфигурация Vagrant в Vagrantfile должна быть проблемой здесь:

config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks/my_project/recipes"
    chef.add_recipe "vagrant-dev.rb"
end

и когда я загружаю виртуальную машину, я получаю

FATAL: Chef::Exceptions::CookbookNotFound: Cookbook vagrant-dev.rb not found.

Я попробовал без .rb в конце. Думаю, это совсем другое дело, и я не правильно его использую. Но после поиска я не смог найти ничего, что объяснило бы, как это правильно сделать.

решение1

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

Кулинарные книги — это буквально просто набор файлов рецептов rb, немного метаданных и, опционально, некоторые другие файлы (например, шаблоны или пакеты данных). Поэтому вы не можете напрямую включить файл .rb, вам нужно сослаться на его кулинарную книгу, а затем указать имя файла (без .rb), чтобы запустить его.

Простая структура кулинарной книги должна выглядеть так:

SomeCookbook
    readme.md # needed for the long_description in metadata to work
    metadata.rb # contains the actual information for the cookbook
    recipes # Holds all the cookbook's recipies
        default.rb # This is the default recipe, run if one isn't specified
        otherRecipe.rb
    templates # Templates that can be called by the cookbook
        default
            some-erb-style-template.erb

Имя основного каталога не имеет значения, а каталог шаблонов является необязательным.

metadata.rb

name             "SomeCookbook"
maintainer       "Me"
maintainer_email "[email protected]"
license          "None"
description      "Does something cool"
long_description IO.read(File.join(File.dirname(__FILE__), 'readme.md'))
version          "0.0.1"

supports "centos"

Следуйте структуре выше и убедитесь, что вы вставили свой рецепт в папку recipes.
Затем добавьте это в ваш файл vagrant:

chef.add_recipe "SomeCookbook::vagrant-dev"

Надеюсь, вышеизложенное немного прояснит ситуацию.

Связанный контент