class DiskID::Inspector

Public Class Methods

new(file, qemu_img_bin='qemu-img-bleeding') click to toggle source
# File lib/diskid.rb, line 62
def initialize(file, qemu_img_bin='qemu-img-bleeding')
  @qemu_img_bin = (qemu_img_bin || '').strip.chomp
  if not @qemu_img_bin =~ /^\//
    @qemu_img_bin = `sh -c 'command -v #{@qemu_img_bin}'`.strip.chomp
  end
  raise ArgumentError.new("qemu-img command not found: #{@qemu_img_bin}") if @qemu_img_bin.empty?

  @file = file
end

Public Instance Methods

identify() click to toggle source
# File lib/diskid.rb, line 72
def identify 
  out = `#{@qemu_img_bin} info #{@file}`
  raise Exception.new("Error getting info from #{@file}") if $? != 0

  md = /image:(.*)$\nfile format:(.*)$\nvirtual size:(.*)$\ndisk size:(.*)\n/.match out
  @file_name,@format,@virtual_size,@disk_size = [md[1], md[2], md[3], md[4]].map { |e| e.strip.chomp }
  @virtual_size = @virtual_size.split()[0]
  variant = ''
  if @format == 'vmdk'
    variant = read_variant @file
  end
  DiskInfo.new({
    'file_name' =>  @file_name,
    'format' => @format,
    'virtual_size' => @virtual_size,
    'disk_size' => @disk_size,
    'variant' => variant
  })
end

Private Instance Methods

read_variant(file) click to toggle source
# File lib/diskid.rb, line 93
def read_variant(file)
  IO.read(file, 20000).each_line do |l|
    return $1 if l =~ /createType="(.*?)"/
  end
  ''
end