在一本食谱中执行厨师食谱的顺序

时间:2014-07-16 09:40:35

标签: ruby chef

我有一本食谱包含两个食谱:recipe/install.rbrecipe/configure.rb

install.rb中,我在gem_package中使用它们安装所有软件包,configureconfigure.rb。我在gem_package中安装了一个install.rb,并在require <that-gem>中将其用作configure.rb

无论运行列表的顺序如何,厨师 - 客户端执行都失败,提到<that-gem>缺失。如果我先使用install食谱运行然后运行configure食谱,那么一切正常。难道没有一种方法可以让单个厨师按顺序运行这两个食谱?我尝试提及include_recipe和所有可能的解决方案。

1 个答案:

答案 0 :(得分:0)

Chef客户端运行有两个阶段。

  • 首先是资源编译阶段,其中所有的ruby都是 加载,解析节点属性并生成运行列表。

  • 接下来是执行阶段,其中运行列表中的配方 执行。

您的食谱所依赖的宝石需要在执行阶段可用,这会产生一些鸡肉或鸡蛋问题,因此您需要使用一些技巧来首先安装宝石。

在为Chef使用宝石时,请使用chef_gem安装宝石。

chef_gem "your_gem"

require 'your_gem'

如果你开始在libraries中使用gems,这会有点棘手,因为在编译时需要库,并且你无法在编译时间之前进行操作。在这种情况下,您需要在负载上很好地失败,以便可以安装gem。

begin
  require 'your_gem'
rescue LoadError
  warn "Load of [your_gem] failed. Should be installed by install.rb"
end

然后确保在安装发生之前不要使用gem在Chef运行中提供的任何对象。