Commit 2543f1aa by Guba Sándor

wrapping libvirt errors

parent 37627d70
...@@ -46,7 +46,18 @@ def req_connection(original_function, *args, **kw): ...@@ -46,7 +46,18 @@ def req_connection(original_function, *args, **kw):
return return_value return return_value
@decorator
def wrap_libvirtError(original_function, *args, **kw):
try:
original_function(*args, **kw)
except libvirt.libvirtError as e:
new_e = Exception(e.get_error_message())
new_e.libvirtError = True
raise new_e
@celery.task @celery.task
@wrap_libvirtError
def connect(connection_string='qemu:///system'): def connect(connection_string='qemu:///system'):
'''Connect to the libvirt daemon specified in the '''Connect to the libvirt daemon specified in the
connection_string or the local root. connection_string or the local root.
...@@ -64,6 +75,7 @@ def connect(connection_string='qemu:///system'): ...@@ -64,6 +75,7 @@ def connect(connection_string='qemu:///system'):
@celery.task @celery.task
@wrap_libvirtError
def disconnect(): def disconnect():
'''Disconnect from the active libvirt daemon connection. '''Disconnect from the active libvirt daemon connection.
''' '''
...@@ -81,6 +93,7 @@ def disconnect(): ...@@ -81,6 +93,7 @@ def disconnect():
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def define(vm): def define(vm):
'''Define permanent virtual machine from xml '''Define permanent virtual machine from xml
''' '''
...@@ -90,6 +103,7 @@ def define(vm): ...@@ -90,6 +103,7 @@ def define(vm):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def create(vm_desc): def create(vm_desc):
'''Create and start non-permanent virtual machine from xml '''Create and start non-permanent virtual machine from xml
flags can be: flags can be:
...@@ -108,15 +122,16 @@ def create(vm_desc): ...@@ -108,15 +122,16 @@ def create(vm_desc):
vm.dump_xml(), libvirt.VIR_DOMAIN_NONE) vm.dump_xml(), libvirt.VIR_DOMAIN_NONE)
domain = connection.lookupByName(vm.name) domain = connection.lookupByName(vm.name)
domain.suspend() domain.suspend()
# Real driver create
else: else:
connection.createXML(vm.dump_xml(), libvirt.VIR_DOMAIN_START_PAUSED) connection.createXML(
vm.dump_xml(), libvirt.VIR_DOMAIN_START_PAUSED)
logging.info("Virtual machine %s is created from xml", vm.name) logging.info("Virtual machine %s is created from xml", vm.name)
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def shutdown(name): def shutdown(name):
'''Shutdown virtual machine (need ACPI support). '''Shutdown virtual machine (need ACPI support).
''' '''
...@@ -126,6 +141,7 @@ def shutdown(name): ...@@ -126,6 +141,7 @@ def shutdown(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def delete(name): def delete(name):
'''Destroy the running called 'name' virtual machine. '''Destroy the running called 'name' virtual machine.
''' '''
...@@ -135,6 +151,7 @@ def delete(name): ...@@ -135,6 +151,7 @@ def delete(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def list_domains(): def list_domains():
''' '''
:return list: List of domains name in host :return list: List of domains name in host
...@@ -148,6 +165,7 @@ def list_domains(): ...@@ -148,6 +165,7 @@ def list_domains():
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def lookupByName(name): def lookupByName(name):
'''Return with the requested Domain '''Return with the requested Domain
''' '''
...@@ -159,6 +177,7 @@ def lookupByName(name): ...@@ -159,6 +177,7 @@ def lookupByName(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def undefine(name): def undefine(name):
'''Undefine an already defined virtual machine. '''Undefine an already defined virtual machine.
If it's running it becomes transient (lsot on reboot) If it's running it becomes transient (lsot on reboot)
...@@ -169,6 +188,7 @@ def undefine(name): ...@@ -169,6 +188,7 @@ def undefine(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def start(name): def start(name):
'''Start an already defined virtual machine. '''Start an already defined virtual machine.
''' '''
...@@ -178,6 +198,7 @@ def start(name): ...@@ -178,6 +198,7 @@ def start(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def suspend(name): def suspend(name):
'''Stop virtual machine and save its memory to path. '''Stop virtual machine and save its memory to path.
''' '''
...@@ -187,6 +208,7 @@ def suspend(name): ...@@ -187,6 +208,7 @@ def suspend(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def save(name, path): def save(name, path):
'''Stop virtual machine and save its memory to path. '''Stop virtual machine and save its memory to path.
''' '''
...@@ -196,6 +218,7 @@ def save(name, path): ...@@ -196,6 +218,7 @@ def save(name, path):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def restore(path): def restore(path):
'''Restore a saved virtual machine '''Restore a saved virtual machine
from the memory image stored at path.''' from the memory image stored at path.'''
...@@ -204,6 +227,7 @@ def restore(path): ...@@ -204,6 +227,7 @@ def restore(path):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def resume(name): def resume(name):
'''Resume stopped virtual machines. '''Resume stopped virtual machines.
''' '''
...@@ -213,6 +237,7 @@ def resume(name): ...@@ -213,6 +237,7 @@ def resume(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def reset(name): def reset(name):
'''Reset (power reset) virtual machine. '''Reset (power reset) virtual machine.
''' '''
...@@ -222,6 +247,7 @@ def reset(name): ...@@ -222,6 +247,7 @@ def reset(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def reboot(name): def reboot(name):
'''Reboot (with guest acpi support) virtual machine. '''Reboot (with guest acpi support) virtual machine.
''' '''
...@@ -231,6 +257,7 @@ def reboot(name): ...@@ -231,6 +257,7 @@ def reboot(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def node_info(): def node_info():
''' Get info from Host as dict: ''' Get info from Host as dict:
model string indicating the CPU model model string indicating the CPU model
...@@ -254,6 +281,7 @@ def node_info(): ...@@ -254,6 +281,7 @@ def node_info():
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def domain_info(name): def domain_info(name):
''' '''
state the running state, one of virDomainState state the running state, one of virDomainState
...@@ -273,6 +301,7 @@ def domain_info(name): ...@@ -273,6 +301,7 @@ def domain_info(name):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def network_info(name, network): def network_info(name, network):
''' '''
rx_bytes rx_bytes
...@@ -294,6 +323,7 @@ def network_info(name, network): ...@@ -294,6 +323,7 @@ def network_info(name, network):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def send_key(name, key_code): def send_key(name, key_code):
''' Sending linux key_code to the name vm ''' Sending linux key_code to the name vm
key_code can be optained from linux_keys.py key_code can be optained from linux_keys.py
...@@ -310,6 +340,7 @@ def _stream_handler(stream, buf, opaque): ...@@ -310,6 +340,7 @@ def _stream_handler(stream, buf, opaque):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def screenshot(name, path): def screenshot(name, path):
"""Save screenshot of virtual machine """Save screenshot of virtual machine
to the path as name-screenshot.ppm to the path as name-screenshot.ppm
...@@ -339,6 +370,7 @@ def screenshot(name, path): ...@@ -339,6 +370,7 @@ def screenshot(name, path):
@celery.task @celery.task
@req_connection @req_connection
@wrap_libvirtError
def migrate(name, host, live=False): def migrate(name, host, live=False):
'''Migrate domain to host''' '''Migrate domain to host'''
flags = libvirt.VIR_MIGRATE_PEER2PEER flags = libvirt.VIR_MIGRATE_PEER2PEER
...@@ -350,4 +382,3 @@ def migrate(name, host, live=False): ...@@ -350,4 +382,3 @@ def migrate(name, host, live=False):
flags=flags, flags=flags,
dname=name, dname=name,
bandwidth=0) bandwidth=0)
# virDomainResume
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment