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

Redefined API for VM handlers.

parent 77d17785
No related branches found
No related tags found
No related merge requests found
......@@ -7,3 +7,7 @@ class CCNodeError(Exception):
class PluginError(CCNodeError):
pass
class UndefinedDomain(CCNodeError):
pass
......@@ -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):
try:
if force:
vm.destroy()
else:
vm.stop()
except libvirt.libvirtError:
# should we return errors ?
pass
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_suspend(self, vm_names=None):
logger.debug('VM suspend %s', vm_names)
for vm in self.iter_vms(vm_names):
vm.suspend()
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_stop(self, name):
logger.debug('VM stop %s', name)
try:
self.hypervisor.domains[name].stop()
except libvirt.libvirtError:
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_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_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_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):
......
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