【问题标题】:Customising cookbook without using an Application Cookbook在不使用应用程序说明书的情况下自定义说明书
【发布时间】:2014-01-05 13:40:38
【问题描述】:

我们已经可以在角色或节点对象中覆盖 Cookbook 属性。食谱呢?我们可以在不使用 Cookbook Wrapper 的情况下使用 Cookbook 中提供的资源 (LWRP) 吗?

例如,我想安装带有一些插件的 Jenkins。 Jenkins cookbook 表示有一个属性可以使用

node['jenkins']['server']['plugins']

然而,它仅限于允许插件名称和版本。 Cookbook 中还有一个Resource documented 似乎可以满足我的要求。例如:

jenkins_plugin 'custom_plugin' do
  action :install
  version '0.3'
  url 'http://myrepo/jenkins/plugins/0.3/custom_plugin.hpi'
end

我是否需要创建一个完整的 Wrapper Cookbook 并将此代码放在 /recipes/default.rb 中,只是为了将此功能添加到角色或节点?这似乎有点矫枉过正。

【问题讨论】:

  • 应用程序食谱模式是一种新兴的厨师最佳实践。好的社区食谱的编写方式可以使用节点属性自定义其行为,并且它们可能提供 LWRP,使您的食谱更易于编写。使用像 Berkshelf 这样的工具来管理您的依赖项,编写应用程序说明书成为一种乐趣,而不是一件苦差事:-)
  • @马克。谢谢(你的)信息。我已经在使用 Berkshelf 和 A​​pplication Cookbooks。不过,在某些情况下,这似乎有点矫枉过正,因为当我们只需要使用一个不属于现有配方的资源调用时。我想我已经想到了 ruby​​ mixin。
  • 我将社区食谱视为库(实际上它被称为库模式),并使用像 Maven 这样的 berkshelf 来管理这些第 3 方依赖项。我的“代码”是用于描述和实现我想要的基础设施的应用程序说明书,我列出了我想要创建的资源。这就是利用 LWRP 派上用场的地方。使您的说明书声明性更具可读性。

标签: chef-infra chef-recipe


【解决方案1】:

在使用任何社区食谱时,您也应该始终深入阅读食谱。您会注意到 jenkins::server 配方允许您在该哈希中设置 url 以及名称和版本。

在这种特殊情况下,您可以像这样覆盖属性:

node.override['jenkins']['server']['plugins'] = [
  {
    'name' => 'custom_plugin', 
    'version' => '0.3', 
    'url' => 'http://myrepo/jenkins/plugins/0.3/custom_plugin.hpi'
  }]

然而,在一般情况下,如果这个食谱不像这样灵活,那么你将不得不创建一个食谱,这取决于另一个食谱(你不必执行食谱,只依赖它) ,并在您自己的配方中使用 LWRP 定义资源。

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 2013-03-03
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    相关资源
    最近更新 更多