Loading cloudcontrol/node/hypervisor/__init__.py +41 −0 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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() Loading Loading @@ -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: Loading Loading
cloudcontrol/node/hypervisor/__init__.py +41 −0 Original line number Diff line number Diff line Loading @@ -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() Loading Loading @@ -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() Loading Loading @@ -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: Loading