Exemplo n.º 1
0
def export_software_profiles():
    db_session = DBSession()

    software_profile_list = request.args.getlist(
        'software_profile_list[]')[0].split(",")
    software_profiles = get_software_profile_list(db_session)
    d = {"CSM Server:Software Profile": {}}

    for software_profile in software_profiles:
        if software_profile.name in software_profile_list:
            d["CSM Server:Software Profile"][
                software_profile.name] = software_profile.packages

    temp_user_dir = create_temp_user_directory(current_user.username)
    software_profile_export_temp_path = os.path.normpath(
        os.path.join(temp_user_dir, "software_profile_export"))
    create_directory(software_profile_export_temp_path)
    make_file_writable(software_profile_export_temp_path)

    with open(
            os.path.join(software_profile_export_temp_path,
                         'software_profiles.json'),
            'w') as command_export_file:
        command_export_file.write(json.dumps(d, indent=2))

    return send_file(os.path.join(software_profile_export_temp_path,
                                  'software_profiles.json'),
                     as_attachment=True)
Exemplo n.º 2
0
Arquivo: log.py Projeto: smjurcak/csm
def download_system_logs():
    db_session = DBSession()
    logs = db_session.query(Log) \
        .order_by(Log.created_time.desc())

    contents = ''
    for log in logs:
        contents += get_datetime_string(log.created_time) + ' UTC\n'
        contents += log.level + ':' + log.msg + '\n'
        if log.trace is not None:
            contents += log.trace + '\n'
        contents += '-' * 70 + '\n'

    # Create a file which contains the size of the image file.
    temp_user_dir = create_temp_user_directory(current_user.username)
    log_file_path = os.path.normpath(os.path.join(temp_user_dir, "system_logs"))

    create_directory(log_file_path)
    make_file_writable(log_file_path)

    log_file = open(os.path.join(log_file_path, 'system_logs'), 'w')
    log_file.write(contents)
    log_file.close()

    return send_file(os.path.join(log_file_path, 'system_logs'), as_attachment=True)
Exemplo n.º 3
0
Arquivo: log.py Projeto: smjurcak/csm
def download_system_logs():
    db_session = DBSession()
    logs = db_session.query(Log) \
        .order_by(Log.created_time.desc())

    contents = ''
    for log in logs:
        contents += get_datetime_string(log.created_time) + ' UTC\n'
        contents += log.level + ':' + log.msg + '\n'
        if log.trace is not None:
            contents += log.trace + '\n'
        contents += '-' * 70 + '\n'

    # Create a file which contains the size of the image file.
    temp_user_dir = create_temp_user_directory(current_user.username)
    log_file_path = os.path.normpath(os.path.join(temp_user_dir,
                                                  "system_logs"))

    create_directory(log_file_path)
    make_file_writable(log_file_path)

    log_file = open(os.path.join(log_file_path, 'system_logs'), 'w')
    log_file.write(contents)
    log_file.close()

    return send_file(os.path.join(log_file_path, 'system_logs'),
                     as_attachment=True)
Exemplo n.º 4
0
    def __init__(self, **kwargs):
        ReportWriter.__init__(self, **kwargs)
        self.user = kwargs.pop('user')
        self.smu_loader = kwargs.pop('smu_loader')
        self.smu_list = kwargs.pop('smu_list')
        self.sp_list = kwargs.pop('sp_list')

        self.smu_list = sorted(self.smu_list, key=lambda x: x.posted_date, reverse=True)
        self.sp_list = sorted(self.sp_list, key=lambda x: x.posted_date, reverse=True)

        temp_user_dir = create_temp_user_directory(self.user.username)
        self.output_file_directory = os.path.normpath(os.path.join(temp_user_dir, 'software_information_export'))

        create_directory(self.output_file_directory)
        make_file_writable(self.output_file_directory)
Exemplo n.º 5
0
    def __init__(self, **kwargs):
        ReportWriter.__init__(self, **kwargs)
        self.user = kwargs.pop('user')
        self.region_name = kwargs.pop('region_name')

        self.chassis_summary_iter = kwargs.pop('chassis_summary_iter')
        self.model_name_summary_iter = kwargs.pop('model_name_summary_iter')

        self.inventory_without_serial_number_iter = kwargs.pop('inventory_without_serial_number_iter')
        self.inventory_with_duplicate_serial_number_iter = kwargs.pop('inventory_with_duplicate_serial_number_iter')

        temp_user_dir = create_temp_user_directory(self.user.username)
        self.output_file_directory = os.path.normpath(os.path.join(temp_user_dir, 'inventory_information_export'))

        create_directory(self.output_file_directory)
        make_file_writable(self.output_file_directory)
