Как вызвать рецепт из пользовательского обработчика в Chef

Для вызова любого рецепта используется метод 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

Файл журнала содержит следующее:

  • «Запуск обработчика отчетов при неудачном запуске клиента»
  • «Форматированное исключение»

Однако в лог-файле я не нашел ничего, что упоминало бы рецепт отката.

Правильный ли код, который я использовал выше для вызова рецепта?


person Sunil Patidar    schedule 03.06.2014    source источник
comment
Пожалуйста, покажите свой код и повторите свой вопрос. Непонятно, о чем вы спрашиваете.   -  person Sabuncu    schedule 10.06.2014
comment
Когда вы говорите, что это не работает, вам нужно предоставить более подробную информацию. Вы уверены, что вызывается обработчик исключений? Вы уверены, что вызывается модуль TEST? Вы вставили в них print операторов, чтобы убедиться, что они вызываются? Как вы имитируете неудачный run_status в вашем тесте?   -  person Sabuncu    schedule 10.06.2014
comment
Я нашел операторы ведения журнала «Обработчик отчетов о сбое» и «Форматированное исключение:» в файле журнала. Однако я не нашел никаких записей в журнале, связанных с рецептом отката. В общем, способ, который я использовал для вызова рецепта в приведенном выше коде, правильный или нет?   -  person Sunil Patidar    schedule 11.06.2014
comment
Я включил ваши комментарии в вопрос.   -  person Sabuncu    schedule 11.06.2014


Ответы (1)


В момент вызова обработчика Chef as уже завершил его выполнение. Чтобы это работало, вам нужно будет создать собственный контекст выполнения. Взгляните на поваренную книгу сбалансированности и ее реализацию include_recipe, чтобы увидеть, как это сделать, но я настоятельно рекомендую не делать этого, учитывая сложность и хрупкость получаемой системы.

person coderanger    schedule 20.06.2014