Chef infra 如何从Chef中的自定义处理程序调用配方

Chef infra 如何从Chef中的自定义处理程序调用配方,chef-infra,chef-solo,Chef Infra,Chef Solo,对于调用任何配方,使用“include_recipe”方法。我已经创建了一个异常处理程序,在这里我调用了一个回滚配方。然而,它不起作用。以下是我的代码: require 'chef/log' require 'time' module TEST class ExceptionHandler < Chef::Handler def report if run_status.failed? then Chef::Log.info("Runn

对于调用任何配方,使用“include_recipe”方法。我已经创建了一个异常处理程序,在这里我调用了一个回滚配方。然而,它不起作用。以下是我的代码:

require 'chef/log'
require 'time'

module TEST
  class ExceptionHandler < Chef::Handler
    def report      
      if run_status.failed? then
        Chef::Log.info("Running Report handler for failed client run...")        
        Chef::Log.info("Formatted Exception: "+run_status.formatted_exception)
        //here i want to call rollback recipe
        include_recipe "TEST::rollback"
      else
        Chef::Log.info("Running success...")
      end
    end
  end
end
需要“厨师/日志”
需要“时间”
模块测试
类ExceptionHandler
日志文件包含以下内容:

  • “正在为失败的客户端运行运行报告处理程序”
  • “格式化异常”
但是,我在日志文件中没有找到任何提到回滚方法的内容


我上面用于调用配方的代码正确吗?

在调用处理程序时,Chef已完成其执行。您必须创建一个自定义执行上下文才能使其工作。查看poise cookbook及其include_recipe的实现,了解如何做到这一点,但我强烈建议不要这样做,因为其中涉及的复杂性以及由此产生的系统将是多么脆弱。

请展示您的代码并重申您的问题。不清楚你在问什么。当你说“它不起作用”时,你需要提供更多的细节。您确定正在调用异常处理程序吗?您确定正在调用
测试
模块吗?您是否将
print
语句放入其中以确保它们被调用?如何在测试中模拟失败的
运行状态
?我在日志文件中找到了日志语句“Running Report handler for failed client run…”和“Formatted Exception:”。但是,我没有找到任何与回滚方法相关的日志记录语句。总的来说,我在上面代码中调用配方的方式是正确的还是错误的?我已经将您的评论纳入了问题中。