Example #1
0
def list_evals_impl(dbsession, userId, policyId=None, imageDigest=None, tag=None, evalId=None, newest_only=False):
    logger.debug("looking up eval record: " + userId)


    # set up the filter based on input
    dbfilter = {}

    if policyId is not None:
        dbfilter['policyId'] = policyId

    if imageDigest is not None:
        dbfilter['imageDigest'] = imageDigest

    if tag is not None:
        dbfilter['tag'] = tag

    if evalId is not None:
        dbfilter['evalId'] = evalId

    if newest_only:
        records = db_policyeval.tsget_byfilter(userId, session=dbsession, **dbfilter)
        if len(records) > 0:
            return records

    # perform an interactive eval to get/install the latest
    try:
        logger.debug("performing eval refresh: " + str(dbfilter))
        imageDigest = dbfilter['imageDigest']
        if 'tag' in dbfilter:
            evaltag = dbfilter['tag']
        else:
            evaltag = None

        if 'policyId' in dbfilter:
            policyId = dbfilter['policyId']
        else:
            policyId = None

        rc = catalog_impl.perform_policy_evaluation(userId, imageDigest, dbsession, evaltag=evaltag, policyId=policyId)

    except Exception as err:
        logger.error(
            "interactive eval failed, will return any in place evaluation records - exception: " + str(err))

    records = db_policyeval.tsget_byfilter(userId, session=dbsession, **dbfilter)
    # Return None instead?
    #if not records:
    #    raise Exception("eval not found in DB")

    return records
Example #2
0
def do_policy_delete(userId, policy_record, dbsession, cleanup_evals=False, force=False):
    """
    Non-api delete of policy

    :param userId:
    :param policy_record:
    :param dbsession:
    :param cleanup_evals:
    :param force:
    :return:
    """
    return_object = False
    httpcode = 500

    try:
        policyId = policy_record['policyId']

        rc = db_policybundle.delete(policyId, userId, session=dbsession)
        if not rc:
            httpcode = 500
            raise Exception("DB delete of policyId ("+str(policyId)+") failed")
        else:
            if cleanup_evals:
                dbfilter = {"policyId": policyId}
                eval_records = db_policyeval.tsget_byfilter(userId, session=dbsession, **dbfilter)
                for eval_record in eval_records:
                    db_policyeval.delete_record(eval_record, session=dbsession)

        return_object = True
        httpcode = 200
    except Exception as err:
        return_object = str(err)

    return return_object, httpcode
Example #3
0
def list_evals_impl(dbsession, userId, policyId=None, imageDigest=None, tag=None, evalId=None, newest_only=False, interactive=False):
    logger.debug("looking up eval record: " + userId)

    object_store_mgr = object_store.get_manager()

    # set up the filter based on input
    dbfilter = {}
    latest_eval_record = latest_eval_result = None

    if policyId is not None:
        dbfilter['policyId'] = policyId

    if imageDigest is not None:
        dbfilter['imageDigest'] = imageDigest

    if tag is not None:
        dbfilter['tag'] = tag

    if evalId is not None:
        dbfilter['evalId'] = evalId

    # perform an interactive eval to get/install the latest
    try:
        logger.debug("performing eval refresh: " + str(dbfilter))
        imageDigest = dbfilter['imageDigest']
        if 'tag' in dbfilter:
            evaltag = dbfilter['tag']
        else:
            evaltag = None

        if 'policyId' in dbfilter:
            policyId = dbfilter['policyId']
        else:
            policyId = None

        latest_eval_record, latest_eval_result = catalog_impl.perform_policy_evaluation(userId, imageDigest, dbsession, evaltag=evaltag, policyId=policyId, interactive=interactive, newest_only=newest_only)
    except Exception as err:
        logger.error("interactive eval failed - exception: {}".format(err))

    records = []
    if interactive or newest_only:
        try:
            latest_eval_record['result'] = latest_eval_result
            records = [latest_eval_record]
        except:
            raise Exception("interactive or newest_only eval requested, but unable to perform eval at this time")
    else:
        records = db_policyeval.tsget_byfilter(userId, session=dbsession, **dbfilter)
        for record in records:
            try:
                result = object_store_mgr.get_document(userId, 'policy_evaluations', record['evalId'])
                record['result'] = result
            except:
                record['result'] = {}

    return records
Example #4
0
def list_evals_impl(dbsession,
                    userId,
                    policyId=None,
                    imageDigest=None,
                    tag=None,
                    evalId=None,
                    newest_only=False,
                    interactive=False):
    logger.debug("looking up eval record: " + userId)

    # set up the filter based on input
    dbfilter = {}

    if policyId is not None:
        dbfilter['policyId'] = policyId

    if imageDigest is not None:
        dbfilter['imageDigest'] = imageDigest

    if tag is not None:
        dbfilter['tag'] = tag

    if evalId is not None:
        dbfilter['evalId'] = evalId

    # perform an interactive eval to get/install the latest
    try:
        logger.debug("performing eval refresh: " + str(dbfilter))
        imageDigest = dbfilter['imageDigest']
        if 'tag' in dbfilter:
            evaltag = dbfilter['tag']
        else:
            evaltag = None

        if 'policyId' in dbfilter:
            policyId = dbfilter['policyId']
        else:
            policyId = None

        latest_eval_record, latest_eval_result = catalog_impl.perform_policy_evaluation(
            userId,
            imageDigest,
            dbsession,
            evaltag=evaltag,
            policyId=policyId,
            interactive=interactive,
            newest_only=newest_only)

    except Exception as err:
        logger.error(
            "interactive eval failed, will return any in place evaluation records - exception: "
            + str(err))

    records = []
    if interactive or newest_only:
        latest_eval_record['result'] = latest_eval_result
        records = [latest_eval_record]
    else:
        records = db_policyeval.tsget_byfilter(userId,
                                               session=dbsession,
                                               **dbfilter)
        for record in records:
            try:
                result = archive_sys.get_document(userId, 'policy_evaluations',
                                                  record['evalId'])
                record['result'] = result
            except:
                record['result'] = {}

    return records