Newer
Older
Thibault VINCENT
committed
from threading import Timer, Lock, Event
from sjrpc.client import SimpleRpcClient
from sjrpc.utils import ConnectionProxy
from sjrpc.core import RpcError
import handlers
Handle node initialization, connection to server, and authentication
def __init__(self, server, port, hypervisor, exec_cmd, force_xen=False,
cert=None):
Thibault VINCENT
committed
self._scheduler_stopped = Event()
self._is_hv = hypervisor # hugly
self._is_xen = force_xen # hugly
self._exec_cmd = exec_cmd # hugly
self._handler = None
self._manager = SimpleRpcClient.from_addr(server, port, enable_ssl=True,
default_handler=self._handler)
self._server = ConnectionProxy(self._manager)
Thibault VINCENT
committed
try:
self._manager.run()
except:
raise
Thibault VINCENT
committed
finally:
self._scheduler_stopped.set()
logging.debug('Authenticating user `%s` on connection `%i`' % (login,
id(self._server)))
if err.exception == 'AuthenticationError':
logging.warning('Authentication error')
else:
logging.warning('Unknown error while authenticating: %s' % err)
return False
except Exception as err:
logging.debug('Unhandled exception: `%s`' % err)
if role == 'hv':
self._handler = handlers.NodeHandler(self,
self._is_hv,
self._exec_cmd,
self._is_xen)
elif role == 'host':
self._handler = handlers.NodeHandler(self,
False,
self._exec_cmd,
self._is_xen)
else:
logging.warning('Bad role affected by server: %s' % role)
self._manager.all_connections().pop().set_handler(self._handler)
self._scheduler_rearm()
return True
self._scheduler_timer = Timer(5, self._scheduler_run)
def _scheduler_run(self):
'''
'''
with self._scheduler_mutex:
Thibault VINCENT
committed
if not self._scheduler_stopped.is_set():
self._handler.scheduler_run()
sleep(0.1)
self._scheduler_rearm()
def get_server(self):
'''
'''
return self._server
def get_manager(self):
def get_handler(self):
'''
'''
return self._handler