Ejemplo n.º 1
0
def get_rules_list():
    """
    DOCSTRING : this function get all the rules then render to the page : 'admin/crush/rules_list.html'.
    Args : None
    Returns : render to the template page : 'admin/crush/rules_list.html'
    """
    if request.method == 'GET':
        try:
            manage_crush = ManageCrush()
            rule_list = manage_crush.get_rules()

            if list_err in session:
                result = session["err"]
                session.pop("err")
                return render_template('admin/crush/rules_list.html',
                                       rule_list=rule_list,
                                       err=result)

            elif list_success in session:
                result = session["success"]
                session.pop("success")
                return render_template('admin/crush/rules_list.html',
                                       rule_list=rule_list,
                                       success=result)

            elif list_warning in session:
                result = session["warning"]
                session.pop("warning")
                return render_template('admin/crush/rules_list.html',
                                       rule_list=rule_list,
                                       warning=result)

            else:
                return render_template('admin/crush/rules_list.html',
                                       rule_list=rule_list)

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_ceph_time_out"
            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
            logger.error(e)
            return render_template('admin/crush/rules_list.html')

        except Exception as e:
            session['err'] = "ui_admin_view_rule_error"
            result = session['err']
            logger.error(e)
            return render_template('admin/crush/rules_list.html', err=result)
Ejemplo n.º 2
0
def save_bucket_tree():
    if request.method == 'POST':
        try:
            bucket_tree = request.form.get("bucket")
            manage_crush = ManageCrush()
            manage_crush.save_buckets_tree(bucket_tree)
            session['success'] = "ui_admin_save_buckets_success"
            return redirect(url_for('crush_controller.get_bucket_list'))

        except CrushException as e:
            if e.id == CrushException.COMPILE or e.id == CrushException.BUCKET_SAVE:
                session['err'] = "ui_admin_save_buckets_fail"
                logger.error(e)
                return redirect(url_for('crush_controller.get_bucket_list'))
            elif e.id == CrushException.BUCKET_NOT_DEFINED:
                session['err'] = "ui_admin_save_buckets_fail"
                logger.error(e)
                return redirect(url_for('crush_controller.get_bucket_list'))
            elif e.id == CrushException.DUPLICATE_BUCKET_NAME:
                session['err'] = "ui_admin_bucket_duplicate_name"
                logger.error(e)
                return redirect(url_for('crush_controller.get_bucket_list'))
            else:
                session['err'] = "ui_admin_save_buckets_fail"
                logger.error(e)
                return redirect(url_for('crush_controller.get_bucket_list'))

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_ceph_time_out"
                logger.error(e)
                return redirect(url_for('crush_controller.get_bucket_list'))

            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
                logger.error(e)
                return redirect(url_for('crush_controller.get_bucket_list'))

            session['err'] = "ui_admin_ceph_general_exception"
            logger.error(e)
            return redirect(url_for('crush_controller.get_bucket_list'))

        except Exception as e:
            session['err'] = "ui_admin_save_buckets_fail"
            logger.error(e)
            return redirect(url_for('crush_controller.get_bucket_list'))
Ejemplo n.º 3
0
def get_buckets_types():
    if request.method == 'GET':
        try:
            manage_crush = ManageCrush()
            buckets_types = manage_crush.get_buckets_types()
            return buckets_types

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_ceph_time_out"
            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
            else:
                session['err'] = "ui_admin_ceph_general_exception"
            return redirect(url_for('crush_controller.get_bucket_list'), 307)
        except Exception as e:
            session['err'] = "ui_admin_error_read_crush_map"
            logger.error(e)
            return redirect(url_for('crush_controller.get_bucket_list'))
Ejemplo n.º 4
0
def get_selected_rule_info(rule_name):
    try:
        manage_crush = ManageCrush()
        rule_list = manage_crush.get_rules()

        selected_rule_info = rule_list[rule_name]
        json_data = json.dumps(selected_rule_info)
        return json_data

    except CephException as e:
        if e.id == CephException.CONNECTION_TIMEOUT:
            session['err'] = "ui_admin_ceph_time_out"
        elif e.id == CephException.GENERAL_EXCEPTION:
            session['err'] = "ui_admin_ceph_general_exception"
        logger.error(e)
        return render_template('admin/crush/rules_list.html')

    except Exception as e:
        session['err'] = "ui_admin_view_rule_error"
        result = session['err']
        logger.error(e)
        return render_template('admin/crush/rules_list.html', err=result)
