尝试找出大型项目的最佳方法。何时适合使用include_recipe
将配方添加到另一个配方中,而不是将其添加到run_list
中?有没有什么好的经验法则?
尝试找出大型项目的最佳方法。何时适合使用include_recipe
将配方添加到另一个配方中,而不是将其添加到run_list
中?有没有什么好的经验法则?
在我看来,任何菜谱都应该能够单独在一个空机器上运行。因此,如果某个菜谱A在其之前需要运行菜谱B,我总是使用include_recipe。
例如:两本烹饪书,Tomcat和Java。Tomcat需要Java。
当某个用户想要安装Tomcat时,他可能没有意识到实际上需要其他的烹饪书才能安装它。他运行Tomcat菜谱,或者它会失败并显示一些完全没有帮助的错误消息,比如“找不到Java”等更糟糕的情况 - 它成功了,但是用户当然无法启动Tomcat,因为他没有安装Java。
但是,当Tomcat烹饪书中有一行“include_recipe 'java'”时,这也需要metadata中的“depends 'java'”行,当用户尝试安装Tomcat时,将会看到可理解的错误消息:“找不到Java烹饪书”。这种方式实际上使用户可以通过阅读metadata自己下载依赖关系(甚至使用某些自动工具),而无需实际运行菜谱。
所有逻辑都应该受到运行列表的控制。尽管尝试过,但烹饪书并不像人们想象中的那样可重用。 include_recipe
所做的只是添加另一个要查看以了解运行列表的位置,因此应明确地将其放在运行列表中。
include_recipe
来明确依赖关系。 - user1071847
include_recipe parent
,但如果有人无意中将“parent”添加到运行列表中,那么会执行parent::default.rb
两次吗?如果“parent”已经正确地制作了,则机器上不会发生任何问题,但是在引导/收敛新节点时会浪费多少时间?如果Chef不能自动避免重复,是否有推荐的手动避免方法? - Patrick Minclude_recipe foo
时,它是否立即执行配方? - Kevin Meredith