厨师图书馆或定义?

作为Chef的新手,我需要从现有的配方中创建库或定义。

配方使用bash资源,ruby块资源(通过延迟计时通知另一个ruby块资源),再次通知ruby块等的模板资源。

最好的办法是什么? 图书馆或定义?

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

我还读到,在库中你不能直接使用资源。 如果是这样,我如何在我的库中使用资源?

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

  1. 定义
  2. LWRP
  3. HWRP
  4. “图书馆”

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

LWRP(轻量级资源和提供程序)是特定于Chef的DSL,它实际上在运行时编译为HWRP(重量级资源和提供程序)。 LWRP和HWRP都是Chef 扩展 。 除了包装一系列可重复的任务外,* WRP还将在Chef(如templatepackage )中创建一个顶级资源,该资源可用于您的食谱和其他食谱的配方。

和LWRP和HWRP之间的区别实际上是Ruby。 HWRP使用完整的Ruby类。 如果您不是Ruby开发人员,他们可能会有点吓人。 尽管如此,你应该在写作和LWRP之前试一试。 LWRP使用特定于Chef的DSL来创建资源。 在一天结束时,他们编译为(大致)与重量级对应物相同的代码。 我会在最后链接一些参考文献。 您可以访问任一实现中的Chef资源以及run_context。

最后,“图书馆”(注意引用)经常被误解和滥用。 它们是Ruby代码,被评估为Ruby,因此它们几乎可以做任何事情。 HWRP实际上是库的一种forms。 有时人们使用图书馆作为“帮助者”。 他们将使用best_ip_foraggregate_some_data等方法创建一个辅助模块,然后将这些库“混合”(Rubyism)到他们的配方或资源中以便干掉。 其他时候,库可以用来“破解”厨师本身。 部分搜索菜谱就是一个很好的例子。 Facebook谈到了他们如何限制去年在ChefConf 发送回服务器的属性数量 。 图书馆确实是一个未定义的领域,因为它们是王国的关键。

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

资源:

  • LWRPs
  • HWRPs
  • 图书馆