Как сделать сообщение об ошибке более информативным при выполнении ресурса 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, я хочу улучшить рецепт шеф-повара, чтобы перехватить эту ошибку и предоставить более подробную информацию в сообщении об ошибке, например:

  1. Размер и дата создания файла tar.gz
  2. Разрешения целевого каталога

Обратите внимание, что я должен поместить их в сообщение об ошибке исключения только потому, что это единственное, что видно (без доступа 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
Другие вопросы по тегам