Ejemplo n.º 5
0
def remove_rule(rule_name):
    """
    DOCSTRING : this function is called to delete a certain rule , then redirect to the page :
    'admin/crush/rules_list.html'.
    Args : rule_name (string)
    Returns : redirect to the page : 'admin/crush/rules_list.html'
    """
    if request.method == 'POST':
        try:
            used_flag = rule_in_use(rule_name)

            if used_flag:
                session["err"] = "ui_admin_cannot_delete_rule_in_use"
                return redirect(url_for('crush_controller.get_rules_list'))

            manage_crush = ManageCrush()

            manage_crush.delete_rule(rule_name)
            session["success"] = "ui_admin_delete_rule_success"
            return redirect(url_for('crush_controller.get_rules_list'))

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_ceph_time_out"
                return redirect(url_for('crush_controller.get_rules_list'))

            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
                return redirect(url_for('crush_controller.get_rules_list'))

            session['err'] = "ui_admin_ceph_general_exception"
            return redirect(url_for('crush_controller.get_rules_list'))

        except Exception as e:
            session['err'] = "ui_admin_delete_rule_error"
            logger.error(e)
            return redirect(url_for('crush_controller.get_rules_list'))
Ejemplo n.º 6
0
def get_pool_info(pool_name):
    """
    DOCSTRING : this function is called when opening the Edit Pool form page.
    Args : pool_name (string)
    Returns : redirect to the page : 'admin/pool/edit_pool.html'
    """

    global result

    if request.method == 'GET' or request.method == 'POST':
        try:
            selected_pool_profile = ECProfile()
            manage_pools = ManagePools()
            pool_list = manage_pools.get_pools_info()
            for pool_info in pool_list:
                if pool_info.name == pool_name:
                    selected_pool = pool_info

            # If the pool was "Erasure" ... get the profile :
            # -----------------------------------------------
            if selected_pool.type == "erasure":
                # getting the EC Profiles List
                manage_ec_profiles = ManageEcProfiles()
                profiles_list = manage_ec_profiles.get_ec_profiles()  # Dictionary of Objects

                for profile_name, profile_obj in profiles_list.items():
                    if profile_name == selected_pool.ec_profile:
                        selected_pool_profile = profile_obj

            manage_crush = ManageCrush()
            rule_list = manage_crush.get_rules()

                        # getting "storage_engine" from Cluster info :
            conf = configuration()
            ci = conf.get_cluster_info()
            storage_engine = ""
            storage_engine = ci.storage_engine

            if list_err in session:
                result = session["err"]
                session.pop("err")
                return render_template('admin/pool/edit_pool.html', selected_pool=selected_pool, rule_list=rule_list,
                                       selected_pool_profile=selected_pool_profile, storage_engine=storage_engine, err=result)

            elif list_success in session:
                result = session["success"]
                session.pop("success")
                return render_template('admin/pool/edit_pool.html', selected_pool=selected_pool, rule_list=rule_list,
                                       selected_pool_profile=selected_pool_profile, storage_engine=storage_engine, success=result)

            elif list_warning in session:
                result = session["warning"]
                session.pop("warning")
                return render_template('admin/pool/edit_pool.html', selected_pool=selected_pool, rule_list=rule_list,
                                       selected_pool_profile=selected_pool_profile, storage_engine=storage_engine, warning=result)

            else:
                return render_template('admin/pool/edit_pool.html', selected_pool=selected_pool, rule_list=rule_list,
                                       selected_pool_profile=selected_pool_profile, storage_engine=storage_engine)

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                result = session['err'] = "ui_admin_ceph_time_out"
                return render_template('admin/pool/edit_pool.html', err=result)

            elif e.id == CephException.GENERAL_EXCEPTION:
                result = session['err'] = "ui_admin_ceph_general_exception"
                logger.error(e)
                return render_template('admin/pool/edit_pool.html', err=result)

            result = session['err'] = "ui_admin_ceph_general_exception"
            logger.error(e)
            return render_template('admin/pool/edit_pool.html', err=result)

        except Exception as e:
            result = session['err'] = "ui_admin_view_get_pool_info_error"
            logger.error(e)
            return render_template('admin/pool/edit_pool.html', err=result)
Ejemplo n.º 7
0
def add_pool():
    """
    DOCSTRING : this function is called when opening the Add Pool form page.
    Args : None
    Returns : render to the template page : 'admin/pool/add_pool.html'
    """

    global result

    if request.method == 'GET' or request.method == 'POST':
        try:
            # getting the Rules List :
            manage_crush = ManageCrush()
            rule_list = manage_crush.get_rules()

            # getting the EC Profiles List :
            manage_ec_profiles = ManageEcProfiles()
            ec_profiles_list = manage_ec_profiles.get_ec_profiles()  # Dictionary of Objects

            # getting "storage_engine" from Cluster info :
            conf = configuration()
            ci = conf.get_cluster_info()
            storage_engine = ""
            storage_engine = ci.storage_engine

            if list_err in session:
                result = session["err"]
                session.pop("err")
                print(ec_profiles_list)
                return render_template('admin/pool/add_pool.html', rule_list=rule_list,
                                       ec_profiles_list=ec_profiles_list, storage_engine=storage_engine, err=result)

            elif list_success in session:
                result = session["success"]
                session.pop("success")
                print(ec_profiles_list)
                return render_template('admin/pool/add_pool.html', rule_list=rule_list,
                                       ec_profiles_list=ec_profiles_list, storage_engine=storage_engine, success=result)

            elif list_warning in session:
                result = session["warning"]
                session.pop("warning")
                print(ec_profiles_list)
                return render_template('admin/pool/add_pool.html', rule_list=rule_list,
                                       ec_profiles_list=ec_profiles_list, storage_engine=storage_engine, warning=result)

            else:
                return render_template('admin/pool/add_pool.html', rule_list=rule_list,
                                       ec_profiles_list=ec_profiles_list, storage_engine=storage_engine)

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_ceph_time_out"
            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
            logger.error(e)
            return render_template('admin/pool/add_pool.html')

        except Exception as e:
            session['err'] = "ui_admin_view_pool_error"
            logger.error(e)
            return render_template('admin/pool/add_pool.html')
Ejemplo n.º 8
0
def edit_rule():
    """
    DOCSTRING : this function is called at editing a specific rule , if editing operation is succeeded it renders to the
    template page : 'admin/crush/rules_list.html' with a success message , and if not it redirects
    to : 'admin/crush/edit_rule.html' with an error message ...
    Args : None
    Returns : in success , it renders to : 'admin/crush/rules_list.html' with a success message
    in failure , it redirects to : 'admin/crush/edit_rule.html'
    """
    if request.method == 'POST':
        try:
            rule_name = request.form['rule_name']
            rule_id = request.form['rule_id']
            rule_info = request.form['rule_body']

            manage_crush = ManageCrush()
            # rule_list = manage_crush.get_rules()
            manage_crush.update_rule(rule_name, rule_info)

            session['success'] = "ui_admin_edit_rule_success"
            return redirect(url_for('crush_controller.get_rules_list'))

        except CrushException as e:
            if e.id == CrushException.RULE_SAVE:
                session['err'] = "ui_admin_crush_edit_rule_error"
                return redirect(
                    url_for('crush_controller.get_rule_by_name',
                            rule_name=rule_name,
                            rule_id=rule_id))

            elif e.id == CrushException.DUPLICATE_RULE_ID:
                session['err'] = "ui_admin_crush_edit_duplicate_id_rule_error"
                return redirect(
                    url_for('crush_controller.get_rule_by_name',
                            rule_name=rule_name,
                            rule_id=rule_id))

            elif e.id == CrushException.DEVICE_TYPE_NOT_EXISTS:
                session['err'] = "ui_admin_crush_osd_type_edit_rule_error"
                return redirect(
                    url_for('crush_controller.rule_templates_list',
                            rule_name=rule_name,
                            rule_info=rule_info))

            session['err'] = "ui_admin_crush_general_error"
            logger.error(e)
            return redirect(
                url_for('crush_controller.get_rule_by_name',
                        rule_name=rule_name,
                        rule_id=rule_id))

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_ceph_time_out"
                return redirect(
                    url_for('crush_controller.get_rule_by_name',
                            rule_name=rule_name,
                            rule_id=rule_id))

            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
                return redirect(
                    url_for('crush_controller.get_rule_by_name',
                            rule_name=rule_name,
                            rule_id=rule_id))

            session['err'] = "ui_admin_ceph_general_exception"
            logger.error(e)
            return redirect(
                url_for('crush_controller.get_rule_by_name',
                        rule_name=rule_name,
                        rule_id=rule_id))

        except Exception as e:
            session['err'] = "ui_admin_edit_rule_err"
            logger.error(e)
            return redirect(
                url_for('crush_controller.get_rule_by_name',
                        rule_name=rule_name,
                        rule_id=rule_id), 307)
