Loading ccnode/exc.py +4 −0 Original line number Diff line number Diff line Loading @@ -7,3 +7,7 @@ class CCNodeError(Exception): class PluginError(CCNodeError): pass class UndefinedDomain(CCNodeError): pass ccnode/hypervisor/__init__.py +62 −26 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ from ccnode.hypervisor.lib import ( EventLoop as VirEventLoop, ) from ccnode.hypervisor.domains import VirtualMachine from ccnode.exc import UndefinedDomain logger = logging.getLogger(__name__) Loading Loading @@ -100,6 +101,7 @@ class Handler(HostHandler): self.main.reset_handler('vm_undefine', self.vm_undefine) self.main.reset_handler('vm_export', self.vm_export) self.main.reset_handler('vm_stop', self.vm_stop) self.main.reset_handler('vm_destroy', self.vm_destroy) self.main.reset_handler('vm_start', self.vm_start) self.main.reset_handler('vm_suspend', self.vm_suspend) self.main.reset_handler('vm_resume', self.vm_resume) Loading Loading @@ -140,6 +142,7 @@ class Handler(HostHandler): self.main.remove_handler('vm_undefine') self.main.remove_handler('vm_export') self.main.remove_handler('vm_stop') self.main.remove_handler('vm_destroy') self.main.remove_handler('vm_start') self.main.remove_handler('vm_suspend') self.main.remove_handler('vm_resume') Loading Loading @@ -181,32 +184,65 @@ class Handler(HostHandler): return vm.lv_dom.XMLDesc(0) def vm_stop(self, vm_names=None, force=False): logger.debug('VM stop %s', vm_names) for vm in self.iter_vms(vm_names): def vm_stop(self, name): logger.debug('VM stop %s', name) try: if force: vm.destroy() else: vm.stop() self.hypervisor.domains[name].stop() except libvirt.libvirtError: # should we return errors ? pass logger.exception('Error while stopping VM %s', name) raise except KeyError: msg = 'Cannot stop VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_start(self, vm_names=None): logger.debug('VM start %s', vm_names) for vm in self.iter_vms(vm_names): vm.start() def vm_destroy(self, name): logger.debug('VM destroy %s', name) try: self.hypervisor.domains[name].destroy() except libvirt.libvirtError: logger.exception('Error while destroying VM %s', name) raise except KeyError: msg = 'Cannot destroy VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_suspend(self, vm_names=None): logger.debug('VM suspend %s', vm_names) for vm in self.iter_vms(vm_names): vm.suspend() def vm_start(self, name): logger.debug('VM start %s', name) try: self.hypervisor.domains[name].start() except libvirt.libvirtError: logger.exception('Error while starting VM %s', name) raise except KeyError: msg = 'Cannot start VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_resume(self, vm_names=None): logger.debug('VM resume %s', vm_names) for vm in self.iter_vms(vm_names): vm.resume() def vm_suspend(self, name): logger.debug('VM suspend %s', name) try: self.hypervisor.domains[name].suspend() except libvirt.libvirtError: logger.exception('Error while suspending VM %s', name) raise except KeyError: msg = 'Cannot suspend VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_resume(self, name): logger.debug('VM resume %s', name) try: self.hypervisor.domains[name].resume() except libvirt.libvirtError: logger.exception('Error while resuming VM %s', name) raise except KeyError: msg = 'Cannot resume VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) class Hypervisor(object): Loading Loading
ccnode/exc.py +4 −0 Original line number Diff line number Diff line Loading @@ -7,3 +7,7 @@ class CCNodeError(Exception): class PluginError(CCNodeError): pass class UndefinedDomain(CCNodeError): pass
ccnode/hypervisor/__init__.py +62 −26 Original line number Diff line number Diff line Loading @@ -12,6 +12,7 @@ from ccnode.hypervisor.lib import ( EventLoop as VirEventLoop, ) from ccnode.hypervisor.domains import VirtualMachine from ccnode.exc import UndefinedDomain logger = logging.getLogger(__name__) Loading Loading @@ -100,6 +101,7 @@ class Handler(HostHandler): self.main.reset_handler('vm_undefine', self.vm_undefine) self.main.reset_handler('vm_export', self.vm_export) self.main.reset_handler('vm_stop', self.vm_stop) self.main.reset_handler('vm_destroy', self.vm_destroy) self.main.reset_handler('vm_start', self.vm_start) self.main.reset_handler('vm_suspend', self.vm_suspend) self.main.reset_handler('vm_resume', self.vm_resume) Loading Loading @@ -140,6 +142,7 @@ class Handler(HostHandler): self.main.remove_handler('vm_undefine') self.main.remove_handler('vm_export') self.main.remove_handler('vm_stop') self.main.remove_handler('vm_destroy') self.main.remove_handler('vm_start') self.main.remove_handler('vm_suspend') self.main.remove_handler('vm_resume') Loading Loading @@ -181,32 +184,65 @@ class Handler(HostHandler): return vm.lv_dom.XMLDesc(0) def vm_stop(self, vm_names=None, force=False): logger.debug('VM stop %s', vm_names) for vm in self.iter_vms(vm_names): def vm_stop(self, name): logger.debug('VM stop %s', name) try: if force: vm.destroy() else: vm.stop() self.hypervisor.domains[name].stop() except libvirt.libvirtError: # should we return errors ? pass logger.exception('Error while stopping VM %s', name) raise except KeyError: msg = 'Cannot stop VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_start(self, vm_names=None): logger.debug('VM start %s', vm_names) for vm in self.iter_vms(vm_names): vm.start() def vm_destroy(self, name): logger.debug('VM destroy %s', name) try: self.hypervisor.domains[name].destroy() except libvirt.libvirtError: logger.exception('Error while destroying VM %s', name) raise except KeyError: msg = 'Cannot destroy VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_suspend(self, vm_names=None): logger.debug('VM suspend %s', vm_names) for vm in self.iter_vms(vm_names): vm.suspend() def vm_start(self, name): logger.debug('VM start %s', name) try: self.hypervisor.domains[name].start() except libvirt.libvirtError: logger.exception('Error while starting VM %s', name) raise except KeyError: msg = 'Cannot start VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_resume(self, vm_names=None): logger.debug('VM resume %s', vm_names) for vm in self.iter_vms(vm_names): vm.resume() def vm_suspend(self, name): logger.debug('VM suspend %s', name) try: self.hypervisor.domains[name].suspend() except libvirt.libvirtError: logger.exception('Error while suspending VM %s', name) raise except KeyError: msg = 'Cannot suspend VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) def vm_resume(self, name): logger.debug('VM resume %s', name) try: self.hypervisor.domains[name].resume() except libvirt.libvirtError: logger.exception('Error while resuming VM %s', name) raise except KeyError: msg = 'Cannot resume VM %s because it is not defined' % name logger.error(msg) raise UndefinedDomain(msg) class Hypervisor(object): Loading