Skip to content
Snippets Groups Projects
Commit c83b7578 authored by Thibault VINCENT's avatar Thibault VINCENT
Browse files

added vm define/undefine/export handlers

parent 7741feb5
No related branches found
No related tags found
No related merge requests found
...@@ -526,6 +526,51 @@ class NodeHandler(RpcHandler): ...@@ -526,6 +526,51 @@ class NodeHandler(RpcHandler):
raise NotImplementedError('host handler has no method `%s`' %method) raise NotImplementedError('host handler has no method `%s`' %method)
@pure @pure
##################################
# VM management
##################################
@pure
def vm_define(self, data, format='xml'):
'''
'''
warning('vm_define: server requested creation of a new VM')
debug('vm_define: with description data `%s`' % data)
if hasattr(self._host_handle, 'vm_define'):
name = self._host_handle.vm_define(data)
debug('vm_define: new VM has name `%s`' % name)
return name
else:
raise NotImplementedError('host do not support VM creation')
@pure
def vm_undefine(self, name):
'''
'''
warning('vm_undefine: server requested deletion of `%s`' % name)
if hasattr(self._host_handle, 'vm_get'):
vm = self._host_handle.vm_get(name)
if hasattr(vm, 'undefine'):
vm.undefine()
else:
raise NotImplementedError('VM object has not method `undefine`')
else:
raise NotImplementedError('host do not support ')
@pure
def vm_export(self, name, format='xml'):
'''
'''
warning('vm_export: server requested configuration of `%s`' % name)
if hasattr(self._host_handle, 'vm_get'):
vm = self._host_handle.vm_get(name)
if hasattr(vm, 'get_config'):
return vm.get_config()
else:
raise NotImplementedError('VM object has not method `get_config`')
else:
raise NotImplementedError('host handler has not method `vm_get`')
def vm_stop(self, vm_names=None, force=False): def vm_stop(self, vm_names=None, force=False):
''' '''
''' '''
......
...@@ -27,6 +27,7 @@ class LibvirtHypervisor(Hypervisor): ...@@ -27,6 +27,7 @@ class LibvirtHypervisor(Hypervisor):
def __init__(self, hv_type): def __init__(self, hv_type):
''' '''
''' '''
super(LibvirtHypervisor, self).__init__()
try: try:
if hv_type == 'kvm': if hv_type == 'kvm':
warning("LibvirtHypervisor: initialized as KVM") warning("LibvirtHypervisor: initialized as KVM")
...@@ -127,6 +128,16 @@ class LibvirtHypervisor(Hypervisor): ...@@ -127,6 +128,16 @@ class LibvirtHypervisor(Hypervisor):
''' '''
return self._sto_handle return self._sto_handle
def vm_define(self, data):
'''
'''
vm = self._lvcon_handle.defineXML(data)
self._cache_vm_rebuild()
if hasattr(vm, 'name'):
return vm.name()
else:
raise HypervisorError('VM not defined properly')
def vm_list(self): def vm_list(self):
''' '''
''' '''
...@@ -445,6 +456,13 @@ class LibvirtVm(VM): ...@@ -445,6 +456,13 @@ class LibvirtVm(VM):
''' '''
return self._hv_handle return self._hv_handle
def undefine(self):
'''
'''
if self._domain.undefine():
raise VMError('deletion of VM `%s` failed' % self.get_name())
self._hv_handle._cache_vm_rebuild()
def power_on(self): def power_on(self):
''' '''
''' '''
...@@ -505,6 +523,11 @@ class LibvirtVm(VM): ...@@ -505,6 +523,11 @@ class LibvirtVm(VM):
pass pass
return paused return paused
def get_config(self):
'''
'''
return self._domain.XMLDesc(0)
def get_uuid(self): def get_uuid(self):
''' '''
''' '''
......
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