厨师最佳实践循环相同的食谱

时间:2016-01-25 00:20:59

标签: chef aws-opsworks cookbook recipe

任何人都可以向厨师建议处理循环和运行某种食谱的最佳方法。例如,我的食谱中有这个

apps_databag = search("aws_opsworks_app")

apps_databag.each do |app_settings|

case app_settings['app_source']['type']
  when 's3'
   include_recipe 'recipe'
  when 'git'
   include_recipe 'recipe2'
  else
   Chef::Log.warn("*** WARNING!! Cannot find app deployment type. Please check App .. Aborting ***")
end

背景..在1个堆栈中,我们有许多部署在不同服务器层的APP。我们这样做是因为它无法在两个不同的堆栈中共享RDS。它确实有效,现在当我们循环APP时,我们已经做了一个技巧,根据它的类型运行这个配方不幸的是include_recipe不是一个好的选择,为了配方我们不要&# 39;我想通过注入更多行来使这个食谱变得血腥

对此方案的任何建议?

2 个答案:

答案 0 :(得分:2)

如果您要在同一台计算机上部署多种类型的应用,请将您的配方移到custom resource/LWRP

配方只能包含一次,因此您的循环不适用于相同类型的多个应用。

然后,您将在案例陈述中用资源定义替换我们的include_recipe调用。

如果没有关于食谱中的内容的更多细节,我无法提供更多建议。

答案 1 :(得分:0)

不清楚你要求的是什么。 include_recipe是从另一个处方运行一个食谱的助手。它本身并不是一种资源,但您可以使用基本上与您所拥有的代码相同的代码(给予或接受它应该是app_settings["type"])。