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)
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)
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
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)
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)
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
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"
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))
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)
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)
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)
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'))
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))