Ejemplo n.º 1
0
def _add_profile(data, user, id=0):
    if id:
        obj = get_profile(id)
        update_ref_count(obj.construct_list, -1)
        obj.name = data[NAME]

        if not data[CONSTRUCT_LIST]:
            raise IgniteException(ERR_PROF_IS_EMPTY)
        else:
            obj.construct_list = data[CONSTRUCT_LIST]

        obj.submit = data[SUBMIT]
        obj.updated_by = user
        update_ref_count(data[CONSTRUCT_LIST], +1)
        obj.save()
        return obj
    else:
        fp_object = Profile()
        fp_object.name = data[NAME]

        if not data[CONSTRUCT_LIST]:
            raise IgniteException(ERR_PROF_IS_EMPTY)
        else:
            fp_object.construct_list = data[CONSTRUCT_LIST]

        fp_object.submit = data[SUBMIT]
        fp_object.updated_by = user
        update_ref_count(data[CONSTRUCT_LIST], +1)
        fp_object.save()
        return fp_object
Ejemplo n.º 2
0
def _add_profile(data, user, id=0):
    logger.debug("profile name = %s", data[NAME])

    if id:
        # get existing profile
        profile = Profile.objects.get(pk=id)

        for cfg in profile.construct_list:
            configlet.update_ref_count(cfg[CONFIGLET_ID], -1)
            for param_detail in cfg[PARAM_LIST]:
                if param_detail[PARAM_TYPE] == POOL:
                    update_pool_ref_count(int(param_detail[PARAM_VALUE]), -1)

    else:
        # create new profile
        profile = Profile()

    profile.name = data[NAME]
    profile.submit = data[SUBMIT]

    if not data[CONSTRUCT_LIST]:
        raise IgniteException(ERR_PROF_IS_EMPTY)
    else:
        profile.construct_list = data[CONSTRUCT_LIST]

    profile.updated_by = user
    profile.save()

    # increment ref count of configlets and pool used in this profile
    for cfg in profile.construct_list:
        configlet.update_ref_count(cfg[CONFIGLET_ID], 1)
        for param_detail in cfg[PARAM_LIST]:
            if param_detail[PARAM_TYPE] == POOL:
                update_pool_ref_count(int(param_detail[PARAM_VALUE]), 1)

    return profile
Ejemplo n.º 3
0
def _add_profile_index(data, user, prindex_id=0, pr_id=0):
    logger.debug("profile name = %s", data[NAME])
    import hashlib

    pr_index = None
    profile = None
    temp1 = json.dumps(data[CONSTRUCT_LIST])

    if pr_id and prindex_id:
        # get existing profile
        pr_index = ProfileIndex.objects.get(pk=prindex_id)
        profile = Profile.objects.get(pk=pr_id, profileindex_id=prindex_id)
        current_version = get_profile_current_version(prindex_id)
        new = hashlib.md5(str(json.loads(temp1))).hexdigest()
        old = hashlib.md5(str(profile.construct_list)).hexdigest()

        if not data[CONSTRUCT_LIST]:
            raise IgniteException(ERR_PROF_IS_EMPTY)

        if old == new:
            if not profile.submit:
                profile.submit = data[SUBMIT]
                profile.save()
            return profile

        obj = Profile.objects.get(profileindex=prindex_id, version=current_version)
        if obj.id != pr_id:
            err = "Update/Newversion can only be done with latest version of config profile"
            logger.error(err)
            raise IgniteException(err)

        for cfg in profile.construct_list:
            configlet.update_ref_count(cfg[CONFIGLETINDEX_ID], cfg[VERSION], -1)
            for param_detail in cfg[PARAM_LIST]:
                if param_detail[PARAM_TYPE] == POOL:
                    update_pool_ref_count(int(param_detail[PARAM_VALUE]), -1)

        if data[NEW_VERSION]:
            if not profile.submit:
                err = "Please submit current version, then create new version"
                logger.error(err)
                raise IgniteException(err)

            profile = Profile()
            profile.version = current_version + 1
        else:
            profile = Profile.objects.get(pk=pr_id)
    else:
        # create new profile
        if not data[CONSTRUCT_LIST]:
            raise IgniteException(ERR_PROF_IS_EMPTY)
        pr_index = ProfileIndex()
        pr_index.name = data[NAME]
        pr_index.updated_by = user
        pr_index.save()

        profile = Profile()
        profile.version = 1

    profile.name = data[NAME]
    profile.construct_list = data[CONSTRUCT_LIST]
    profile.submit = data[SUBMIT]
    profile.updated_by = user
    profile.profileindex = pr_index
    profile.save()

    # increment ref count of configlets and pool used in this profile
    for cfg in profile.construct_list:
        configlet.update_ref_count(cfg[CONFIGLETINDEX_ID], cfg[VERSION],  1)
        for param_detail in cfg[PARAM_LIST]:
            if param_detail[PARAM_TYPE] == POOL:
                update_pool_ref_count(int(param_detail[PARAM_VALUE]), 1)

    return profile