2014-02-12 58 views
16

对于厨师来说相对较新,我需要从现有食谱中创建图书馆或定义。厨师图书馆或定义?

再有食谱使用bash的资源,红宝石块资源(它通知另一红宝石块资源与延迟一段时间),模板资源该通知红宝石块等

什么是这个最好的方法?图书馆或定义?

我读过,如果我使用定义,我将无法通知定义内的资源,这是否意味着我可以通知不同的定义文件中的资源?

我也读过,你不能直接使用资源库。如果这是真的,我该如何在库中使用资源?

+0

创建LWRP。 http://docs.opscode.com/chef/lwrps_custom.html –

+0

看起来定义从12.5开始被弃用。本页有一个很大的警告框 - > https://docs.chef.io/definitions.html –

回答

70

所以,这是“主要基于意见”,但我会回答它。有4种不同的选择,在这里:

  1. 定义
  2. LWRP
  3. HWRP
  4. “库”

的定义仅仅是围绕一个或多个资源的包装与一些参数。但是,定义是而不是添加到资源集合。意味着您无法“通知”或触发定义上的事件。它们仅用于包装和命名配方中发现的一系列可重复步骤。

LWRP(轻量级资源和提供者)是Chef专用的DSL,在运行时实际编译为HWRP(重量级资源和提供者)。 LWRP和HWRP都是厨师分机。除了包装一系列可重复的任务外,* WRP还将在厨师中创建顶级资源(如templatepackage),这些资源可用于您的食谱和其他食谱的食谱中。

与LWRP和HWRP之间的区别确实是Ruby。 HWRP使用成熟的Ruby类。如果你不是Ruby开发者,他们可能有点恐吓。尽管如此,在写作和LWRP之前,你应该尝试一下。 LWRP使用Chef特定的DSL来创建资源。在一天结束时,他们编译(粗略)与重量级别相同的代码。我会在最后链接一些参考资料。您可以访问任何实现中的Chef资源以及run_context。

最后,“图书馆”(注意引号)经常被误解和滥用。他们是Ruby代码,评估为Ruby,所以他们可以做任何事情。 HWRP实际上是一种图书馆的形式。有时候人们使用图书馆作为“帮手”。他们将使用best_ip_foraggregate_some_data等方法创建一个帮助程序模块,然后将该库“混合”(Rubyism)该库到其配方或资源中,以便进行干预。其他时候,图书馆可以用来“攻击”厨师本身。 partial-search食谱就是一个很好的例子。去年在ChefConf上也是Facebook talked about how they limited the number of attributes sent back to the server。图书馆实际上是一个不确定的领土,因为它们是王国的关键。

所以,虽然我没有真正回答你的问题(因为它是基于意见的),但我希望我已经向你提供了关于最佳方向的足够信息。请记住,每个基础设施是一个特殊的雪花,并没有正确的答案;只有最好的答案。我建议与您的团队分享这些信息,并权衡每种方法的优缺点。您也可以尝试一下Chef邮件列表,其中的人会给你很多意见。

资源:

+0

+1优秀的描述。这些概念对于新厨师用户来说非常混乱。 –

+3

嗨塞斯,这解释了很多。我想知道为什么厨师文件不如此。作为厨师和红宝石的新手,我发现LWRP很难理解。如果我有15个声望,我会投你的答案。非常感谢。 – Sbal