首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用图书馆食谱内部资源

使用图书馆食谱内部资源
EN

Stack Overflow用户
提问于 2015-08-26 23:15:57
回答 2查看 605关注 0票数 0

我正在努力学习图书馆的食谱,并写了一本名为nol的测试库食谱。在nol/libraries/nol_helper.rb中,我有以下代码

代码语言:javascript
运行
复制
module Nol
  module Helper

    include Chef::Mixin::ShellOut

    def has_bacon?
      cmd = shell_out!('getent passwd bacon', {:returns => [0,2]})
      cmd.stderr.empty? && (cmd.stdout =~ /^bacon/)
    end
  end
end

在第二本食谱中,我尝试将它包含在default.rb食谱中,作为

代码语言:javascript
运行
复制
class Chef::Resource::User
        include Nol::Helper
end

user 'noi' do
    action :create
    only_if { has_balcon? }
end

但是厨师不断地给出下面的错误

代码语言:javascript
运行
复制
 ================================================================================
    Error executing action `create` on resource 'user[noi]'
    ================================================================================

    NoMethodError
    -------------
    undefined method `has_balcon?' for Chef::Resource::User

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-08-27 06:15:11

所以有两件事,一是你有一个简单的拼写错误,但更重要的是,它真的不推荐给monkeypatch核心Chef类。

通过使用模块方法,您可以在不打补丁的情况下完成类似的操作:

代码语言:javascript
运行
复制
module Nol
  def self.has_bacon
    # As before ....
  end
end

user 'noi' do
  only_if { Nol.has_bacon? }
end
票数 4
EN

Stack Overflow用户

发布于 2015-08-27 18:11:11

如果您确实希望将此方法添加到用户资源中,则应该扩展provider ::Chef::Provider::User.send(:include, Nol::Helper)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32230463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档