Skip to content
Snippets Groups Projects
Commit 9ad928d3 authored by Anael Beutot's avatar Anael Beutot
Browse files

Added handler for setting virtio block cache to none.

parent 166a9e61
No related branches found
No related tags found
No related merge requests found
......@@ -139,6 +139,8 @@ class Handler(HostHandler):
self.main.reset_handler('drbd_sync_status', self.drbd_sync_status)
self.main.reset_handler('drbd_shutdown', self.drbd_shutdown)
self.main.reset_handler('vm_open_console', self.vm_open_console)
self.main.reset_handler('vm_disable_virtio_cache',
self.vm_disable_virtio_cache)
# if everything went fine, unregister the timer
self.timer.stop()
......@@ -202,6 +204,7 @@ class Handler(HostHandler):
self.main.remove_handler('drbd_sync_status')
self.main.remove_handler('drbd_shutdown')
self.main.remove_handler('vm_open_console')
self.main.remove_handler('vm_disable_virtio_cache')
# launch connection timer
self.timer.start()
......@@ -470,6 +473,44 @@ class Handler(HostHandler):
proto = conn.create_tunnel(endpoint=endpoint, on_close=on_close)
return proto.label
def vm_disable_virtio_cache(self, name):
"""Set virtio cache to none on VM disks.
:param name: VM name
"""
vm = self.hypervisor.domains[name]
# get VM XML
try:
xml = vm.lv_dom.XMLDesc(0)
except libvirt.libvirtError:
logger.exception('Error while getting domain XML from libvirt, %s',
vm.name)
raise
xml_tree = et.ElementTree()
xml_tree.parse(StringIO(xml))
for disk in xml_tree.findall('devices/disk'):
# check that disk is virtio
target = disk.find('target')
if target is None or target.get('bus') != 'virtio':
continue
# modify cache attr
driver = disk.find('driver')
assert driver is not None
driver.set('cache', 'none')
logger.debug('Set cache attribute for disk %s of VM %s',
target.get('dev'), name)
# write back the XML tree
out = StringIO()
xml_tree.write(out) # check encoding is fine
try:
self.hypervisor.vir_con.defineXML(out.getvalue())
except libvirt.libvirtError:
logger.exception('Cannot update XML file for domain %s', name)
raise
def vol_create(self, pool, name, size):
logger.debug('Volume create %s, pool %s, size %s', name, pool, size)
try:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment