Chef infra 无需使用应用程序烹饪书即可定制烹饪书

Chef infra 无需使用应用程序烹饪书即可定制烹饪书,chef-infra,chef-recipe,Chef Infra,Chef Recipe,我们已经可以覆盖角色或节点对象中的Cookbook属性。食谱呢?我们是否可以使用烹饪书中提供的资源(LWRP),而不必使用烹饪书包装 例如,我想用一些插件安装Jenkins。显示有一个可以使用的属性 node['jenkins']['server']['plugins'] 但是,它仅允许插件名称和版本。 烹饪书中也有一句话似乎是我想要的。例如: jenkins_plugin 'custom_plugin' do action :install version '0.3' url '

我们已经可以覆盖角色或节点对象中的Cookbook属性。食谱呢?我们是否可以使用烹饪书中提供的资源(LWRP),而不必使用烹饪书包装

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

node['jenkins']['server']['plugins']
但是,它仅允许插件名称和版本。 烹饪书中也有一句话似乎是我想要的。例如:

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

我是否需要创建一个完整的包装器Cookbook并将此代码放在/recipes/default.rb中,以便将此功能添加到角色或节点?这似乎有些过分。

在使用任何社区食谱时,你也应该深入阅读食谱。您会注意到,配方允许您在该散列中设置url以及名称和版本

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

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

然而,在一般情况下,如果这个食谱没有这样的灵活性,那么你就必须创建一本食谱,这取决于另一本食谱(你不必执行食谱,只需依赖它),并在你自己的食谱中使用LWRP定义资源。

应用程序食谱模式是一种新兴的厨师最佳实践。好的社区食谱是这样编写的,它们的行为可以通过节点属性进行定制,并且它们可能提供LWRP,使您的食谱更易于编写。使用像Berkself这样的工具来管理您的依赖关系,编写应用程序食谱成为一种乐趣,而不是一件琐事:-)@Mark。谢谢你的信息。我已经在使用Berkshelf和应用程序烹饪书了。不过,在某些情况下,这似乎有些过分,因为我们只需要使用一个不属于现有配方的资源调用。我想我想到了ruby mixin,我把社区烹饪书当作图书馆(事实上,它被称为图书馆模式),并使用Berkself式的Maven来管理这些第三方依赖关系。我的“代码”是一本应用程序烹饪书,用来描述和实现我想要的基础设施,列出我想要创建的资源。这就是利用LWRP的方便之处。使您的食谱声明更具可读性。