class ODBManager(object): """ Manages connections to the server's Operational Database. """ def __init__(self, well_known_data=None, odb_data=None, odb_config=None, crypto_manager=None, pool=None, server=None, cluster=None, init=True): self.well_known_data = well_known_data self.odb_data = odb_data self.odb_config = odb_data self.crypto_manager = crypto_manager self.pool = pool self.server = server self.cluster = cluster def session(self): return self._Session() def close(self): self._session.close() def fetch_server(self): """ Fetches the server from the ODB. Also sets the 'cluster' attribute to the value pointed to by the server's .cluster attribute. """ if not self.pool: if not self.odb_config: odb_data = dict(self.odb_data.items()) if not odb_data['extra']: odb_data['extra'] = {} odb_data['pool_size'] = int(odb_data['pool_size']) self.odb_config = {ZATO_ODB_POOL_NAME: odb_data} self.pool = ODBConnectionPool(self.odb_config, True, self.crypto_manager) self.pool.init() self.pool.get(ZATO_ODB_POOL_NAME) self.pool.ping({'pool_name': ZATO_ODB_POOL_NAME}) engine = self.pool.get(ZATO_ODB_POOL_NAME) self._Session = scoped_session(sessionmaker(bind=engine)) self._session = self._Session() try: self.server = self._session.query(Server).\ filter(Server.odb_token == self.odb_data['token']).\ one() self.cluster = self.server.cluster return self.server except Exception, e: msg = 'Could not find the server in the ODB, token=[{0}]'.format( self.odb_data['token']) logger.error(msg) raise
def fetch_server(self): """ Fetches the server from the ODB. Also sets the 'cluster' attribute to the value pointed to by the server's .cluster attribute. """ if not self.pool: if not self.odb_config: odb_data = dict(self.odb_data.items()) if not odb_data['extra']: odb_data['extra'] = {} odb_data['pool_size'] = int(odb_data['pool_size']) self.odb_config = {ZATO_ODB_POOL_NAME: odb_data} self.pool = ODBConnectionPool(self.odb_config, True, self.crypto_manager) self.pool.init() self.pool.get(ZATO_ODB_POOL_NAME) self.pool.ping({'pool_name': ZATO_ODB_POOL_NAME}) engine = self.pool.get(ZATO_ODB_POOL_NAME) self._Session = scoped_session(sessionmaker(bind=engine)) self._session = self._Session() try: self.server = self._session.query(Server).\ filter(Server.odb_token == self.odb_data['token']).\ one() self.cluster = self.server.cluster return self.server except Exception, e: msg = 'Could not find the server in the ODB, token=[{0}]'.format( self.odb_data['token']) logger.error(msg) raise