使用 Chef Server,删除对特定资源的重复调用的良好模式是什么?

使用 Chef Server,删除对特定资源的重复调用的良好模式是什么?

我有一个配方,其中多次调用给定资源,比如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/

相关内容