Как сделать сообщение об ошибке более информативным при выполнении ресурса chef?
Вот некоторый код шеф-повара, который пытается распаковать файл в какой-то каталог.
Рецепт вызывается из глубины некоторых других рецептов, и он случайно ошибается.
unless ::File.exists?(::File.join(node[:zookeeper][:install_dir], zk_basename))
execute 'install zookeeper' do # <-- Line 57
user node[:zookeeper][:user]
cwd Chef::Config[:file_cache_path]
command "tar -C #{node[:zookeeper][:install_dir]} -zxf #{zk_basename}.tar.gz"
end
end
Я вижу ошибку:
Mixlib::ShellOut::ShellCommandFailed: execute[install zookeeper] (zookeeper::add line 57) had an error:
Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '2' . ,
FATAL: Mixlib::ShellOut::ShellCommandFailed: execute[install zookeeper] (zookeeper::add line 57) had an error:
Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '2' .
Поскольку ошибка происходит случайно в среде, к которой у меня нет доступа по ssh, я хочу улучшить рецепт шеф-повара, чтобы перехватить эту ошибку и предоставить более подробную информацию в сообщении об ошибке, например:
- Размер и дата создания файла tar.gz
- Разрешения целевого каталога
Обратите внимание, что я должен поместить их в сообщение об ошибке исключения только потому, что это единственное, что видно (без доступа ssh) сложного запуска шеф-повара.
1 ответ
Вы можете добавить что-то вроде этого
log 'log_important_bits' do
message lazy {
the_dir = ::File.stat(node[:zookeeper][:install_dir])
the_file = ::File.stat(::File.join(node[:zookeeper][:install_dir], zk_basename))
"file.size = #{the_file.size} ... put whatever you want here"
}
level :error # So you'll always see it
end