2013-12-03 3 views
6

Просто запустил nginx :: исходный рецепт на моем бродячем поле, и у меня очень необычное поведение."include_recipe" vs. Vagrantfile "chef.add_recipe". Какая разница?

Когда я включаю рецепт от Vagrantfile (как показано ниже), все работает как шарм,

chef.add_recipe ("Проект :: Nginx")
chef.add_recipe ("Nginx :: источник ")

(проект :: Nginx рецепт очень прост. с его помощью, чтобы переопределить стандартные атрибуты Nginx поваренной книги)

, но если я включу рецепт в самом конце проекта :: Nginx (упомянутые выше), все разваливается:

node.default['nginx']['server_names_hash_bucket_size'] = 128 
include_recipe "nginx::source" 

До сих пор я не знаю, что есть какая-то разница в поведении между теми, два вызова. Кто-нибудь знает, в чем разница?

+0

Фрагмент кода, который вы предоставили, это ваш файл атрибутов или ваш рецепт? –

+0

ах, это рецепт ** project :: nginx **. – Konzula

ответ

9

Gotya! Шеф-повар 11. Проблема с этим существует шеф-соло только :)

Для того, чтобы быстро резюме, разница есть:

  • chef.add_recipe() - загружает весь контекст поваренного (все файлы, например, рецепты, определение, атрибуты ...)
  • include_recipe "" - файлы (атрибуты, определения и т. д.), которые не входят в список расширенного запуска, не загружаются.

Есть по крайней мере 4 способа решения проблемы (положить файлы в списке запуска):

  • include_attribute - включает в себя желательные файла атрибутов в явном виде.
  • metadata.rb-> dependency - если ваша кулинарная книга использует рецепт из другой поваренной книги, поместите эту кулинарную книгу в раздел зависимости metadata.rb и все ее файлы будут загружены.
  • chef.add_recipe() - Загрузить рецепт через Vagrantfile. (Упоминается здесь только для справки)
  • Berkshelf - вы можете использовать этот менеджер поваренной книги, чтобы решить проблему. Вот Stackoverflow thread about this exact problem и some Docs

Для тех, кто заинтересован в дальнейшем чтении, Chef 11 введена зависимость на основе поваренной погрузочные без рецепта файлов. Новая логика загрузки означает, что файлы, принадлежащие кулинарным книгам, которые существуют в cookbook_path, но не находятся в расширенном списке run_list, или зависимости кулинарных книг в расширенном run_list больше не будут загружаться. REF: Opscode breaking changes documentation, и если вам нужна подпись ошибки, я получил here's точно такой же, даже по той же причине.

Смежные вопросы