def add_rep_usr(name = ""):
    if request.method == 'GET' or request.method == 'POST':
        try:
            manage_pools = ManagePools()
            active_pools = manage_pools.get_active_pools()
            if list_err in session:
                result = session["err"]
                session.pop("err")
                return render_template('/admin/replication/cluster_users/add_user.html',name = name,active_pools = active_pools, err=result)

            elif list_success in session:
                result = session["success"]
                session.pop("success")
                return render_template('/admin/replication/cluster_users/add_user.html',name = name,active_pools = active_pools, success=result)

            elif list_warning in session:
                result = session["warning"]
                session.pop("warning")
                return render_template('/admin/replication/cluster_users/add_user.html',name = name,active_pools = active_pools, warning=result)

            else:

                return render_template('/admin/replication/cluster_users/add_user.html',active_pools = active_pools,name = name)

        except ConsulException as e:
            logger.error(e)

        except Exception as e:
            logger.error(e)

        return render_template('/admin/replication/cluster_users/add_user.html',active_pools = active_pools,name = name)
示例#2
0
def get_selected_pool_info(pool_name):
    """
    DOCSTRING : this function is used for modal information ...
    """
    global result
    try:
        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

        json_data = json.dumps(selected_pool.__dict__, sort_keys=True)
        return json_data

    except CephException as e:
        if e.id == CephException.CONNECTION_TIMEOUT:
            result = session['err'] = "ui_admin_ceph_time_out"
            return render_template('admin/pool/pools_list.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/pools_list.html', err=result)

        result = session['err'] = "ui_admin_ceph_general_exception"
        logger.error(e)
        return render_template('admin/pool/pools_list.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/pools_list.html', err=result)
示例#3
0
def get_pool_status():
    """
    DOCSTRING : this function is called by ajax request to get all the active pools
    Args : None
    Returns : json object of active pools list
    """


    if request.method == 'GET' or request.method == 'POST':
        # now_string_format = str(datetime.datetime.now()).split('.')[0]
        # now = datetime.datetime.strptime(now_string_format, "%Y-%m-%d %H:%M:%S")
        # print("inside get_pool_status()...")
        # print(now)
        # print("==================================================")
        global result
        manage_pool = ManagePools()
        # print("get active pools ....")
        active_pool_list = manage_pool.get_active_pools()
        # print("active pools= " , len(active_pool_list))
        # print("get pools info ....")
        pool_list = manage_pool.get_pools_info()
        # print("pools info=" , len(pool_list))
        pools = []
        for pool in pool_list:
            pool_dict = pool.__dict__
            pools.append(pool_dict)

        pools_dict = {"pools" : pools , "actives" : active_pool_list}
        # print("pools dict=" , pools_dict)

        json_data = json.dumps(pools_dict)
        return json_data
示例#4
0
def dashboard():
    leader = ClusterLeader().get_leader_node()
    config = configuration()
    management_nodes = config.get_management_nodes_config()
    for node in management_nodes:
        if node.name == leader:
            leader_ip = node.management_ip
            break
        else:
            leader_ip = leader
    port = ":3000"
    url = "http://{}{}/".format(leader_ip, port)
    nodes = ManageNode()
    node_list = nodes.get_node_list()
    # get pool_list
    manage_pool = ManagePools()
    pools_list = manage_pool.get_pools_info()
    pool_names = []
    for pool in pools_list:
        pool_names.append(pool.name)
    # end get pools
    return render_template('admin/dashboard.html',
                           url=url,
                           node_list=node_list,
                           pools_list=sorted(pool_names))
