Module: RhevmDiskProbe

Defined in:
lib/disk/modules/RhevmDiskProbe.rb

Constant Summary collapse

DESC_MOD =
"RhevmDescriptor"
QCOW_MOD =
"QcowDisk"
RAW_MOD =
'RawDisk'

Class Method Summary collapse

Class Method Details

.parseDescriptor(descriptor) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'lib/disk/modules/RhevmDiskProbe.rb', line 41

def self.parseDescriptor(descriptor)
  desc = {}
  descriptor.each_line do |line|
    line.strip!
    break if line == 'EOF'
    next unless line.include?('=')
    key, *value = line.split('=')
    desc[key.downcase.to_sym] = value = value.join('=')
  end
  desc
end

.probe(ostruct) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/disk/modules/RhevmDiskProbe.rb', line 6

def self.probe(ostruct)
  return nil unless ostruct.fileName

  ext = File.extname(ostruct.fileName).downcase
  return nil unless ext.length.zero?

  format = ostruct.format.to_s.downcase
  return RAW_MOD  if format == 'raw'
  return QCOW_MOD if format == 'cow'

  descriptor_file = ostruct.fileName + '.meta'
  return nil unless File.exist?(descriptor_file)

  # If this ostruct already has a descriptor don't bother checking.
  # NOTE: If it does have a descriptor, we're coming from RhevmDescriptor.rb
  #       trying to open a disk - so don't regress infinitely.
  if ostruct.Descriptor.nil?
    # Get descriptor metadata
    f = File.open(descriptor_file, "r")
    descriptor = f.read; f.close
    if descriptor.include?('EOF')
      ostruct.Descriptor = descriptor
      desc = parseDescriptor(descriptor)
      return RAW_MOD if desc[:format].to_s.include?('RAW')
      return QCOW_MOD if desc[:format].to_s.include?('COW')
      return DESC_MOD
    end
  else
    desc = parseDescriptor(ostruct.Descriptor)
    return RAW_MOD  if desc[:format].to_s.include?('RAW')
    return QCOW_MOD if desc[:format].to_s.include?('COW')
  end
  nil
end