Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
No related merge requests found
...@@ -46,3 +46,9 @@ class CCNode(object): ...@@ -46,3 +46,9 @@ class CCNode(object):
return False return False
else: else:
return True return True
def get_manager(self):
return self.manager
def get_server(self):
return self.server
\ No newline at end of file
...@@ -7,6 +7,8 @@ from logging import debug, info ...@@ -7,6 +7,8 @@ from logging import debug, info
from fnmatch import fnmatchcase from fnmatch import fnmatchcase
from exceptions import FeatureNotImplemented from exceptions import FeatureNotImplemented
from common import LocalHost from common import LocalHost
from threading import Timer
from sjrpc.core import RpcError
_MOD_KVM = True _MOD_KVM = True
try: try:
...@@ -115,6 +117,10 @@ class NodeHandler(RpcHandler): ...@@ -115,6 +117,10 @@ class NodeHandler(RpcHandler):
self.VM_TAG_GLOB = { self.VM_TAG_GLOB = {
'disk*' : self._tag_map_helper(self._helper_vm_disk), '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): def __getitem__(self, name):
''' '''
...@@ -213,6 +219,38 @@ class NodeHandler(RpcHandler): ...@@ -213,6 +219,38 @@ class NodeHandler(RpcHandler):
result = None result = None
return result 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 @pure
def node_tags(self, tags=None): def node_tags(self, tags=None):
''' '''
......
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