Exemplo n.º 1
0
class FilterModule(object):

    def __init__(self):
        self._db_logger = DbLogger()
        self._logger = self._db_logger.logger
        self.db_client = None
    # end __init__

    def filters(self):
        return {
            'read_from_db': self.read_from_db

        }
    # end filters

    def _initialize_db_client(self, job_ctx):
        db_init_params = job_ctx.get('db_init_params')
        cred = None
        if (db_init_params.get('cassandra_user') is not None and
                db_init_params.get('cassandra_password') is not None):
            cred = {'username': db_init_params.get('cassandra_user'),
                    'password': db_init_params.get('cassandra_password')}
        if self.db_client is None:
            self.db_client = VncObjectDBClient(
                db_init_params.get('cassandra_server_list'),
                job_ctx.get('cluster_id'), None, None,
                logger=self._db_logger.log, credential=cred,
                ssl_enabled=db_init_params.get('cassandra_use_ssl'),
                ca_certs=db_init_params.get('cassandra_ca_certs'))
    # end _initialize_db_client

    def read_from_db(self, job_ctx, obj_type, obj_id, obj_fields=None,
                     ret_readonly=False):
        if self.db_client is None:
            try:
                self._initialize_db_client(job_ctx)
            except Exception as e:
                msg = "Error while initializing the cassandra DB " \
                      "client. %s " % repr(e)
                self._logger.error(msg)
                return self._build_result(False, msg)
        try:
            ok, cassandra_result = self.db_client.object_read(
                obj_type, [obj_id], obj_fields, ret_readonly=ret_readonly)
        except Exception as e:
            self._logger.error("Exception while trying to read %s %s from db"
                               " %s " % (obj_type, obj_id, repr(e)))
            return self._build_result(False, str(e))

        return self._build_result(ok, cassandra_result[0])
    # end db_read

    @staticmethod
    def _build_result(is_ok, result):
        if is_ok is not None and is_ok:
            status = 'success'
        else:
            status = 'false'
        return {
            'status': status,
            'result': result
        }