Chef infra 厨师-如何避免重复食谱

Chef infra 厨师-如何避免重复食谱,chef-infra,Chef Infra,在我们的厨师烹饪书中,我们支持同一软件的多个版本。但我们采取了一种不好的做法。对于每个版本,我们都制作了配方的副本并更改了其属性 e、 g 变成 remote_file install_file do source node['android']['sdk']['24']['source_url'] not_if do ::File.exists?(extract_dir) end notifies :run, "execute[extract-sdk-24]", :im

在我们的厨师烹饪书中,我们支持同一软件的多个版本。但我们采取了一种不好的做法。对于每个版本,我们都制作了配方的副本并更改了其属性

e、 g

变成

remote_file install_file do
  source node['android']['sdk']['24']['source_url']
  not_if do
    ::File.exists?(extract_dir)
  end
  notifies :run, "execute[extract-sdk-24]", :immediately
end
这本质上是代码复制。保持属性不变但改变它们的值会更干净

厨师可以这样做吗


如果有关系,我们直接使用chef client zero。i、 e.我们不使用刀子等等。

正如@StephenKing提到的,最好的办法可能是编写一个自定义资源来抽象逻辑。您也可以将所有不同的SDK放在节点属性的散列中,然后在单个配方中对它们进行迭代,但这将变得不那么灵活。

不要真正理解您的问题。您还可以将版本(
23
/
24
)作为属性。
“execute[extract-sdk-24]”
操作的名称可以使用字符串串联组合,或者如果名称始终相同,只需将其命名为
extract-sdk
(什么?)。你也可以把它做成a,让你的食谱更干净。@StephenKing目前我可以通过调用android::sdk_24或android::sdk_23来运行不同的食谱。我希望做同样的事情,但只有一个配方运行不同的属性值。我需要查看资源,看看它们是否是我想要的。如果您希望能够在同一个chef运行期间安装这两个资源,请创建一个资源。
remote_file install_file do
  source node['android']['sdk']['24']['source_url']
  not_if do
    ::File.exists?(extract_dir)
  end
  notifies :run, "execute[extract-sdk-24]", :immediately
end