def edit_user(name):
    auth_pools = []
    active_pools = []
    user_info = ""
    if request.method == 'GET' or request.method == 'POST':
        try:
            user_info = ManageUsers().get_replication_user(name)
            manage_pools = ManagePools()
            active_pools = manage_pools.get_active_pools()
            if list_err in session:
                result = session["err"]
                session.pop("err")
                return render_template('/admin/replication/cluster_users/edit_user.html',user_info = user_info,active_pools = active_pools, err=result)

            elif list_success in session:
                result = session["success"]
                session.pop("success")
                return render_template('/admin/replication/cluster_users/edit_user.html',user_info = user_info,active_pools = active_pools, success=result)

            elif list_warning in session:
                result = session["warning"]
                session.pop("warning")
                return render_template('/admin/replication/cluster_users/edit_user.html',user_info = user_info,active_pools = active_pools, warning=result)

            else:
                return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools,user_info = user_info)

        except ConsulException as e:
            logger.error(e)

        except Exception as e:
            logger.error(e)

        return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools,user_info = user_info)
示例#6
0
def _get_pool_info_by_name(pool_name):
    manage_pools = ManagePools()
    pool_list = manage_pools.get_pools_info()

    for pool_info in pool_list:
        if pool_info.name == pool_name:
            return pool_info
def save_user():
    if request.method == 'POST':
        name = ""
        active_pools = []
        try:
            name = request.form['userName']
            auth_pools = request.form.getlist('pools[]')
            manage_pools = ManagePools()
            active_pools = manage_pools.get_active_pools()
            ManageUsers().add_user(name, auth_pools)

            user_info = ManageUsers().get_replication_user(name)
            session['success'] = "ui_admin_add_rep_user_success"
            result = session['success']
            session.pop("success")
            return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools ,user_info=user_info, success = result)

        except ReplicationException as e:
            if e.id == ReplicationException.CEPH_USER_EXIST or e.id == ReplicationException.SYSTEM_USER_EXIST:
                session['err'] = "ui_admin_add_rep_user_already_exist"
                logger.error(e)
                result = session["err"]
                session.pop("err")
                return render_template('/admin/replication/cluster_users/add_user.html',name = name, err=result, active_pools = active_pools)
            elif e.id == ReplicationException.NOT_BACKUP_NODE:
                session['err'] = "ui_admin_no_backup_node"
                logger.error(e)
                result = session["err"]
                session.pop("err")
                return render_template('/admin/replication/cluster_users/add_user.html',name = name, err=result, active_pools = active_pools)
            elif e.id == ReplicationException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_error_adding_user"
                logger.error(e)
                result = session["err"]
                session.pop("err")
                return render_template('/admin/replication/cluster_users/add_user.html',name = name, err=result, active_pools = active_pools)

        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)
            result = session["err"]
            session.pop("err")
            return render_template('/admin/replication/cluster_users/add_user.html',name = name, err=result, active_pools = active_pools)

        except ConsulException as e:
            logger.error(e)

        except Exception as e:
            logger.error(e)

        session['err'] = "ui_admin_error_adding_user"
        result = session["err"]
        session.pop("err")
        return render_template('/admin/replication/cluster_users/add_user.html', name = name,err=result, active_pools = active_pools)
示例#8
0
def get_delete_status(delete_id):
    """
    DOCSTRING : this function is called by ajax request to get the status of the deleted pool ,
    whether its deletion is finished or not
    Args : delete_id
    Returns : json object of deleted pool status
    """

    manage_pool = ManagePools()
    delete_status = manage_pool.is_pool_deleting(delete_id)

    if request.method == 'GET' or request.method == 'POST':
        json_data = json.dumps(delete_status)
        return json_data
示例#9
0
def rule_in_use(rule_name):
    """
    DOCSTRING : this function checks if a specific rule is used by a pool or not ...
    Args : rule_name (string)
    Returns : The return value is True if it used by a pool , False otherwise.
    """
    status = False
    manage_pools = ManagePools()
    pools_info = manage_pools.get_pools_info(
    )  # List of objects of pool entity
    for pool_object in pools_info:
        if pool_object.rule_name == rule_name:
            status = True
    return status
