【问题标题】:Require a custom LWRP需要自定义 LWRP
【发布时间】:2014-04-11 23:52:45
【问题描述】:

我一直在尝试创建我的第一个 lwrp

我在以下位置创建了一个非常基本的资源 + 提供程序:

resources/rack_site.rb
providers/rack_site.rb

我一直在尝试在同一本食谱的食谱中测试“rack_site”资源,但由于找不到资源的错误而失败。我尝试将这两个文件移动到我作为依赖项添加的说明书中,但仍然失败。

在配方中使用自定义资源必须做什么?

【问题讨论】:

    标签: chef-infra lwrp


    【解决方案1】:

    Chef 使用说明书的名称(如metadata.rb 中所定义)作为 LWRP 的前缀。例如,如果您的食谱名为 acme-nginx,并且您有一个名为 rack_site.rb 的资源,则配方 DSL 中关联的 LWRP 为 acme_nginx_rack_site。例如:

    acme_nginx_rack_site 'foo' do
      # ...
    end
    

    Chef 会自动将对 Ruby 方法无效的字符转换为下划线(包括破折号)。

    【讨论】:

    • 对于您不希望 LWRP 以食谱名称为前缀的情况(这是大多数“重量级”资源的约定),您可以使用 provides 方法指定较短的名称。在上述情况下,将provides :rack_site 添加到资源和提供程序文件的顶部就可以解决问题。
    【解决方案2】:

    这也吸引了我。您可以通过在 metadata.rb 中添加说明书名称并在资源名称前加上下划线来访问 LWRP。例如,如果机架站点资源在 Foo 食谱中:foo_rack_site

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-01
      • 2013-01-06
      • 1970-01-01
      • 2011-07-09
      • 2015-07-27
      相关资源
      最近更新 更多