Пытаемся найти лучший подход для большого проекта. Когда целесообразно добавлять рецепты в рецепт, используя include_recipe
, а не добавлять рецепт в run_list
? Есть ли хорошее практическое правило?
Следует использовать include_recipe или добавить рецепт в run_list?
Ответы (2)
На мой взгляд, любой рецепт должен работать на пустой машине сам по себе. Поэтому, если какой-то рецепт A зависит от выполнения рецепта B перед ним, я всегда использую include_recipe.
Например: 2 кулинарные книги, tomcat и java. Tomcat требует java.
Когда какой-то пользователь хочет установить tomcat, он может и не подозревать, что для его установки ему на самом деле требуется какая-то другая поваренная книга. Он запускает рецепт tomcat, и либо он выходит из строя с каким-то совершенно бесполезным сообщением об ошибке, например «Java не найден», либо, что еще хуже, он преуспевает, но тогда, конечно, пользователь не может запустить tomcat, потому что у него не установлена java.
Но когда в книге рецептов tomcat есть строка
include_recipe 'java'
, для которой также требуется строкаdepends 'java'
в метаданных, пользователь при попытке установить tomcat увидит понятное сообщение об ошибке: «java поваренной книги не найден». Таким образом, пользователь может загружать зависимости самостоятельно (или даже с помощью какого-либо автоматического инструмента), не выполняя рецепты, но читая метаданные.
parent
, вы include_recipe parent
и какая-то невольная душа добавляет parent
в список запусков, неужели parent::default.rb
запускается дважды? Если parent
был создан правильно, с машиной ничего плохого не случится, но насколько время будет потрачено впустую, когда вы начнете загружать / собирать новый узел? Если Chef не умеет уклоняться от дублирования, есть ли рекомендуемый способ избежать этого вручную?
- person Patrick M; 16.12.2013
include_recipe foo
?
- person Kevin Meredith; 25.10.2014
Вся логика должна контролироваться списками выполнения. Поваренные книги, как бы они ни старались, не так пригодны для повторного использования, как люди думают. Все, что делает include_recipe
, - это добавляет еще одно место, где пользователи должны искать, чтобы выяснить, что будет делать список выполнения, поэтому сделайте его явным и поместите в список выполнения.
include_recipe
, чтобы сделать зависимость явной.
- person user1071847; 17.02.2017