def update_user(user_name):
    if request.method == 'GET' or request.method == 'POST':
        try:
            auth_pools = request.form.getlist('pools[]')
            manage_users = ManageUsers()
            status = manage_users.update_auth_pools(user_name, auth_pools)
            manage_pools = ManagePools()
            active_pools = manage_pools.get_active_pools()
            user_info = manage_users.get_replication_user(user_name)
            if not status:
                session['err'] = "ui_admin_error_updating_authorized_pools"
                result = session["err"]
                session.pop("err")
                return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools ,user_info = user_info, err = result)

            session['success'] = "ui_admin_update_authorized_pools_success"
            result = session['success']
            session.pop("success")
            return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools,user_info = user_info, success = result)

        except ReplicationException as e:
            logger.error(e)
            session['err'] = "ui_admin_error_updating_authorized_pools"
            result = session["err"]
            session.pop("err")
            return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools ,user_info = user_info, err = result)

        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)
            result = session["err"]
            session.pop("err")
            return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools,user_info = user_info, err = result)

        except ConsulException as e:
            logger.error(e)

        except Exception as e:
            logger.error(e)

        session['err'] = "ui_admin_error_updating_authorized_pools"
        result = session["err"]
        session.pop("err")
        return render_template('/admin/replication/cluster_users/edit_user.html',active_pools = active_pools ,user_info = user_info, err = result)
def benchmark_form():
    try:
        nodes = ManageNode()
        node_list = nodes.get_node_list()
        result = "ui_admin_benchmark_warning_message"

        # get pool_list

        manage_pool = ManagePools()
        pool_names = manage_pool.get_active_pools()

        # end get pools

        return render_template('admin/benchmark/cluster_benchmark_form.html',
                               nodes=node_list,
                               info=result,
                               pools_list=sorted(pool_names))
    except Exception as e:
        session[list_err] = "ui_admin_error_loading_benchmark_page"
示例#12
0
def edit_pool():
    """
    DOCSTRING : this function is called at editing a specific pool , if editing operation is succeeded it renders to the
    template page : 'admin/pool/pools_list.html' with a success message , and if not it redirects
    to : 'admin/pool/edit_pool.html' with an error message ...
    Args : None
    Returns : in success , it renders to : 'admin/pool/pools_list.html' with a success message
    in failure , it redirects to : 'admin/pool/edit_pool.html'
    """

    if request.method == 'POST':

        try:
            # Get data from the form :
            name = (request.form['name'])
            type = (request.form['pool_type'])

            # If the pool was "Replicated" ...
            # --------------------------------
            if type == "replicated":
                pg_num = (request.form['rep_pg_num'])
                size = (request.form['rep_replica_size'])
                min_size = (request.form['rep_replica_min_size'])
                compression_mode = (request.form['rep_compression_mode'])

                if compression_mode == "enabled":
                    compression_mode = "force"
                    compression_algorithm = (request.form['rep_compression_algorithm'])
                else:
                    compression_mode = "none"
                    compression_algorithm = "none"

                rule_name = (request.form['rep_rule_name'])

            # If the pool was "Erasure" ...
            # --------------------------------
            elif type == "erasure":
                ec_profile = (request.form['ec_profile'])
                pg_num = (request.form['ec_pg_num'])
                k = (request.form['ec_K'])
                k = int(k)
                m = (request.form['ec_M'])
                m = int(m)
                size = k + m
                min_size = (request.form['ec_min_size'])
                compression_mode = (request.form['ec_compression_mode'])

                if compression_mode == "enabled":
                    compression_mode = "force"
                    compression_algorithm = (request.form['ec_compression_algorithm'])
                else:
                    compression_mode = "none"
                    compression_algorithm = "none"

                rule_name = (request.form['ec_rule_name'])
                # splite to get only the profile name from the obtained value
                rule_name = rule_name.split("##")[0]

            # Creating an instance from Class : PoolInfo() :
            selected_pool_info = PoolInfo()

            # Set the attributes of this instance :
            selected_pool_info.name = name
            selected_pool_info.type = type
            if type == "erasure":
                selected_pool_info.ec_profile = ec_profile
            selected_pool_info.pg_num = pg_num
            selected_pool_info.size = size
            selected_pool_info.min_size = min_size
            selected_pool_info.compression_mode = compression_mode
            selected_pool_info.compression_algorithm = compression_algorithm
            selected_pool_info.rule_name = rule_name

            # Creating an instance from Class : ManagePools() :
            manage_pools = ManagePools()

            # Updating pool :
            manage_pools.update_pool(selected_pool_info)
            session['success'] = "ui_admin_edit_pool_success"
            return redirect(url_for('pool_controller.get_pools'))

        except PoolException as e:

            if e.id == PoolException.DUPLICATE_NAME:
                session['err'] = "ui_admin_add_pool_err_duplicate"
                return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

            elif e.id == PoolException.PARAMETER_SET:
                session['err'] = "Errors encountered while setting the following parameters : " + e.message
                return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

            elif e.id == PoolException.SIZE_TOO_LARGE:
                session['err'] = "ui_admin_pool_size_too_large_error"
                return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

            elif e.id == PoolException.SIZE_TOO_SMALL:
                session['err'] = "ui_admin_pool_size_too_small_error"
                return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

            elif e.id == PoolException.OSD_PGS_EXCEEDED:
                session['err'] = "ui_admin_pool_osd_pgs_exceeded_error"
                return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

            session['err'] = "ui_admin_pool_general_error"
            logger.error(e)
            return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_ceph_time_out"
                return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

            elif e.id == CephException.GENERAL_EXCEPTION:
                session['err'] = "ui_admin_ceph_general_exception"
                return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

            session['err'] = "ui_admin_ceph_general_exception"
            return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))

        except Exception as e:
            session['err'] = "ui_admin_edit_pool_err"
            logger.error(e)
            return redirect(url_for('pool_controller.get_pool_info', pool_name=selected_pool_info.name))