Ejemplo n.º 9
0
def get_rule_by_name(rule_name):
    """
    DOCSTRING : this function is called when opening the Edit Rule form page.
    Args : rule_name (string)
    Returns : redirect to the page : 'admin/crush/edit_rule.html'
    """
    if request.method == 'GET' or request.method == 'POST':
        try:
            manage_crush = ManageCrush()
            rule_list = manage_crush.get_rules()

            selected_rule_info = rule_list[rule_name]
            # selected_rule = {rule_name: selected_rule_info}

            rule_id = int(request.args.get('rule_id'))
            if rule_id == 0:
                result = "ui_admin_edit_default_rule"
                return render_template('admin/crush/edit_rule.html',
                                       rule_name=rule_name,
                                       selected_rule_info=selected_rule_info,
                                       info=result,
                                       rule_id=rule_id)
            if list_err in session:
                result = session[list_err]
                session.pop(list_err)
                return render_template('admin/crush/edit_rule.html',
                                       rule_name=rule_name,
                                       selected_rule_info=selected_rule_info,
                                       err=result,
                                       rule_id=rule_id)

            elif list_warning in session:
                result = session[list_warning]
                session.pop(list_warning)
                return render_template('admin/crush/edit_rule.html',
                                       rule_name=rule_name,
                                       selected_rule_info=selected_rule_info,
                                       warning=result,
                                       rule_id=rule_id)

            elif list_success in session:
                result = session[list_success]
                session.pop(list_success)
                return render_template('admin/crush/edit_rule.html',
                                       rule_name=rule_name,
                                       selected_rule_info=selected_rule_info,
                                       success=result,
                                       rule_id=rule_id)

            else:
                return render_template('admin/crush/edit_rule.html',
                                       rule_name=rule_name,
                                       selected_rule_info=selected_rule_info,
                                       rule_id=rule_id)
        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                result = session['err'] = "ui_admin_ceph_time_out"
                return render_template('admin/crush/edit_rule.html',
                                       rule_name=rule_name,
                                       selected_rule_info=selected_rule_info,
                                       err=result,
                                       rule_id=rule_id)

            elif e.id == CephException.GENERAL_EXCEPTION:
                result = session['err'] = "ui_admin_ceph_general_exception"
                logger.error(e)
                return render_template('admin/crush/edit_rule.html',
                                       rule_name=rule_name,
                                       selected_rule_info=selected_rule_info,
                                       err=result,
                                       rule_id=rule_id)

            result = session['err'] = "ui_admin_ceph_general_exception"
            logger.error(e)
            return render_template('admin/crush/edit_rule.html',
                                   rule_name=rule_name,
                                   selected_rule_info=selected_rule_info,
                                   err=result,
                                   rule_id=rule_id)
Ejemplo n.º 10
0
def rule_templates_list():
    """
    DOCSTRING : this function is called when opening the Add Rule form page.
    Args : None
    Returns : render to the template page : 'admin/crush/add_rule.html'
    """
    if request.method == 'GET' or request.method == 'POST':
        try:
            rule_info = request.args.get('rule_info')
            rules_templates = {}
            manage_crush = ManageCrush()
            rules_templates = manage_crush.get_templates()
            # rules_templates = {'name': 'body'}

            if list_err in session:
                result = session[list_err]
                session.pop(list_err)
                return render_template('admin/crush/add_rule.html',
                                       ruleTempList=rules_templates,
                                       err=result,
                                       rule_info=rule_info)

            elif list_warning in session:
                result = session[list_warning]
                session.pop(list_warning)
                return render_template('admin/crush/add_rule.html',
                                       ruleTempList=rules_templates,
                                       warning=result,
                                       rule_info=rule_info)

            elif list_success in session:
                result = session[list_success]
                session.pop(list_success)
                return render_template('admin/crush/add_rule.html',
                                       ruleTempList=rules_templates,
                                       success=result,
                                       rule_info=rule_info)

            else:
                return render_template('admin/crush/add_rule.html',
                                       ruleTempList=rules_templates,
                                       rule_info=rule_info)

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                result = session['err'] = "ui_admin_ceph_time_out"
                return render_template('admin/crush/add_rule.html',
                                       ruleTempList=rules_templates,
                                       err=result,
                                       rule_info=rule_info)

            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
                return render_template('admin/crush/add_rule.html',
                                       ruleTempList=rules_templates,
                                       err=result,
                                       rule_info=rule_info)

            session['err'] = "ui_admin_ceph_general_exception"
            logger.error(e)
            return render_template('admin/crush/add_rule.html',
                                   ruleTempList=rules_templates,
                                   err=result,
                                   rule_info=rule_info)