厨师开始处理

时间:2015-04-27 15:41:37

标签: logging chef

我正在阅读client.log文件,并将任何错误输出到客户端上的另一个txt文件。然后我正在检查该文件是否包含任何内容,如果是,我创建了一个错误。此功能非常好。我的问题是我必须把我的食谱作为厨师运行的最后一个食谱。这是一个问题,因为如果确实发生了错误,那么我的配方就不会运行,因为并非所有错误都会在异常中捕获。我现在正试图在启动处理程序中运行我的食谱,这样它将捕获上一次运行的错误,这很好。但我无法使启动处理程序正常工作。

我在一本厨师书中跟随了一个例子。当我重新启动chef-client服务时,我收到错误“Windows无法在本地计算机上启动Chef Client Service服务。错误1053服务没有及时响应启动或控制请求。”

这是我的处理程序代码

reqire "chef/handler"
class Chef
  class Handler
    class AwesomeStartHandler < Chef::Handler
      def report
        chef::Log.info("Handler executed")
      end
    end
  end
end

这就是我被告知放在client.rb文件顶部的内容。

verify_api_cert true
require "path/awesome_start_handler.rb"
example_start_handler = Chef::Handler::AwesomeStartHandler.new
start_handlers << example_start_handler

以下代码适用于client.rb,但是一旦取消注释require,我就会得到相同的错误消息。 exception_handlers确实创建了一个失败的run-data.json,它确实包含了错误,但由于我编写的代码将使用启动处理程序,所以如果我能使用它,那就更好了。

#require 'path/awesome_start_handler.rb'
#start_handlers << Chef::Handler::AwesomeStartHandler.new()
require 'chef/handler/error_report'
report_handlers << Chef::Handler::ErrorReport.new()
exception_handlers << Chef::Handler::ErrorReport.new()

1 个答案:

答案 0 :(得分:0)

即使它不会很长,也值得回答:

根据this part of chef documentation,可以随时加载报表处理程序,它通常在开头加载,但这不是强制性的。

报表处理程序将能够解析run_status属性以获取更新/失败的资源,这些资源不会停止大厨(没有异常引发),在引发异常时将调用错误处理程序。

您可以编写一个处理这两者的自定义处理程序,它必须根据report返回值定义在run_status.failed?方法中要执行的操作。

上面链接的文档有很多来自现有处理程序的例子,这是编写自己的处理程序的良好起点。

评论和问题编辑后的精确度:

您描述的方式是从client.rb文件加载报表处理程序的历史方法。

启动处理程序是一个特定的启动处理程序,并在名为client.rb的{​​{1}}中有自己的设置。有关如何配置启动处理程序的官方文档,请参阅there。根据你的一条评论,驱动chef_client食谱的属性听起来是最好的选择。