示例#13
0
def get_pools(delete_job_id=-1, pool_name=""):
    """
    DOCSTRING : this function get ( all the pools + all the active pools ) then render to the page :
    'admin/pool/pools_list.html'.
    Args : None
    Returns : render to the template page : 'admin/pool/pools_list.html'
    """

    base_url = request.base_url
    global result

    if request.method == 'GET' or request.method == 'POST':
        try:
            manage_pool = ManagePools()
            pools_list = manage_pool.get_pools_info()
            active_pool_list = manage_pool.get_active_pools()
            if list_err in session:
                result = session["err"]
                session.pop("err")
                return render_template('admin/pool/pools_list.html', base_url=base_url, pools_list=pools_list,
                                       delete_job_id=delete_job_id, pool_name=pool_name,
                                       active_pool_list=active_pool_list, err=result)

            elif list_success in session:
                result = session["success"]
                session.pop("success")
                return render_template('admin/pool/pools_list.html', base_url=base_url, pools_list=pools_list,
                                       delete_job_id=delete_job_id, pool_name=pool_name,
                                       active_pool_list=active_pool_list, success=result)

            elif list_warning in session:
                result = session["warning"]
                session.pop("warning")
                return render_template('admin/pool/pools_list.html', base_url=base_url, pools_list=pools_list,
                                       delete_job_id=delete_job_id, pool_name=pool_name,
                                       active_pool_list=active_pool_list, warning=result)

            else:
                return render_template('admin/pool/pools_list.html',
                                       delete_job_id=delete_job_id, pool_name=pool_name,
                                       base_url=base_url, active_pool_list=active_pool_list, pools_list=pools_list)

        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                result = session['err'] = "ui_admin_ceph_time_out"

            elif e.id == CephException.GENERAL_EXCEPTION:
                result = session['err'] = "ui_admin_ceph_general_exception"

            else:
                result = session['err'] = "ui_admin_ceph_general_exception"

            logger.error(e)
            return render_template('admin/pool/pools_list.html', delete_job_id=delete_job_id,
                                   base_url=base_url, err=result)

        except Exception as e:
            session['err'] = "ui_admin_view_pool_error"
            result = session['err']
            logger.error(e)
            return render_template('admin/pool/pools_list.html', err=result)
