厨师图书馆或定义?

Sba*_*bal 17 ruby chef-infra

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

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

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

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

我还读到,在库中你无法直接使用资源.如果是这样,我如何在我的库中使用资源?

set*_*rgo 71

所以,这是"主要基于意见",但无论如何我都会回答.这里有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实际上是库的一种形式.有时人们使用图书馆作为"帮助者".他们将创建一个帮助模块等的方法best_ip_foraggregate_some_data再"混"(Rubyism)该库到他们的食谱或资源变干的事情了.其他时候,库可以用来"破解"厨师本身.该部分搜索菜谱就是一个很好的例子.Facebook谈到了他们如何限制去年在ChefConf 发送回服务器的属性数量.图书馆实际上是一个未定义的领域,因为它们是王国的关键.

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

资源:

  • 嗨赛斯,这解释了很多.我想知道为什么厨师文档不如此彻底.作为厨师和红宝石的新手,我发现LWRP很难理解.如果我有15个声望,我会投票给你答案.非常感谢. (3认同)