Commit c83b7578 authored by Thibault VINCENT's avatar Thibault VINCENT
Browse files

added vm define/undefine/export handlers

parent 7741feb5
Loading
Loading
Loading
Loading
+45 −0
Original line number Diff line number Diff line
@@ -526,6 +526,51 @@ class NodeHandler(RpcHandler):
            raise NotImplementedError('host handler has no method `%s`' %method)
    
    @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):
        '''
        '''
+23 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ class LibvirtHypervisor(Hypervisor):
    def __init__(self, hv_type):
        '''
        '''
        super(LibvirtHypervisor, self).__init__()
        try:
            if hv_type == 'kvm':
                warning("LibvirtHypervisor: initialized as KVM")
@@ -127,6 +128,16 @@ class LibvirtHypervisor(Hypervisor):
        '''
        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):
        '''
        '''
@@ -445,6 +456,13 @@ class LibvirtVm(VM):
        '''
        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):
        '''
        '''
@@ -505,6 +523,11 @@ class LibvirtVm(VM):
            pass
        return paused
    
    def get_config(self):
        '''
        '''
        return self._domain.XMLDesc(0)
    
    def get_uuid(self):
        '''
        '''