Chef infra 如何在chef resource execute中使错误消息更具信息性?

Chef infra 如何在chef resource execute中使错误消息更具信息性?,chef-infra,Chef Infra,下面是一些试图将文件解压到某个目录中的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_p

下面是一些试图将文件解压到某个目录中的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
由于错误是在我没有ssh访问权限的环境中随机发生的,因此我希望改进chef配方以捕获此错误,并在错误消息中提供更多详细信息,如:

  • tar.gz文件的大小和创建日期
  • 目标目录的权限

  • 请注意,我必须将它们放在异常的错误消息中,因为这是复杂的chef运行中唯一可见的东西(没有ssh访问)

    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
    

    你可以加上这样的东西

    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