Last active
April 24, 2017 23:43
-
-
Save atodorov-storpool/8530af655ba1d7a4ac9d6999de555a8b to your computer and use it in GitHub Desktop.
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
#!/usr/bin/env python | |
# | |
# Anton Todorov (a.todorov@storpool.com) | |
# | |
# add/change <blockio /> element to the VM XML | |
# | |
# vmTweakDiskBlockioBlockSize.py <XMLfile> | |
from sys import argv | |
import syslog | |
dbg = 1 | |
if dbg: | |
syslog.openlog('vmTweakDiskBlockioBlockSize.py', syslog.LOG_PID) | |
try: | |
import lxml.etree as ET | |
except ImportError: | |
raise RuntimeError("lxml Python module not found! Install from distribution package or pip install lxml") | |
xmlFile = argv[1] | |
et = ET.parse(xmlFile, ET.XMLParser(strip_cdata=False,remove_blank_text=True)) | |
# ugly but working | |
domain = et.getroot()[0].getparent() | |
vm_name = et.find(".//name").text | |
for disk in et.findall(".//disk"): | |
if disk.get('device') == 'disk': | |
if disk.get('type') == 'file': | |
#<disk><target/> | |
target_dev = '' | |
for e in disk.findall(".//target"): | |
target_dev = e.get('dev') | |
if target_dev[0:2] == 'vd': | |
#<target dev="vda" bus="virtio"/> | |
e.set("bus","virtio") | |
if target_dev[0:2] != 'vd': | |
if dbg: | |
syslog.syslog(syslog.LOG_INFO, "VM {0} not virtio-blk {1}".format(vm_name,target_dev)) | |
continue | |
#<disk><driver/> | |
for e in disk.findall(".//driver"): | |
if e.get('type') == 'qcow2' and e.get("name") == 'qemu': | |
if dbg: | |
syslog.syslog(syslog.LOG_INFO, "VM {0} Setting blockio *_block_size on {1}".format(vm_name,target_dev)) | |
blockio = None | |
for blockio in disk.findall(".//blockio"): | |
if dbg: | |
syslog.syslog(syslog.LOG_INFO, "VM {0} ${1} already have blockio".format(vm_name,target_dev)) | |
if blockio == None: | |
blockio = ET.Element("blockio") | |
blockio.set("logical_block_size", str(4096)) | |
blockio.set("physical_block_size", str(4096)) | |
disk.append(blockio) | |
et.write(xmlFile,pretty_print=True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment