Обработка исключений 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. Вы можете поместить важную логику в метод библиотеки и вызвать ее как из ресурса, так и из обработчика событий.