Обработка исключений chef -> самый простой способ использовать chat_message (LWRP) на:run_failed

На наших узлах запланирован chef-клиент, и я хотел бы настроить обработку исключений, чтобы об ошибке сообщалось в нашем чате.

Ранее я получил помощь, чтобы написать LWRP, какие сообщения для чата

chat_message do
    message "Hello, World"
    channel "deployments"
end

Теперь по моему рецепту deploy_stuff, Я хотел бы простой способ сообщить об исключениях с LWRP chat_messageи я попробовал это:

# set up error handler
Chef.event_handler do
  on :run_failed do |exception|
    chat_message ":exclamation: chef run_failed on #{Chef.run_context.node.name}: #{exception.message}"
  end
end

Однако это не сработало:

Running handlers:
[2016-10-14T10:13:48+02:00] ERROR: Running exception handlers
Running handlers complete
[2016-10-14T10:13:48+02:00] ERROR: Exception handlers complete
Chef Client failed. 10 resources updated in 20 seconds
[2016-10-14T10:13:48+02:00] ERROR: undefined method `chat_message' for #<#<Class:0x00000005e1ef60>:0x00000005e1ee70>
[2016-10-14T10:13:48+02:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

Что значит undefined method chat_message значит, я не могу использовать LWRP здесь?

Я уверен chat поваренная книга включена, потому что другой код в моем рецепте вызова chat_message работает отлично.

1 ответ

Решение

Нет, обработчик событий просто запускает старый старый код Ruby, а не рецепт DSL. Вы можете поместить важную логику в метод библиотеки и вызвать ее как из ресурса, так и из обработчика событий.

Другие вопросы по тегам