【问题标题】:Executing chef recipe only after another recipe is finished只有在另一个菜谱完成后才执行厨师菜谱
【发布时间】:2013-05-03 23:51:27
【问题描述】:

我在不同的食谱中有两个食谱。我需要在第二个配方开始执行之前完全完成第一个配方,因为它放置了第二个需要的一些文件。我在运行列表中将第一个放在第二个之前,但它们似乎是并行执行的。

如何在第一个配方完成后触发第二个配方的执行? (请注意,它们在不同的食谱中。)

【问题讨论】:

  • 看起来这是 OpsCode (tickets.opscode.com/browse/CHEF-3376) 的一个未解决问题。您可以为每本食谱创建一个角色并指定一个设置配方吗?这可能会迫使食谱按特定顺序加载,对吧?
  • 这可能行得通。另一个临时解决方案,也是我目前正在使用的,是强制第二本食谱依赖于第一本。我不想这样做,因为在我的许多部署中甚至不需要第一个说明书时,将第二个说明书的依赖项添加到第一个说明书中似乎是不优雅的。
  • 为了强制依赖,您只是在其他食谱中说include_recipe otherckbk::recipe1 之类的话吗?
  • 是的,元数据文件中有depends "otherckbk"。

标签: chef-infra chef-recipe


【解决方案1】:

您能否发布代码的 sn-p。我的猜测是您正在使用 LWRP(可能是内置的)并且它们都在运行结束时被执行。这听起来很熟悉吗?

代码如下:

cookbook_file node['.NET']['FilePath'] do
  source node['.NET']['FileName']
  action :create
end

可以转换为:

configFile = cookbook_file node['.NET']['FilePath'] do
  source node['.NET']['FileName']
  action :nothing
end
configFile.run_action(:create)

这意味着在代码的那部分强制执行(即当我们解析配方时)

【讨论】:

  • 这是一个有趣的想法。我没有在这些配方中使用 LWRP,但运行列表中还有其他配方可以使用。那些会触发这种行为吗?
  • 可以。许多像 cookbook_file 和模板这样的内置函数都表现出这种行为。您如何在第一个配方中创建文件以供第二个使用?是否存在第二个配方运行时文件不存在并因此崩溃的问题?
  • 是的,我认为这就是问题所在。第一个配方使用cookbook_file "/path/to/file.txt" do source "file.txt" end 创建文件
  • 尝试添加 run_action 位我有答案,你应该很好:)
  • 如果这样解决了您的问题,您可以接受其他人的答案吗?谢谢
猜你喜欢
  • 2016-07-19
  • 1970-01-01
  • 2019-02-15
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多