Commit 23faa7f8 authored by Thibault VINCENT's avatar Thibault VINCENT
Browse files

simple implementation of register/unregister server feature

every second, check that libvirt VM list is coherent with the list of host registered with the server
parent b8d055a1
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -46,3 +46,9 @@ class CCNode(object):
                return False
            else:
                return True

    def get_manager(self):
        return self.manager
    
    def get_server(self):
        return self.server
 No newline at end of file
+38 −0
Original line number Diff line number Diff line
@@ -7,6 +7,8 @@ from logging import debug, info
from fnmatch import fnmatchcase
from exceptions import FeatureNotImplemented
from common import LocalHost
from threading import Timer
from sjrpc.core import RpcError

_MOD_KVM = True
try:
@@ -116,6 +118,10 @@ class NodeHandler(RpcHandler):
            'disk*'     : self._tag_map_helper(self._helper_vm_disk),
        }
        
        # populate the server with running VMs
        self._register_vm = []
        self._register_timer = Timer(5.0, self._register)
    
    def __getitem__(self, name):
        '''
        '''
@@ -213,6 +219,38 @@ class NodeHandler(RpcHandler):
            result = None
        return result
    
    def _register(self):
        try:
            vm_current = self._host_handle.vm_list()
            
            for vm in vm_current:
                if vm not in self._register_vm:
                    try:
                        self._connection.get_server().call('register', vm, 'vm')
                    except RpcError as e:
                        if e.exception == '#FIXME':
                            self._register_vm.append(vm)
                        else:
                            raise e
                    else:
                        self._register_vm.append(vm)
            
            for vm in self._register_vm:
                if vm not in vm_current:
                    try:
                        self._connection.get_server().call('unregister', vm)
                    except RpcError as e:
                        if e.exception == '#FIXME':
                            vm_current.pop(vm)
                        else:
                            raise e
                    else:
                        vm_current.pop(vm)
        except Exception as e:
            raise e
        finally:
            self._register_timer = Timer(1.0, self._register)
    
    @pure
    def node_tags(self, tags=None):
        '''