Module: XmlConfig

Defined in:
lib/metadata/VmConfig/xmlConfig.rb

Instance Method Summary collapse

Instance Method Details

#add_item(var, value) ⇒ Object



68
69
70
# File 'lib/metadata/VmConfig/xmlConfig.rb', line 68

def add_item(var, value)
  @convertText += "#{var} = \"#{value}\"\n"
end

#convert(filename) ⇒ 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
40
41
42
43
44
45
46
47
48
# File 'lib/metadata/VmConfig/xmlConfig.rb', line 6

def convert(filename)
  @convertText = ""
  # $log.debug "Processing Windows Configuration file [#{filename}]"

  xml_data = nil
  unless File.file?(filename)
    require 'sys-uname'
    if Sys::Platform::IMPL == :linux
      begin
        # First check to see if the command is available
        AwesomeSpawn.run!("virsh", :params => ["list"])
        begin
          xml_data = AwesomeSpawn.run!("virsh", :params => ["dumpxml", File.basename(filename, ".*")], :combined_output => true).output
        rescue => err
          $log.error "#{err}\n#{err.backtrace.join("\n")}"
        end
      rescue
      end
    end
    raise "Cannot open config file: [#{filename}]" if xml_data.blank?
  end

  if xml_data.nil?
    fileSize = File.size(filename)
    raise "Specified XML file [#{filename}] is not a valid VM configuration file." if fileSize > 104857
    xml = MiqXml.loadFile(filename)
    if xml.encoding == "UTF-16" && xml.root.nil? && Object.const_defined?('Nokogiri')
      xml_data = File.open(filename) { |f| Nokogiri::XML(f) }.to_xml(:encoding => "UTF-8")
      xml = MiqXml.load(xml_data)
    end
  else
    xml = MiqXml.load(xml_data)
  end
  xml_type = nil
  xml_type = :xen unless xml.find_first("//vm/thinsyVmm").nil?
  xml_type = :kvm if xml.root.name == 'domain' && ['kvm', 'qemu'].include?(xml.root.attributes['type'])

  raise "Specified XML file [#{filename}] is not a valid VM configuration file." if xml_type.nil?

  xml_to_config(xml)

  @convertText
end

#vdisk(element) ⇒ Object



63
64
65
66
# File 'lib/metadata/VmConfig/xmlConfig.rb', line 63

def vdisk(element)
  index = element.attributes['index'].to_i
  add_item("scsi0:#{index}.fileName", element.elements[1].text)
end

#vendorObject



72
73
74
# File 'lib/metadata/VmConfig/xmlConfig.rb', line 72

def vendor
  "xen"
end

#vm(element) ⇒ Object



54
55
56
57
# File 'lib/metadata/VmConfig/xmlConfig.rb', line 54

def vm(element)
  add_item("displayName", element.attributes['name'])
  add_item("memsize", element.attributes['minmem'])
end

#vmmversion(element) ⇒ Object



59
60
61
# File 'lib/metadata/VmConfig/xmlConfig.rb', line 59

def vmmversion(element)
  add_item("config.version", element.text)
end

#xml_to_config(xml) ⇒ Object



50
51
52
# File 'lib/metadata/VmConfig/xmlConfig.rb', line 50

def xml_to_config(xml)
  xml.each_recursive { |e| send(e.name, e) if self.respond_to?(e.name) && !['id', 'type'].include?(e.name.downcase) }
end