コード例 #1
0
def run(args):
    active_job_id = str(args.active_job_id)

    try:
        rep_handler = ReplicationHandler()
        rep_handler.kill_job_processes(active_job_id)
        print("replication job processes has been killed.")
        sys.exit(0)
    except:
        sys.exit(-1)
コード例 #2
0
def run_replication_job(args):
    job_id = args.job_id
    replication_handler = ReplicationHandler()
    try:
        replication_handler.run_replication_job(job_id)
        sys.exit(0)

    except Exception as e:
        manage_replication_jobs = ManageReplicationJobs()
        system_date_time = str(datetime.datetime.now()).split('.')[0]
        text = "{} - Job {} | Error : {}.".format(system_date_time,
                                                  str(job_id), e.message)
        manage_replication_jobs.log_replication_job(job_id, text)
        sys.exit(-1)
コード例 #3
0
def update_replication_info(args):
    disk_id = args.disk_id
    try:
        src_disk_id = args.src_disk_id
        src_disk_name = args.src_disk_name
        src_cluster_name = args.src_cluster_name
        src_cluster_fsid = args.src_cluster_fsid
        dest_disk_id = args.dest_disk_id
        dest_disk_name = args.dest_disk_name
        dest_cluster_name = args.dest_cluster_name
        dest_cluster_ip = args.dest_cluster_ip
        dest_cluster_fsid = args.dest_cluster_fsid

        new_replication_info = {
            'src_disk_id': src_disk_id,
            'src_disk_name': src_disk_name,
            'src_cluster_fsid': src_cluster_fsid,
            'src_cluster_name': src_cluster_name,
            'dest_disk_id': dest_disk_id,
            'dest_disk_name': dest_disk_name,
            'dest_cluster_name': dest_cluster_name,
            'dest_cluster_ip': dest_cluster_ip,
            'dest_cluster_fsid': dest_cluster_fsid
        }

        ceph_api = CephAPI()
        disks_metadata = ceph_api.get_diskmeta(disk_id)

        replication_handler = ReplicationHandler()
        confirm = replication_handler.update_replication_info(
            disks_metadata, new_replication_info)

        if not confirm:
            print(
                "Error : Cannot update replication info on destination disk " +
                disk_id)
            sys.exit(-1)

        sys.exit(0)

    except Exception as e:
        print("Error : Cannot update replication info on destination disk " +
              disk_id + " , Exception , {}".format(e.message))
        sys.exit(-1)
コード例 #4
0
def cancel_job(job_id):
    """
    DOCSTRING : this function is called to stop a certain active replication job from completing execution .
    Args : job_id (string)
    Returns : redirect to the page : 'admin/replication/job_list.html'
    """
    if request.method == 'POST':
        try:
            rep_handler = ReplicationHandler()
            result = rep_handler.force_cancel_active_job(job_id)
            if result:
                session['success'] = "ui_admin_success_deleting_active_job"
            else:
                session['err'] = "ui_admin_error_deleting_active_job"

        except Exception as e:
            logger.error(e)
            session['err'] = "ui_admin_error_deleting_active_job"

        return redirect(url_for('replication_controller.job_list'))
コード例 #5
0
def delete_replication_info(args):
    disk_id = args.disk_id
    try:
        ceph_api = CephAPI()
        disks_metadata = ceph_api.get_diskmeta(disk_id)

        replication_handler = ReplicationHandler()
        confirm = replication_handler.delete_replication_info(disks_metadata)

        if not confirm:
            print(
                "Error : Cannot delete replication info on destination disk " +
                disk_id)
            sys.exit(-1)

        sys.exit(0)

    except Exception as e:
        print("Error : Cannot delete replication info on destination disk " +
              disk_id + " , Exception , {}".format(e.message))
        sys.exit(-1)
コード例 #6
0
def edit_job(job_id):
    """
    DOCSTRING : this function is called when submit the Edit replication job form page.
    Args : None
    Returns : render to the template page : 'admin/replication/job_list.html'
    """
    if request.method == 'GET' or request.method == 'POST':
        mesg_err = ""
        mesg_success = ""
        mesg_warning = ""

        try:
            local_replication = ReplicationHandler()
            remote_replication = ManageRemoteReplication()
            manage_replication = ManageReplicationJobs()
            replication_job = get_selected_Job_info(job_id)
            old_node = replication_job.node_name

            job_name = request.form['job_name']
            schedule = str((request.form['schedule_object']))
            schedule_object = eval(schedule)
            backup_node = request.form['backup_node']
            source_cluster_name = request.form['source_cluster']
            dest_cluster_name = request.form['dest_cluster_name']
            rep_compression_mode = request.form['rep_compression_mode']

            if rep_compression_mode == 'enabled':
                rep_compression_algorithm = request.form[
                    'rep_compression_algorithm']
                replication_job.compression_algorithm = rep_compression_algorithm
            if rep_compression_mode == 'disabled':
                replication_job.compression_algorithm = ""

            pre_snap_script = request.form['pre_snap_script']
            post_snap_script = request.form['post_snap_script']
            post_job_complete = request.form['post_job_complete']

            remote_replication.disk_id = replication_job.destination_disk_id
            remote_replication.cluster_name = dest_cluster_name
            replication_job.job_name = job_name
            replication_job.schedule = schedule_object
            replication_job.node_name = backup_node
            replication_job.source_cluster_name = source_cluster_name
            replication_job.destination_cluster_name = dest_cluster_name
            replication_job.pre_snap_url = pre_snap_script
            replication_job.post_snap_url = post_snap_script
            replication_job.post_job_complete = post_job_complete

            # update src and dest disk meta.replication_info.
            manage_destination_cluster = ManageDestinationCluster()
            manage_replication.edit_replication_job(replication_job, old_node)
            session['success'] = "ui_admin_edit_job_success"
            return redirect(url_for('replication_controller.job_list'))

        except ReplicationException as e:
            logger.error(e)
            if e.id == ReplicationException.CONNECTION_REFUSED:
                session['err'] = "ui_admin_add_job_connction_refused_err"
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_add_job_connction_timeout_err"
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.DUPLICATE_NAME:
                session['err'] = "ui_admin_add_job_duplicate_err"
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.PERMISSION_DENIED:
                session['err'] = "Permission Denied."
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.GENERAL_EXCEPTION:
                session['err'] = "core_consul_exception_cant_edit_rep_job"
                return redirect(url_for('replication_controller.add_job'))

        except Exception as e:
            logger.error(e)
            session['err'] = "ui_admin_edit_job_error"
            return redirect(url_for('replication_controller.view_job'))
