![使用 Chef Server,删除对特定资源的重复调用的良好模式是什么?](https://linux22.com/image/604329/%E4%BD%BF%E7%94%A8%20Chef%20Server%EF%BC%8C%E5%88%A0%E9%99%A4%E5%AF%B9%E7%89%B9%E5%AE%9A%E8%B5%84%E6%BA%90%E7%9A%84%E9%87%8D%E5%A4%8D%E8%B0%83%E7%94%A8%E7%9A%84%E8%89%AF%E5%A5%BD%E6%A8%A1%E5%BC%8F%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我有一个配方,其中多次调用给定资源,比如directory
。对 的调用directory
大部分具有非常相似的参数(即相同的所有者、相同的操作等)——即大量重复。但是,有一个特定的参数经常更改,即模式。
我的目标是减少食谱中的重复并创造一种方便的方法。
我倾向于用这样的方法创建一个库:
def apply_directory_rule(path, mode_num)
directory path do
owner "something"
group "something_else"
mode mode_num
action :create
end
end
然后,在配方中,每次我想要为应用程序创建一个目录时,我只需调用以下命令:
applications.each do |application|
apply_directory_rule "#{application}/shared", 0755
end
我还没有测试过,但我想我的主要问题是,在这种情况下,资源是否directory
像这样在库中可用?其次,我不确定这是最好的模式——任何减少我的食谱中重复的建议都会受到赞赏!
答案1
您可以简单地在配方中定义一个方法,然后在该配方中使用它。这很简单,而且能完成工作。
如果您需要在不同的食谱中重复使用该模式,或者只是想使用更多的“Chef-y”方法,那么有两种专门用于此的工具。
在简单情况下,您可以使用定义;更复杂的情况需要自己编写轻量级资源和提供商 (LWRP). 两者都可以在其他菜谱和其他烹饪书中使用。
您可以在这里阅读有关创建 LWRP 的精彩文章: http://dougireton.com/blog/2012/12/31/creating-an-lwrp/, http://dougireton.com/blog/2013/01/07/creating-an-lwrp-part-2/, http://dougireton.com/blog/2013/01/13/creating-an-lwrp-part-3/。