示例#14
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)
示例#15
0
def attach_disk(disk_id, pool):
    if request.method == 'GET' or request.method == 'POST':
        failed_pools = 0
        manage_pool = ManagePools()
        active_pools = manage_pool.get_active_pools()
        all_pools = manage_pool.get_pools_info()
        if len(all_pools) > len(active_pools):
            failed_pools = len(all_pools) - len(active_pools)

        manage_config = ManageConfig()
        subnet1_info = manage_config.get_iscsi1_subnet()
        subnet2_info = manage_config.get_iscsi2_subnet()
        size_list_aval = [
            1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 250,
            300, 400, 450, 500, 600, 700, 800, 900, 1024, 2048, 3072, 4096,
            5120, 10240, 20480, 30720, 51200, 102400
        ]

        result = ""
        if list_err in session:
            result = session[list_err]
            session.pop(list_err)
            manage_disk = ManageDisk()
            disk = manage_disk.get_disk(disk_id, pool)
            form1 = add_disk_form()
            form1.id = disk.id
            form1.diskSize = disk.size
            form1.pool = pool
            form1.data_pool = disk.data_pool
            form1.diskName = disk.disk_name
            form1.is_replication_target = disk.is_replication_target
            return render_template('admin/disk/attach_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   form=form1,
                                   failed_pools=failed_pools,
                                   size_list=size_list_aval,
                                   err=result)

        elif list_warning in session:
            result = session[list_warning]
            session.pop(list_warning)
            manage_disk = ManageDisk()
            disk = manage_disk.get_disk(disk_id, pool)
            form1 = add_disk_form()
            form1.id = disk.id
            form1.diskSize = disk.size
            form1.pool = pool
            form1.data_pool = disk.data_pool
            form1.diskName = disk.disk_name
            form1.is_replication_target = disk.is_replication_target
            return render_template('admin/disk/attach_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   form=form1,
                                   failed_pools=failed_pools,
                                   size_list=size_list_aval,
                                   warning=result)

        elif list_success in session:
            result = session[list_success]
            session.pop(list_success)
            manage_disk = ManageDisk()
            disk = manage_disk.get_disk(disk_id, pool)
            form1 = add_disk_form()
            form1.id = disk.id
            form1.diskSize = disk.size
            form1.pool = pool
            form1.data_pool = disk.data_pool
            form1.diskName = disk.disk_name
            form1.is_replication_target = disk.is_replication_target
            return render_template('admin/disk/attach_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   form=form1,
                                   failed_pools=failed_pools,
                                   size_list=size_list_aval,
                                   success=result)

        else:
            is_not_petasan_warning = ''
            manage_disk = ManageDisk()
            disk = manage_disk.get_disk(disk_id, pool)
            form1 = add_disk_form()
            if disk.is_petasan_image is not None and disk.is_petasan_image == False:
                form1.diskName = disk.id
                is_not_petasan_warning = "ui_admin_attach_disk_warning_disk_is_not_petasan"
            form1.id = disk.id
            form1.diskSize = disk.size
            form1.pool = pool
            form1.data_pool = disk.data_pool
            form1.diskName = disk.disk_name
            form1.is_replication_target = disk.is_replication_target
            if is_not_petasan_warning != '':
                result = is_not_petasan_warning
            return render_template('admin/disk/attach_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   form=form1,
                                   failed_pools=failed_pools,
                                   size_list=size_list_aval,
                                   warning=result)
示例#16
0
def remove_pool(pool_name, pool_type):
    """
    DOCSTRING : this function is called to delete a certain pool , then redirect to the page :
    'admin/pool/pools_list.html'.
    Args : pool_name (string)
    Returns : redirect to the page : 'admin/pool/pools_list.html'
    """

    if request.method == 'POST':
        try:

            manage_pool = ManagePools()
            pool_list = manage_pool.get_pools_info()
            pool_names = []
            for pool in pool_list:
                pool_names.append(pool.name)

            if pool_type == "erasure":
                delete_job_id = manage_pool.delete_pool(pool_name)


            elif pool_type == "replicated":
                ceph_api = CephAPI()
                pools = ceph_api.get_active_pools()
                if pool_name not in pools:
                    delete_job_id = manage_pool.delete_pool(pool_name)

                elif pool_name in pools:

                    meta_disk = ManageDisk().get_disks_meta_by_pool(pool_name)

                    if len(meta_disk) == 0:
                        delete_job_id = manage_pool.delete_pool(pool_name)

                    has_data_pool = 0
                    for disk in meta_disk:
                        if disk.data_pool is not None and disk.data_pool != "":
                            if disk.data_pool in pool_names:
                                has_data_pool += 1

                    if has_data_pool > 0:
                        session['err'] = "error_deleting_mata_pool"
                        return redirect(url_for('pool_controller.get_pools'))

                    else:
                        if len(meta_disk) > 0:
                            delete_job_id = manage_pool.delete_pool(pool_name)

            return redirect(url_for('pool_controller.get_pools', delete_job_id=delete_job_id, pool_name=pool_name))

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

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

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

        except Exception as e:
            session['err'] = "ui_admin_delete_pool_error"
            logger.error(e)
            return redirect(url_for('pool_controller.get_pools'))
