图书馆不处理" DSL"为了执行'

时间:2016-08-24 07:21:04

标签: chef dsl

有人可以帮我这个吗?

NoMethodError
-------------
undefined method `execute' for Chat::Mattermost:Class

相关文件内容:(文件名libraries/chat.rb

4:
5:  module Chat
6:    class Mattermost
7:
8:      def self.log_to_chat(message)
9>>       execute "echo" do
10:          command "echo #{message}"
11:        end
12:      end
13:
14:    end
15:  end
16:

我读到DSL语法在定义中不可用,所以我猜我需要做一些类似于r = Chef::Resource::Execute.new("echo #{message}")r.run_command :run的事情但是我不太确定这样做。

其他相关代码,我的方法是"叫做#34;像这样:

log "this is a message" do
  level :info
  notifies :run, Chat::Mattermost.log_to_chat("#{name}"), :immediately
end

编辑:第二次尝试

NoMethodError
-------------
undefined method `events' for nil:NilClass

代码:

5:  require 'chef/resource/execute'
6:
7:  module Chat
8:    class Mattermost
9:
10:      def self.log_to_chat(message)
11:        cmd = Chef::Resource::Execute.new("echo #{message}")
12>>       cmd.run_action(:run)
13:

1 个答案:

答案 0 :(得分:1)

notifies :run, Chat::Mattermost.log_to_chat("#{name}"), :immediately
  1. 您无法在非资源上调用通知。
  2. 您无法通过调用通知动态创建资源,但它无法正常工作。
  3. 作为第二个参数(从资源块调用时)到notifies,您应该传递字符串,该字符串将用于在厨师上下文中搜索资源。
  4. 如果您想增强日志资源提供程序,您应该实现自己的,this,将其放在libraries中并使用新实现的类名作为提供程序调用{​​{1}}资源

    log