如何编写扩展现有提供程序的Chef提供程序?

时间:2014-01-15 16:50:39

标签: ruby chef chef-recipe

Cookbook A提供了一个LWRP,我希望在cookbook B中使用LWRP或HWRP进行扩展,以便我可以执行以下操作,provider_b将使用{{1}中的现有代码/资源并接受它可以用于它自己的动作的其他属性:

provider_a

这是否可行,如果我想避免编辑食谱A,它仍然可以吗?

2 个答案:

答案 0 :(得分:3)

我认为文档中关于Custom LWRPs的部分和最后链接的tutorial部分可以为您提供帮助。

编辑:好的,也许看this LWRPthis LWRP向正确的方向发展(因为我认为LWRP是一种非常常见的模式,我没有那么详细)。您可以使用new_resource.param_a

访问参数

所以这样的事情应该有效:

action :install do
  provider_a "A" do
    param_a new_resource.param_a
  end

  provider_b "B" do
    param_a new_resource.param_a
    param_b new_resource.param_b
  end
end

答案 1 :(得分:2)

听起来您正在尝试创建现有LWRP的子资源,因此您不会“包装”它 - 您正在“扩展它”。 LWRP语法使得这不太理想,因为资源在运行时动态编译到Ruby类中。

您可以切换到HWRP(新的Jenkins cookbook是一个使用继承和OO来扩展资源和共享属性的好例子)。就其本质而言,LWRP不是非常可扩展的,因为它们是在运行时动态重建和重新加载的。