示例#17
0
def add_disk():
    if request.method == 'GET' or request.method == 'POST':
        manage_config = ManageConfig()
        subnet1_info = manage_config.get_iscsi1_subnet()
        subnet2_info = manage_config.get_iscsi2_subnet()
        size_list_aval = [
            1, 2, 3, 4, 5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 150, 250,
            300, 400, 450, 500, 600, 700, 800, 900, 1024, 2048, 3072, 4096,
            5120, 10240, 20480, 30720, 51200, 102400
        ]
        active_pools = []
        replicated_pools = []
        erasure_pools = []
        result = ""
        failed_pools = 0
        try:
            manage_pool = ManagePools()
            active_pools = manage_pool.get_active_pools()
            all_pools = manage_pool.get_pools_info()
            for pool in all_pools:
                if pool.name in active_pools and pool.type == 'replicated':
                    replicated_pools.append(pool.name)
                elif pool.name in active_pools and pool.type == 'erasure':
                    erasure_pools.append(pool.name)
            if len(all_pools) > len(active_pools):
                failed_pools = len(all_pools) - len(active_pools)
        except CephException as e:
            if e.id == CephException.CONNECTION_TIMEOUT:
                result = "Ceph connection timeout"
            elif e.id == CephException.GENERAL_EXCEPTION:
                result = "Ceph general exception"
            logger.error(e)
            form1 = add_disk_form()
            return render_template('admin/disk/add_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   size_list=size_list_aval,
                                   err=result,
                                   form=form1,
                                   failed_pools=failed_pools,
                                   erasure_pools=sorted(erasure_pools),
                                   replicated_pools=sorted(replicated_pools),
                                   pools=sorted(active_pools))
        if list_err in session:
            result = session[list_err]
            session.pop(list_err)
            return render_template('admin/disk/add_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   size_list=size_list_aval,
                                   err=result,
                                   form=request.form,
                                   failed_pools=failed_pools,
                                   erasure_pools=sorted(erasure_pools),
                                   replicated_pools=sorted(replicated_pools),
                                   pools=sorted(active_pools))
        elif list_warning in session:
            result = session[list_warning]
            session.pop(list_warning)
            return render_template('admin/disk/add_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   size_list=size_list_aval,
                                   warning=result,
                                   form=request.form,
                                   failed_pools=failed_pools,
                                   erasure_pools=sorted(erasure_pools),
                                   replicated_pools=sorted(replicated_pools),
                                   pools=sorted(active_pools))
        elif list_success in session:
            result = session[list_success]
            session.pop(list_success)
            return render_template('admin/disk/add_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   size_list=size_list_aval,
                                   success=result,
                                   form=request.form,
                                   failed_pools=failed_pools,
                                   erasure_pools=sorted(erasure_pools),
                                   replicated_pools=sorted(replicated_pools),
                                   pools=sorted(active_pools))
        else:
            form1 = add_disk_form()
            return render_template('admin/disk/add_disk.html',
                                   subnet1=subnet1_info,
                                   subnet2=subnet2_info,
                                   size_list=size_list_aval,
                                   form=form1,
                                   failed_pools=failed_pools,
                                   erasure_pools=sorted(erasure_pools),
                                   replicated_pools=sorted(replicated_pools),
                                   pools=sorted(active_pools))