Chef infra 我有3个不同的配方,但所有3个配方90%的代码是常见的。我如何用函数或3个配方中的任何配方替换代码

Chef infra 我有3个不同的配方,但所有3个配方90%的代码是常见的。我如何用函数或3个配方中的任何配方替换代码,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我有3个不同的配方,但所有3个配方90%的代码是常见的。我如何用函数或3个配方中的任何配方替换代码 cldbNodes = search(:node, "cldb:true") zkNodes = search(:node, "zk:true") zks= Array.new zkNodes.each do |zk| zks.push zk["fqdn"] end cldbs= Array.new cldbNodes.each do |cd|

我有3个不同的配方,但所有3个配方90%的代码是常见的。我如何用函数或3个配方中的任何配方替换代码

 cldbNodes = search(:node, "cldb:true")


 zkNodes = search(:node, "zk:true")





 zks= Array.new
 zkNodes.each do |zk|
    zks.push zk["fqdn"]
end




  cldbs= Array.new
     cldbNodes.each do |cd|
     cldbs.push cd["fqdn"]
  end
你有几个选择

您可以创建一个库或LWRP

或者你可以创建一个单一的配方并将其包括在内。这取决于你在做什么


我见过的最常见的模式是创建三个配方文件和一个属性来调用您的特定任务。

请将这三个配方发布到要点或类似内容中。您可以将常用代码放入单独的配方中,并在这三个类似的配方中使用
include\u recipe
指令。我已包含include\u recipe“::searchb”我已包含include_配方“::searchb”但变量不会从父配方传递到子配方