Commit f9408b11 authored by Anael Beutot's avatar Anael Beutot
Browse files

Redefined API for VM handlers.

parent 77d17785
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -7,3 +7,7 @@ class CCNodeError(Exception):

class PluginError(CCNodeError):
    pass


class UndefinedDomain(CCNodeError):
    pass
+62 −26
Original line number Diff line number Diff line
@@ -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__)
@@ -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)
@@ -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')
@@ -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):