厨师 - 如何避免重复食谱

时间:2016-07-28 13:36:55

标签: chef

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

e.g。

remote_file install_file do
  source node['android']['sdk']['23']['source_url']
  not_if do
    ::File.exists?(extract_dir)
  end
  notifies :run, "execute[extract-sdk-23]", :immediately
end

变为

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一起使用吗?

如果重要,我们直接使用chef-client零。即我们不使用刀等。

1 个答案:

答案 0 :(得分:0)

正如@StephenKing所提到的,最好的办法是编写一个抽象逻辑的自定义资源。您还可以将所有不同的SDK放在节点属性中的散列中,然后在单个配方中迭代它们,但这样做的灵活性会降低。