コード例 #7
0
def save_job():
    """
    DOCSTRING : this function is called at saving a new replication job , if saving operation is succeeded it renders to the
    template page : 'admin/replication/job_list.html' with a success message , and if not it redirects
    to : 'admin/replication/add_replication_job.html' with an error message ...
    Args : None
    Returns : in success , it renders to : 'admin/replication/job_list.html' with a success message
    in failure , it redirects to : 'admin/replication/add_replication_job.html'
    """
    if request.method == 'GET' or request.method == 'POST':
        mesg_err = ""
        mesg_success = ""
        mesg_warning = ""

        try:
            replication_job = ReplicationJob()
            local_replication = ReplicationHandler()
            remote_replication = ManageRemoteReplication()
            manage_replication = ManageReplicationJobs()

            # get replication job from html form.
            job_name = request.form['job_name']
            schedule_object = json.loads(request.form['schedule_object'])
            backup_node = request.form['backup_node']
            source_disk = request.form['source_disk']
            source_cluster_name = request.form['source_cluster']
            dest_cluster_name = request.form['dest_cluster_name']
            destination_disk = request.form['destination_disk']
            rep_compression_mode = request.form['rep_compression_mode']

            if rep_compression_mode == 'enabled':
                rep_compression_algorithm = request.form[
                    'rep_compression_algorithm']
                replication_job.compression_algorithm = rep_compression_algorithm

            pre_snap_script = request.form['pre_snap_script']
            post_snap_script = request.form['post_snap_script']
            post_job_complete = request.form['post_job_complete']

            src_disk_meta = manage_replication.get_src_disk_meta(source_disk)
            remote_replication.disk_id = destination_disk
            remote_replication.cluster_name = dest_cluster_name
            dest_disk_meta_dict = remote_replication.get_disk_meta()
            dest_disk_meta_obj = DiskMeta(dest_disk_meta_dict)

            # check if both source and destination disks have the same size.
            if src_disk_meta.size != dest_disk_meta_obj.size:
                session[
                    'err'] = "ui_admin_add_job_error_scr_dest_size_mismatch"
                return redirect(url_for('replication_controller.add_job'))
            if src_disk_meta.replication_info or dest_disk_meta_obj.replication_info:
                session[
                    'err'] = "ui_admin_add_job_error_scr_dest_have_replication_info"
                return redirect(url_for('replication_controller.add_job'))

            # fill replication job entity .
            replication_job.job_name = job_name
            replication_job.schedule = schedule_object
            replication_job.node_name = backup_node
            replication_job.source_cluster_name = source_cluster_name
            replication_job.source_disk_id = source_disk
            replication_job.destination_disk_id = destination_disk
            replication_job.destination_cluster_name = dest_cluster_name
            replication_job.pre_snap_url = pre_snap_script
            replication_job.post_snap_url = post_snap_script
            replication_job.post_job_complete = post_job_complete

            # update src and dest disk meta.replication_info.
            replication_info = {
                'src_disk_id': replication_job.source_disk_id,
                'src_disk_name': src_disk_meta.disk_name,
                'src_cluster_fsid': "",
                'src_cluster_name': replication_job.source_cluster_name,
                'dest_disk_id': replication_job.destination_disk_id,
                'dest_disk_name': dest_disk_meta_obj.disk_name,
                'dest_cluster_name': replication_job.destination_cluster_name,
                'dest_cluster_ip': "",
                'dest_cluster_fsid': ""
            }
            src_disk_meta.replication_info = replication_info

            # send job entity to the backend to be saved in the consul.
            manage_replication.add_replication_job(replication_job,
                                                   src_disk_meta)
            session['success'] = "ui_admin_add_job_success"
            return redirect(url_for('replication_controller.job_list'))

        except ReplicationException as e:
            logger.error(e)
            if e.id == ReplicationException.CONNECTION_REFUSED:
                session['err'] = "ui_admin_add_job_connction_refused_err"
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.CONNECTION_TIMEOUT:
                session['err'] = "ui_admin_add_job_connction_timeout_err"
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.DUPLICATE_NAME:
                session['err'] = "ui_admin_add_job_duplicate_err"
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.PERMISSION_DENIED:
                session['err'] = "Permission Denied."
                return redirect(url_for('replication_controller.add_job'))

            elif e.id == ReplicationException.GENERAL_EXCEPTION:
                session['err'] = "core_consul_exception_cant_add_rep_job"
                return redirect(url_for('replication_controller.add_job'))

        except Exception as e:
            logger.error(e)
            session['err'] = "ui_admin_add_job_error"
            return redirect(url_for('replication_controller.add_job'))