Назад | Перейти на главную страницу

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

Я, вероятно, неправильно понял всю концепцию: у меня есть работающая виртуальная машина Vagrant с 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 в конце. Думаю, это совсем другое дело, и я использую его неправильно. Но после поиска я не смог найти ничего, что объясняло бы, как это сделать правильно.

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

Кулинарные книги - это буквально набор файлов рецептов, немного метаданных и, возможно, некоторые другие файлы (например, шаблоны или пакеты данных). Таким образом, вы не можете напрямую включить файл .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 "support@me.com"
license          "None"
description      "Does something cool"
long_description IO.read(File.join(File.dirname(__FILE__), 'readme.md'))
version          "0.0.1"

supports "centos"

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

chef.add_recipe "SomeCookbook::vagrant-dev"

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