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

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

 provider_a "A" do attr_from_a :value end provider_b "B" do attr_from_a :value attr_from_b :value end 

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

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

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

我认为文档中的自定义LWRP部分和最后链接的教程应该对您有所帮助。

编辑:好的,也许看看这个LWRP或者这个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