"включать рецепт" и файл Vagrantfile "шеф-повар.добавить рецепт". Какая разница?

просто запустил nginx:: source рецепт на моем бродячем ящике, и у меня очень необычное поведение.

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

шеф-повар.add_recipe ("project::nginx")
шеф.add_recipe ("nginx::source")

( project:: nginx рецепт очень простой. Использование его для переопределения атрибутов по умолчанию поваренной книги nginx)

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

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

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

1 ответов


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

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

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

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

  • include_attribute-включить файл желаемого атрибута явно.
  • метаданные.RB - >зависимость-Если ваша поваренная книга использует рецепт из другой поваренной книги, поместите эту поваренную книгу в метаданные.раздел зависимостей rb, и все его файлы будут загружены.
  • шеф-повар.add_recipe () - загрузить рецепт через Vagrantfile. (Упоминается здесь только для справки)
  • Berkshelf-вы можете использовать этот менеджер поваренной книги для решения проблемы, а также. Вот поток Stackoverflow об этой точной проблеме и документы

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