Exemplo n.º 6
0
def download_session_logs(file_list):
    if hasattr(current_user, 'username'):
        username = current_user.username
    else:
        username = g.api_user.username

    temp_user_dir = create_temp_user_directory(username)
    session_zip_path = os.path.normpath(os.path.join(temp_user_dir, "session_logs"))
    zip_file = os.path.join(session_zip_path, "session_logs.zip")
    create_directory(session_zip_path)
    make_file_writable(session_zip_path)

    zout = zipfile.ZipFile(zip_file, mode='w')
    for f in file_list:
        zout.write(os.path.normpath(f), os.path.basename(f))

    zout.close()

    return send_file(zip_file, as_attachment=True)
Exemplo n.º 7
0
    def __init__(self, **kwargs):
        ReportWriter.__init__(self, **kwargs)
        self.user = kwargs.pop('user')
        self.serial_number = kwargs.pop('serial_number')
        self.region_names = kwargs.pop('region_names')
        self.chassis_types = kwargs.pop('chassis_types')
        self.software_versions = kwargs.pop('software_versions')
        self.model_names = kwargs.pop('model_names')
        self.partial_model_names = kwargs.pop('partial_model_names')
        self.vid = kwargs.pop('vid')

        self.available_inventory_iter = kwargs.pop('available_inventory_iter')
        self.in_use_inventory_iter = kwargs.pop('in_use_inventory_iter')

        temp_user_dir = create_temp_user_directory(self.user.username)
        self.output_file_directory = os.path.normpath(os.path.join(temp_user_dir, 'inventory_information_export'))

        create_directory(self.output_file_directory)
        make_file_writable(self.output_file_directory)
Exemplo n.º 8
0
def export_command_profiles():
    db_session = DBSession()
    profiles_list = request.args.getlist('profiles_list[]')[0].split(",")
    db_profiles = db_session.query(CustomCommandProfile).all()
    d = {"CSM Server:Custom Command Profile": {}}

    for profile in db_profiles:
        if profile.profile_name in profiles_list:
            d["CSM Server:Custom Command Profile"][profile.profile_name] = profile.command_list

    temp_user_dir = create_temp_user_directory(current_user.username)
    custom_command_export_temp_path = os.path.normpath(os.path.join(temp_user_dir, "custom_command_export"))
    create_directory(custom_command_export_temp_path)
    make_file_writable(custom_command_export_temp_path)

    with open(os.path.join(custom_command_export_temp_path, 'custom_command_profiles.json'), 'w') as command_export_file:
        command_export_file.write(json.dumps(d, indent=2))

    return send_file(os.path.join(custom_command_export_temp_path, 'custom_command_profiles.json'), as_attachment=True)
Exemplo n.º 9
0
def export_software_profiles():
    db_session = DBSession()

    software_profile_list = request.args.getlist('software_profile_list[]')[0].split(",")
    software_profiles = get_software_profile_list(db_session)
    d = {"CSM Server:Software Profile": {}}

    for software_profile in software_profiles:
        if software_profile.name in software_profile_list:
            d["CSM Server:Software Profile"][software_profile.name] = software_profile.packages

    temp_user_dir = create_temp_user_directory(current_user.username)
    software_profile_export_temp_path = os.path.normpath(os.path.join(temp_user_dir, "software_profile_export"))
    create_directory(software_profile_export_temp_path)
    make_file_writable(software_profile_export_temp_path)

    with open(os.path.join(software_profile_export_temp_path, 'software_profiles.json'), 'w') as command_export_file:
        command_export_file.write(json.dumps(d, indent=2))

    return send_file(os.path.join(software_profile_export_temp_path, 'software_profiles.json'), as_attachment=True)
Exemplo n.º 10
0
def download_session_logs(file_list):
    if hasattr(current_user, 'username'):
        username = current_user.username
    else:
        username = g.api_user.username

    temp_user_dir = create_temp_user_directory(username)
    session_zip_path = os.path.normpath(
        os.path.join(temp_user_dir, "session_logs"))
    zip_file = os.path.join(session_zip_path, "session_logs.zip")
    create_directory(session_zip_path)
    make_file_writable(session_zip_path)

    zout = zipfile.ZipFile(zip_file, mode='w')
    for f in file_list:
        zout.write(os.path.normpath(f), os.path.basename(f))

    zout.close()

    return send_file(zip_file, as_attachment=True)
Exemplo n.º 11
0
    def __init__(self, **kwargs):
        super(ConformanceReportWriter, self).__init__(**kwargs)
        self.style_title = xlwt.easyxf('font: height 350, bold on; align: vert centre, horiz center;')
        self.style_bold = xlwt.easyxf('font: bold on, height 260;')
        self.style_summary = xlwt.easyxf('font: height 220;')
        self.style_center = xlwt.easyxf('align: vert centre, horiz center;')

        self.user = kwargs.pop('user')
        self.conformance_report = kwargs.pop('conformance_report')
        self.locale_datetime = kwargs.pop('locale_datetime')
        self.include_host_packages = kwargs.pop('include_host_packages')
        self.exclude_conforming_hosts = kwargs.pop('exclude_conforming_hosts')

        self.wb = xlwt.Workbook()
        self.ws = self.wb.add_sheet('Conformance Report')
        self.ws.set_portrait(False)

        temp_user_dir = create_temp_user_directory(self.user.username)
        self.output_file_directory = os.path.normpath(os.path.join(temp_user_dir, "conformance_report"))

        create_directory(self.output_file_directory)
        make_file_writable(self.output_file_directory)

        self.row = 0
Exemplo n.º 12
0
    def start(self, db_session, logger, process_name):
        self.db_session = db_session
        try:
            self.create_tar_job = self.db_session.query(CreateTarJob).filter(CreateTarJob.id == self.job_id).first()
            if self.create_tar_job is None:
                logger.error('Unable to retrieve create tar job: %s' % self.job_id)
                return

            self.create_tar_job.set_status(JobStatus.PROCESSING)

            server_id = self.create_tar_job.server_id
            server_directory = self.create_tar_job.server_directory
            source_tars = self.create_tar_job.source_tars
            contents = self.create_tar_job.contents
            additional_packages = self.create_tar_job.additional_packages
            new_tar_name = self.create_tar_job.new_tar_name
            created_by = self.create_tar_job.created_by

            date_string = datetime.datetime.utcnow().strftime("%Y_%m_%d_%H_%M_%S")

            repo_dir = get_repository_directory()
            temp_path = get_temp_directory() + str(date_string)
            new_tar_path = os.path.join(temp_path, str(date_string))

            try:
                if not os.path.exists(temp_path):
                    self.create_tar_job.set_status('Creating temporary directories.')
                    self.db_session.commit()
                    os.makedirs(temp_path)
                    os.makedirs(new_tar_path, 7777)

                # Untar source tars into the temp/timestamp directory
                if source_tars:
                    self.create_tar_job.set_status('Extracting from source tar files.')
                    self.db_session.commit()
                    for source in source_tars.split(','):
                        with tarfile.open(os.path.join(repo_dir, source)) as tar:
                            tar.extractall(temp_path)

                # Copy the selected contents from the temp/timestamp directory
                # to the new tar directory
                if contents:
                    self.create_tar_job.set_status('Copying selected tar contents.')
                    self.db_session.commit()
                    for f in contents.strip().split(','):
                        _, filename = os.path.split(f)
                        shutil.copy2(os.path.join(temp_path, filename), new_tar_path)

                # Copy the selected additional packages from the repository to the new tar directory
                if additional_packages:
                    self.create_tar_job.set_status('Copying selected additional files.')
                    for pkg in additional_packages.split(','):
                        self.db_session.commit()
                        shutil.copy2(os.path.join(repo_dir, pkg), new_tar_path)

                self.create_tar_job.set_status('Tarring new file.')
                self.db_session.commit()
                tarname = os.path.join(temp_path, new_tar_name)
                shutil.make_archive(tarname, format='tar', root_dir=new_tar_path)
                make_file_writable(os.path.join(new_tar_path, tarname) + '.tar')

                server = self.db_session.query(Server).filter(Server.id == server_id).first()
                if server is not None:
                    self.create_tar_job.set_status('Uploading to external repository.')
                    self.db_session.commit()

                    server_impl = get_server_impl(server)

                    # If the new file already exists on the remote host, delete it
                    if new_tar_name in server_impl.get_file_list():
                        server_impl.delete_file(new_tar_name)

                    statinfo = os.stat(tarname + '.tar')
                    self.new_tar_size = statinfo.st_size
                    self.chunk_list = self.get_chunks(self.new_tar_size, self.new_tar_size / 1048576)

                    if isinstance(server_impl, FTPServer):
                        server_impl.upload_file(tarname + '.tar', new_tar_name + ".tar", sub_directory=server_directory,
                                            callback=self.ftp_progress_listener)
                    elif isinstance(server_impl, SFTPServer):
                        server_impl.upload_file(tarname + '.tar', new_tar_name + ".tar", sub_directory=server_directory,
                                            callback=self.sftp_progress_listener)
                    else:
                        server_impl.upload_file(tarname + '.tar', new_tar_name + ".tar", sub_directory=server_directory)

                shutil.rmtree(temp_path, onerror=self.handleRemoveReadonly)
                self.create_tar_job.set_status(JobStatus.COMPLETED)
                self.db_session.commit()

            except Exception:
                self.create_tar_job.set_status(JobStatus.FAILED)
                self.db_session.commit()
                logger.exception('Exception while creating %s requested by %s - job id = %s',
                                  new_tar_name, created_by, self.job_id)
                shutil.rmtree(temp_path, onerror=self.handleRemoveReadonly)
                os.remove(temp_path + '.tar')

        finally:
            self.db_session.close()
