Chef超市提供3200多种食谱,通常已经有一种食谱可以满足我需要解决的需求。

几乎每次每次对模板,变量或现有食谱中的资源。

有哪些步骤可以覆盖和/或改进现有食谱?无需分叉其代码,并保留了将来获得版本更新的功能。

评论

大多数食谱都有一定数量的属性,可以在构建包装食谱时简单地进行设置。通常,您不必“改写”任何东西即可进行预期的调整。

#1 楼

有很多细节,但是我们使用的整体模式是“包装并扩展”。通常的想法是制作一个依赖于社区食谱的食谱,通常称为mycompany_originalthing,然后在其中调用include_recipe 'originalthing::whatever'的方法中制作食谱,但在此之前或之后添加更多的东西,或者调用诸如edit_resource之类的东西来更改资源。尽可能避免使用edit_resource,因为它会导致代码变脆,但是如果需要的话,它就在那儿。您还可以使用包装食谱来设置属性,子类或包装自定义资源,等等。

对于“我需要在社区食谱中调整模板”的特定情况,它看起来像这样:

include_recipe 'original::whatever'

edit_resource!(:template, '/path/to/something') do
  source 'mytemplate.erb'
  cookbook 'mycompany_original'
end


您可以在https://coderanger.net/rewind/

找到有关edit_resource和朋友的更多详细信息自定义资源而不是食谱,事情可能会变得更加复杂,但具体细节在很大程度上取决于您要扩展的食谱的编写方式。

评论


这是我们遵循的模式,通常在调整社区食谱变得过于困难之前就可以使用,并且更容易从头开始重写它。

–特拉维斯·汤普森(Travis Thompson)
17 Mar 2 '17 at 2:54

大!甚至都不知道他们将古老的越野车倒带东西改成了Chef的一部分。

– Evgeny Zislis
17 Mar 2 '17 at 4:21

不好意思,但是您提到的链接中也包含您的用户名...这让我想知道您是否与该链接有任何从属关系。如果是这样,您是否熟悉关于包含适当的“披露”的SE政策(也包括在您的答案中)?

– Pierre.Vriens♦
17 Mar 5 '17 at 7:57

在Chef世界的背景下,@ Pierre.Vriens,我的博客大致相当于官方文档。如果需要确认,请查看我的历史记录:)

–coderanger
17 Mar 5 '17 at 8:20

(在这种情况下,我不链接到官方文档,因为它们包含此API的语法错误)

–coderanger
17 Mar 5 '17 at 8:29