Last active
August 29, 2015 14:09
-
-
Save DazWorrall/790bb41dbbbee2c24eef to your computer and use it in GitHub Desktop.
get_instance_disk_info behaviour changes breaks live migration
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from lxml import etree | |
import logging | |
LOG = logging.getLogger(__name__) | |
LOG.setLevel(logging.DEBUG) | |
LOG.addHandler(logging.StreamHandler()) | |
_ = lambda x: x | |
def juno(xml): | |
instance_name = 'instance-00000001' | |
volume_devices = [] | |
disk_info = [] | |
doc = etree.fromstring(xml) | |
disk_nodes = doc.findall('.//devices/disk') | |
path_nodes = doc.findall('.//devices/disk/source') | |
driver_nodes = doc.findall('.//devices/disk/driver') | |
target_nodes = doc.findall('.//devices/disk/target') | |
for cnt, path_node in enumerate(path_nodes): | |
disk_type = disk_nodes[cnt].get('type') | |
path = path_node.get('file') or path_node.get('dev') | |
target = target_nodes[cnt].attrib['dev'] | |
if not path: | |
LOG.debug('skipping disk for %s as it does not have a path', | |
instance_name) | |
continue | |
if disk_type not in ['file', 'block']: | |
LOG.debug('skipping disk because it looks like a volume', path) | |
continue | |
if target in volume_devices: | |
LOG.debug('skipping disk %(path)s (%(target)s) as it is a ' | |
'volume', {'path': path, 'target': target}) | |
continue | |
# get the real disk size or | |
# raise a localized error if image is unavailable | |
if disk_type == 'file': | |
dk_size = int(os.path.getsize(path)) | |
elif disk_type == 'block': | |
dk_size = 1234 #lvm.get_volume_size(path) | |
disk_type = driver_nodes[cnt].get('type') | |
if disk_type == "qcow2": | |
backing_file = libvirt_utils.get_disk_backing_file(path) | |
virt_size = disk.get_disk_size(path) | |
over_commit_size = int(virt_size) - dk_size | |
else: | |
backing_file = "" | |
virt_size = dk_size | |
over_commit_size = 0 | |
disk_info.append({'type': disk_type, | |
'path': path, | |
'virt_disk_size': virt_size, | |
'backing_file': backing_file, | |
'disk_size': dk_size, | |
'over_committed_disk_size': over_commit_size}) | |
return disk_info | |
def icehouse(xml): | |
instance_name = 'instance-00000001' | |
volume_devices = [] | |
disk_info = [] | |
doc = etree.fromstring(xml) | |
disk_nodes = doc.findall('.//devices/disk') | |
path_nodes = doc.findall('.//devices/disk/source') | |
driver_nodes = doc.findall('.//devices/disk/driver') | |
target_nodes = doc.findall('.//devices/disk/target') | |
for cnt, path_node in enumerate(path_nodes): | |
disk_type = disk_nodes[cnt].get('type') | |
path = path_node.get('file') | |
target = target_nodes[cnt].attrib['dev'] | |
if not path: | |
LOG.debug(_('skipping disk for %s as it does not have a path'), | |
instance_name) | |
continue | |
if disk_type != 'file': | |
LOG.debug(_('skipping %s since it looks like volume'), path) | |
continue | |
if target in volume_devices: | |
LOG.debug(_('skipping disk %(path)s (%(target)s) as it is a ' | |
'volume'), {'path': path, 'target': target}) | |
continue | |
# get the real disk size or | |
# raise a localized error if image is unavailable | |
dk_size = int(os.path.getsize(path)) | |
disk_type = driver_nodes[cnt].get('type') | |
if disk_type == "qcow2": | |
backing_file = libvirt_utils.get_disk_backing_file(path) | |
virt_size = disk.get_disk_size(path) | |
over_commit_size = int(virt_size) - dk_size | |
else: | |
backing_file = "" | |
virt_size = dk_size | |
over_commit_size = 0 | |
disk_info.append({'type': disk_type, | |
'path': path, | |
'virt_disk_size': virt_size, | |
'backing_file': backing_file, | |
'disk_size': dk_size, | |
'over_committed_disk_size': over_commit_size}) | |
xml = open('xml').read() | |
print icehouse(xml) | |
print juno(xml) | |
# daz$ python run.py | |
# skipping disk for instance-00000001 as it does not have a path | |
# None | |
# [{'disk_size': 1234, 'backing_file': '', 'virt_disk_size': 1234, 'path': '/dev/disk/by-path/ip-10.0.0.1:3260-iscsi-iqn.2010-10.org.openstack:volume-73e70dc4-8c0e-4392-9aae-c348d8b02e02-lun-1', 'type': 'raw', 'over_committed_disk_size': 0}] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<domain type='kvm' id='8'> | |
<name>instance-00000001</name> | |
<uuid>e04b2617-fea4-470f-9dce-340a13a479ac</uuid> | |
<memory unit='KiB'>524288</memory> | |
<currentMemory unit='KiB'>524288</currentMemory> | |
<vcpu placement='static'>1</vcpu> | |
<resource> | |
<partition>/machine</partition> | |
</resource> | |
<sysinfo type='smbios'> | |
<system> | |
<entry name='manufacturer'>OpenStack Foundation</entry> | |
<entry name='product'>OpenStack Nova</entry> | |
<entry name='version'>2014.1.4</entry> | |
<entry name='serial'>44454c4c-3200-1053-8053-b9c04f39354a</entry> | |
<entry name='uuid'>e04b2617-fea4-470f-9dce-340a13a479ac</entry> | |
</system> | |
</sysinfo> | |
<os> | |
<type arch='x86_64' machine='pc-i440fx-trusty'>hvm</type> | |
<boot dev='hd'/> | |
<smbios mode='sysinfo'/> | |
</os> | |
<features> | |
<acpi/> | |
<apic/> | |
</features> | |
<cpu mode='host-model'> | |
<model fallback='allow'/> | |
<feature policy='require' name='rdtscp'/> | |
<feature policy='require' name='pdpe1gb'/> | |
<feature policy='require' name='dca'/> | |
<feature policy='require' name='pcid'/> | |
<feature policy='require' name='pdcm'/> | |
<feature policy='require' name='xtpr'/> | |
<feature policy='require' name='tm2'/> | |
<feature policy='require' name='est'/> | |
<feature policy='require' name='smx'/> | |
<feature policy='require' name='vmx'/> | |
<feature policy='require' name='ds_cpl'/> | |
<feature policy='require' name='monitor'/> | |
<feature policy='require' name='dtes64'/> | |
<feature policy='require' name='pclmuldq'/> | |
<feature policy='require' name='pbe'/> | |
<feature policy='require' name='tm'/> | |
<feature policy='require' name='ht'/> | |
<feature policy='require' name='ss'/> | |
<feature policy='require' name='acpi'/> | |
<feature policy='require' name='ds'/> | |
<feature policy='require' name='vme'/> | |
</cpu> | |
<clock offset='utc'> | |
<timer name='pit' tickpolicy='delay'/> | |
<timer name='rtc' tickpolicy='catchup'/> | |
<timer name='hpet' present='no'/> | |
</clock> | |
<on_poweroff>destroy</on_poweroff> | |
<on_reboot>restart</on_reboot> | |
<on_crash>destroy</on_crash> | |
<devices> | |
<emulator>/usr/bin/kvm-spice</emulator> | |
<disk type='block' device='disk'> | |
<driver name='qemu' type='raw' cache='none'/> | |
<source dev='/dev/disk/by-path/ip-10.0.0.1:3260-iscsi-iqn.2010-10.org.openstack:volume-73e70dc4-8c0e-4392-9aae-c348d8b02e02-lun-1'/> | |
<target dev='vda' bus='virtio'/> | |
<serial>73e70dc4-8c0e-4392-9aae-c348d8b02e02</serial> | |
<alias name='virtio-disk0'/> | |
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> | |
</disk> | |
<controller type='usb' index='0'> | |
<alias name='usb0'/> | |
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> | |
</controller> | |
<controller type='pci' index='0' model='pci-root'> | |
<alias name='pci.0'/> | |
</controller> | |
<interface type='bridge'> | |
<mac address='fa:16:3e:b3:49:4d'/> | |
<source bridge='qbra9105cca-88'/> | |
<target dev='tapa9105cca-88'/> | |
<model type='virtio'/> | |
<alias name='net0'/> | |
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> | |
</interface> | |
<serial type='file'> | |
<source path='/var/lib/nova/instances/e04b2617-fea4-470f-9dce-340a13a479ac/console.log'/> | |
<target port='0'/> | |
<alias name='serial0'/> | |
</serial> | |
<serial type='pty'> | |
<source path='/dev/pts/3'/> | |
<target port='1'/> | |
<alias name='serial1'/> | |
</serial> | |
<console type='file'> | |
<source path='/var/lib/nova/instances/e04b2617-fea4-470f-9dce-340a13a479ac/console.log'/> | |
<target type='serial' port='0'/> | |
<alias name='serial0'/> | |
</console> | |
<input type='tablet' bus='usb'> | |
<alias name='input0'/> | |
</input> | |
<input type='mouse' bus='ps2'/> | |
<input type='keyboard' bus='ps2'/> | |
<graphics type='vnc' port='5900' autoport='yes' listen='0.0.0.0' keymap='en-us'> | |
<listen type='address' address='0.0.0.0'/> | |
</graphics> | |
<video> | |
<model type='cirrus' vram='9216' heads='1'/> | |
<alias name='video0'/> | |
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> | |
</video> | |
<memballoon model='virtio'> | |
<alias name='balloon0'/> | |
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> | |
</memballoon> | |
</devices> | |
<seclabel type='dynamic' model='apparmor' relabel='yes'> | |
<label>libvirt-e04b2617-fea4-470f-9dce-340a13a479ac</label> | |
<imagelabel>libvirt-e04b2617-fea4-470f-9dce-340a13a479ac</imagelabel> | |
</seclabel> | |
</domain> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment