QemuXML - file /etc/libvirt/qemu/*.xml and /var/run/libvirt/qemu/*.xml

Parsers provided by this module are:

QemuXML - file /etc/libvirt/qemu/*.xml

VarQemuXML - file /var/run/libvirt/qemu/*.xml

OpenStackInstanceXML - file /etc/libvirt/qemu/*.xml

class insights.parsers.qemu_xml.BaseQemuXML(context)[source]

Bases: XMLParser

Base class for parsing Qemu XML files. It uses XMLParser mixin class.

vm_name

Name of VM

Type:

str

parse_content(content)[source]

All child classes inherit this function to parse XML file automatically. It will call the function parse_dom() by default to parser all necessary data to data and the xmlns (the default namespace) is ready for this function.

parse_dom()[source]

Parse xml information in data and return.

Returns:

Parsed xml data. An empty dictionary when content is blank.

Return type:

dict

class insights.parsers.qemu_xml.OpenStackInstanceXML(context)[source]

Bases: BaseQemuXML

Parse OpenStack instances metadata based on the class BaseQemuXML.

This parser depends on insights.components.openstack.IsOpenStackCompute and will be fired only if the dependency is met.

Sample metadata section in the XML file:

<metadata>
<nova:instance xmlns:nova="http://openstack.org/xmlns/libvirt/nova/1.0">
  <nova:package version="14.0.3-8.el7ost"/>
  <nova:name>django_vm_001</nova:name>
  <nova:creationTime>2017-10-09 08:51:28</nova:creationTime>
  <nova:flavor name="vpc1-cf1-foo-bar">
    <nova:memory>8096</nova:memory>
    <nova:disk>10</nova:disk>
    <nova:swap>0</nova:swap>
    <nova:ephemeral>0</nova:ephemeral>
    <nova:vcpus>4</nova:vcpus>
  </nova:flavor>
  <nova:owner>
    <nova:user uuid="96e9d2b749ea48fcb5a911e6f0e144f2">django_user_01</nova:user>
    <nova:project uuid="5a50e9d0d19746158958be0c759793fb">vpcdi1</nova:project>
  </nova:owner>
  <nova:root type="image" uuid="1a05a423-dfae-428a-ae54-1614d8024e76"/>
</nova:instance>
</metadata>

Examples

>>> rhosp_xml.domain_name
'instance-000008d6'
>>> rhosp_xml.nova.get('version')
'14.0.3-8.el7ost'
>>> rhosp_xml.nova.get('instance_name')
'django_vm_001'
>>> rhosp_xml.nova.get('user')
'django_user_01'
>>> rhosp_xml.nova.get('root_disk_type')
'image'
>>> rhosp_xml.nova.get('flavor_vcpus')
'4'
domain_name

XML domain name.

Type:

str

nova

OpenStack Compute Metadata.

Type:

dict

parse_content(content)[source]

All child classes inherit this function to parse XML file automatically. It will call the function parse_dom() by default to parser all necessary data to data and the xmlns (the default namespace) is ready for this function.

class insights.parsers.qemu_xml.QemuXML(context)[source]

Bases: BaseQemuXML

This class parses xml files under /etc/libvirt/qemu/ using BaseQemuXML base parser.

Sample file:

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit 05-s00c06h0
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>05-s00c06h0</name>
  <uuid>02cf0bba-2bd6-11e7-8337-e4115b9a50d0</uuid>
  <memory unit='KiB'>12582912</memory>
  <currentMemory unit='KiB'>12582912</currentMemory>
  <vcpu placement='static'>4</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='1'/>
    <vcpupin vcpu='1' cpuset='2'/>
    <vcpupin vcpu='2' cpuset='3'/>
    <vcpupin vcpu='3' cpuset='4'/>
    <emulatorpin cpuset='1-4'/>
  </cputune>
  <numatune>
    <memory mode='strict' nodeset='0-1'/>
    <memnode cellid='0' mode='strict' nodeset='0'/>
    <memnode cellid='1' mode='strict' nodeset='1'/>
  </numatune>
  <os>
    <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
    <boot dev='hd'/>
    <boot dev='network'/>
    <bootmenu enable='yes' timeout='1000'/>
    <bios useserial='yes' rebootTimeout='0'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu>
    <numa>
      <cell id='0' cpus='0-1' memory='6291456' unit='KiB'/>
      <cell id='1' cpus='2-3' memory='6291456' unit='KiB'/>
    </numa>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='threads'/>
      <source file='/var/lib/libvirt/images/05-s00c06h0_1.img'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='virtio-serial' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </controller>
    <interface type='hostdev' managed='yes'>
      <mac address='b2:59:73:15:00:00'/>
      <source>
        <address type='pci' domain='0x0000' bus='0x04' slot='0x10' function='0x0'/>
      </source>
      <rom bar='on' file='/opt/vcp/share/ipxe/808610ed.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </interface>
    <interface type='hostdev' managed='yes'>
      <mac address='b2:59:73:15:00:01'/>
      <source>
        <address type='pci' domain='0x0000' bus='0x04' slot='0x10' function='0x1'/>
      </source>
      <rom bar='on' file='/opt/vcp/share/ipxe/808610ed.rom'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <channel type='pipe'>
      <source path='/var/lib/libvirt/qemu/channels/FROM-05-s00c06h0'/>
      <target type='virtio' name='virtio2host'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>
    <channel type='pipe'>
      <source path='/var/lib/libvirt/qemu/channels/HGC-05-s00c06h0'/>
      <target type='virtio' name='virtio_host_guest_check'/>
      <address type='virtio-serial' controller='0' bus='0' port='2'/>
    </channel>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'>
      <listen type='address'/>
    </graphics>
    <video>
      <model type='cirrus' vram='16384' heads='1' primary='yes'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <watchdog model='i6300esb' action='reset'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </watchdog>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Examples

>>> xml_numa.file_name == 'vm.xml'
True
>>> xml_numa.vm_name == '05-s00c06h0'
True
>>> memnode = xml_numa.get_elements('./numatune/memnode', None)
>>> len(memnode[0].items()) == 3
True
>>> len(memnode[1].items()) == 3
True
>>> memnode[0].get('cellid') == '0'
True
>>> memnode[1].get('mode') == 'strict'
True
class insights.parsers.qemu_xml.VarQemuXML(context)[source]

Bases: BaseQemuXML

This class parses xml files under /var/run/libvirt/qemu/ using BaseQemuXML base parser.

Sample file:

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit test-idm-client-ccveu-net
or other application using the libvirt API.
-->

<domstatus state='running' reason='unpaused' pid='17150'>
  <monitor path='/var/lib/libvirt/qemu/domain-59-test-idm-client-ccve/monitor.sock' json='1' type='unix'/>
  <vcpus>
    <vcpu id='0' pid='17156'/>
  </vcpus>
  <qemuCaps>
    <flag name='kvm'/>
    <flag name='mem-path'/>
  </qemuCaps>
  <devices>
    <device alias='balloon0'/>
  </devices>
  <libDir path='/var/lib/libvirt/qemu/domain-59-test-idm-client-ccve'/>
  <domain type='kvm' id='59'>
    <name>test-idm-client-ccveu-net</name>
    <uuid>78177d07-ac0e-4057-b1de-9ccd66cbc3d7</uuid>
    <metadata xmlns:ovirt="http://ovirt.org/vm/tune/1.0">
      <ovirt:qos/>
    </metadata>
    <maxMemory slots='16' unit='KiB'>4294967296</maxMemory>
    <memory unit='KiB'>2097152</memory>
    <os>
      <type arch='x86_64' machine='pc-i440fx-rhel7.2.0'>hvm</type>
      <bootmenu enable='yes' timeout='10000'/>
      <smbios mode='sysinfo'/>
    </os>
    <devices>
      <emulator>/usr/libexec/qemu-kvm</emulator>
      <disk type='file' device='cdrom'>
        <driver name='qemu' type='raw'/>
        <source startupPolicy='optional'/>
      </disk>
    </devices>
  </domain>
</domstatus>