试图找出大型项目的最佳方法。什么时候适合通过在配方中添加配方include_recipe
而不是将配方添加到配方中run_list
?有良好的经验法则吗?
Answers:
如我所见,任何配方都应该能够在空机器上自行运行。因此,如果某些配方A取决于之前运行的配方B,则我将始终使用include_recipe。
例如:2本食谱,tomcat和java。Tomcat需要Java。
当某些用户想要安装tomcat时,他可能不知道自己实际上还需要其他食谱来安装它。他运行了tomcat配方,但失败了,并显示了一些完全无用的错误消息,例如“找不到Java”,甚至更糟-它成功了,但是用户当然不能启动tomcat,因为他没有安装Java。
但是,如果include_recipe 'java'
tomcat食谱中有一行,它也需要depends 'java'
元数据中的一行,那么当用户尝试安装tomcat时,将看到可以理解的错误消息:“未找到该食谱java”。这样,用户实际上可以自己下载依赖项(甚至使用某些自动工具),而无需实际运行配方,而是读取元数据。
include_recipe foo
吗?
所有逻辑都应通过运行列表进行控制。尝试尝试的食谱无法像人们想像的那样可重复使用。所有的include_recipe
工作就是在另一个地方增加了用户必须查看的地方,以明确运行清单将要做什么,因此要使其明确并放入运行清单。
include_recipe
一个显式的依赖关系。
parent
,您include_recipe parent
和一些不知情的灵魂就会添加parent
到运行列表中,是否parent::default.rb
会运行两次?如果parent
已经正确地制作,没什么不好会发生机器,但它多少时间,当你引导/汇聚新节点浪费?如果Chef不能自动避免重复,是否有建议的方法手动避免重复?