我正在尝试更好地理解Chef的处理程序,并且通过Chef's documentation和一些博客文章阅读,我已经设置了这个基本的自定义处理程序。
这是我的食谱的开始
chef_handler 'SimpleReport::UpdatedResources' do
source "handler_test.rb"
action :enable
end
这是处理程序,即handler_test.rb
require 'chef/log'
require 'chef/handler'
module SimpleReport
class UpdatedResources < Chef::Handler
def report
if run_status.updated_resources
Chef::Log.info "Resources updated this run:"
run_status.updated_resources.each {|r| Chef::Log.info "#{r.to_s}"}
else
Chef::Log.info "No Resources updated this run!"
end
end
end
end
我正在运行Chef Zero,日志级别设置为info。 Chef识别并注册处理程序:
* chef_handler[SimpleReport::UpdatedResources] action enable
- disable SimpleReport::UpdatedResources as a report handler
- disable SimpleReport::UpdatedResources as a exception handler
- load SimpleReport::UpdatedResources from handler_test.rb
- enable chef_handler[SimpleReport::UpdatedResources] as a report handler
- enable chef_handler[SimpleReport::UpdatedResources] as a exception handler
但在运行结束时,处理程序没有报告:
Running handlers:
- SimpleReport::UpdatedResources
Running handlers complete
为什么会这样?
答案 0 :(得分:2)
我放弃了Chef社区松弛和was told that Chef may enable the格式化程序,并显示格式化程序输出,如果Chef以交互方式运行(由TTY的存在确定)
这似乎没有在任何地方记录,但是present in the code。要解决此问题,您可以使用--force-logger
选项确保它使用日志输出而不是格式化输出,或者传递-L log-file-name
以将结果记录到文件