强制执行厨师食谱中的执行顺序

Mar*_*ddy 2 chef-infra

我有两个食谱:

  1. 使用我的.bashrc之类的东西配置我的主目录,几乎在我使用的每台机器上运行
  2. 安装包含我的主目录的EBS卷.这只能由一个EC2实例一次使用,但让我可以轻松迁移到新实例

对于这个EC2实例首次启动的情况,我需要在配方#1之前执行配方#2或者尚未安装卷.如何确保明确强制执行此执行顺序?

Hol*_*ust 14

Chef 始终按照您指定的顺序执行配方.它不会随意重新排序.因此,如果您希望在另一个配方之前运行一个配方,只需按顺序加载它们(例如在中run_list)

为了进一步强制执行此操作(以牺牲配方之间的额外耦合为代价),您还可以include_recipe在第二个配方的开头使用它来加载第一个配方.

  • @mmcrae你确实有两个阶段:编译阶段,你的配方被评估,资源集合被构建,汇聚阶段,这个集合一个接一个地执行.通常,资源只是在编译阶段在资源集合的末尾添加.但是,您可以对此进行影响(例如,通过自定义代码或使用通知).也就是说,厨师仍然不会在没有明确依赖性的情况下随机重新排序资源(例如,木偶就是这样).它始终使用定义资源的隐式顺序. (3认同)