Exemplo n.º 13
0
    def start(self, db_session, logger, process_name):
        self.db_session = db_session
        try:
            self.create_tar_job = self.db_session.query(CreateTarJob).filter(
                CreateTarJob.id == self.job_id).first()
            if self.create_tar_job is None:
                logger.error('Unable to retrieve create tar job: %s' %
                             self.job_id)
                return

            self.create_tar_job.set_status(JobStatus.PROCESSING)

            server_id = self.create_tar_job.server_id
            server_directory = self.create_tar_job.server_directory
            source_tars = self.create_tar_job.source_tars
            contents = self.create_tar_job.contents
            additional_packages = self.create_tar_job.additional_packages
            new_tar_name = self.create_tar_job.new_tar_name
            created_by = self.create_tar_job.created_by

            date_string = datetime.datetime.utcnow().strftime(
                "%Y_%m_%d_%H_%M_%S")

            repo_dir = get_repository_directory()
            temp_path = get_temp_directory() + str(date_string)
            new_tar_path = os.path.join(temp_path, str(date_string))

            try:
                if not os.path.exists(temp_path):
                    self.create_tar_job.set_status(
                        'Creating temporary directories.')
                    self.db_session.commit()
                    os.makedirs(temp_path)
                    os.makedirs(new_tar_path, 7777)

                # Untar source tars into the temp/timestamp directory
                if source_tars:
                    self.create_tar_job.set_status(
                        'Extracting from source tar files.')
                    self.db_session.commit()
                    for source in source_tars.split(','):
                        with tarfile.open(os.path.join(repo_dir,
                                                       source)) as tar:
                            tar.extractall(temp_path)

                # Copy the selected contents from the temp/timestamp directory
                # to the new tar directory
                if contents:
                    self.create_tar_job.set_status(
                        'Copying selected tar contents.')
                    self.db_session.commit()
                    for f in contents.strip().split(','):
                        _, filename = os.path.split(f)
                        shutil.copy2(os.path.join(temp_path, filename),
                                     new_tar_path)

                # Copy the selected additional packages from the repository to the new tar directory
                if additional_packages:
                    self.create_tar_job.set_status(
                        'Copying selected additional files.')
                    for pkg in additional_packages.split(','):
                        self.db_session.commit()
                        shutil.copy2(os.path.join(repo_dir, pkg), new_tar_path)

                self.create_tar_job.set_status('Tarring new file.')
                self.db_session.commit()
                tarname = os.path.join(temp_path, new_tar_name)
                shutil.make_archive(tarname,
                                    format='tar',
                                    root_dir=new_tar_path)
                make_file_writable(
                    os.path.join(new_tar_path, tarname) + '.tar')

                server = self.db_session.query(Server).filter(
                    Server.id == server_id).first()
                if server is not None:
                    self.create_tar_job.set_status(
                        'Uploading to external repository.')
                    self.db_session.commit()

                    server_impl = get_server_impl(server)

                    # If the new file already exists on the remote host, delete it
                    if new_tar_name in server_impl.get_file_list():
                        server_impl.delete_file(new_tar_name)

                    statinfo = os.stat(tarname + '.tar')
                    self.new_tar_size = statinfo.st_size
                    self.chunk_list = self.get_chunks(
                        self.new_tar_size, self.new_tar_size / 1048576)

                    if isinstance(server_impl, FTPServer):
                        server_impl.upload_file(
                            tarname + '.tar',
                            new_tar_name + ".tar",
                            sub_directory=server_directory,
                            callback=self.ftp_progress_listener)
                    elif isinstance(server_impl, SFTPServer):
                        server_impl.upload_file(
                            tarname + '.tar',
                            new_tar_name + ".tar",
                            sub_directory=server_directory,
                            callback=self.sftp_progress_listener)
                    else:
                        server_impl.upload_file(tarname + '.tar',
                                                new_tar_name + ".tar",
                                                sub_directory=server_directory)

                shutil.rmtree(temp_path, onerror=self.handleRemoveReadonly)
                self.create_tar_job.set_status(JobStatus.COMPLETED)
                self.db_session.commit()

            except Exception:
                self.create_tar_job.set_status(JobStatus.FAILED)
                self.db_session.commit()
                logger.exception(
                    'Exception while creating %s requested by %s - job id = %s',
                    new_tar_name, created_by, self.job_id)
                shutil.rmtree(temp_path, onerror=self.handleRemoveReadonly)
                os.remove(temp_path + '.tar')

        finally:
            self.db_session.close()