def scan_system(self): """The function is used for scanning system with all steps.""" self._set_devel_mode() if not self.is_module_set_valid(): return ReturnValues.SCENARIO ret_val = self.prepare_scan_system() if ret_val != 0: return ret_val # Update source XML file in temporary directory self.openscap_helper.update_variables(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.all_xccdf_xml_copy_path) try: self.report_parser = ReportParser(self.all_xccdf_xml_copy_path) except IOError: log_message("Error: Unable to open {0}.".format( self.all_xccdf_xml_copy_path)) return ReturnValues.SCENARIO if self.conf.mode: lines = [ i.rstrip() for i in FileHelper.get_file_content(os.path.join( self.module_set_copy_path, self.conf.mode), 'rb', method=True) ] self.report_parser.select_rules(lines) if self.conf.select_rules: lines = [i.strip() for i in self.conf.select_rules.split(',')] unknown_rules = self.report_parser.check_rules(lines) if unknown_rules: log_message(settings.unknown_rules % '\n'.join(unknown_rules)) self.report_parser.select_rules(lines) self.run_scan_process() main_report = self.scanning_progress.get_output_data() self.prepare_xml_for_html() self.generate_html_or_text() self.update_xml_after_html_generated() self.copy_postupgrade_files() self.copy_preupgrade_scripts(self.module_set_copy_path) ConfigFilesHelper.copy_modified_config_files( settings.assessment_results_dir) # It prints out result in table format ScanningHelper.format_rules_to_table(main_report, "main contents") self.tar_ball_name = TarballHelper.tarball_result_dir( self.conf.tarball_name, self.conf.verbose) log_message("The tarball with results is stored in '%s' ." % self.tar_ball_name) log_message("The latest assessment is stored in the '%s' directory." % self.conf.assessment_results_dir) # pack all configuration files to tarball return 0
def scan_system(self): """The function is used for scanning system with all steps.""" self._set_devel_mode() if not self.is_module_set_valid(): return ReturnValues.SCENARIO ret_val = self.prepare_scan_system() if ret_val != 0: return ret_val # Update source XML file in temporary directory self.openscap_helper.update_variables(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.all_xccdf_xml_copy_path) try: self.report_parser = ReportParser(self.all_xccdf_xml_copy_path) except IOError: log_message("Error: Unable to open {0}." .format(self.all_xccdf_xml_copy_path)) return ReturnValues.SCENARIO if self.conf.mode: lines = [i.rstrip() for i in FileHelper.get_file_content( os.path.join(self.module_set_copy_path, self.conf.mode), 'rb', method=True)] self.report_parser.select_rules(lines) if self.conf.select_rules: lines = [i.strip() for i in self.conf.select_rules.split(',')] unknown_rules = self.report_parser.check_rules(lines) if unknown_rules: log_message(settings.unknown_rules % '\n'.join(unknown_rules)) self.report_parser.select_rules(lines) self.run_scan_process() main_report = self.scanning_progress.get_output_data() self.prepare_xml_for_html() self.generate_html_or_text() self.update_xml_after_html_generated() self.copy_postupgrade_files() self.copy_preupgrade_scripts(self.module_set_copy_path) ConfigFilesHelper.copy_modified_config_files( settings.assessment_results_dir) # It prints out result in table format ScanningHelper.format_rules_to_table(main_report, "main contents") self.tar_ball_name = TarballHelper.tarball_result_dir(self.conf.tarball_name, self.conf.verbose) log_message("The tarball with results is stored in '%s' ." % self.tar_ball_name) log_message("The latest assessment is stored in the '%s' directory." % self.conf.assessment_results_dir) # pack all configuration files to tarball return 0
def upload_results(self): """upload tarball with results to frontend""" import xmlrpclib import socket url = "" if self.conf.upload is True: # lets try default configuration log_message('Specify the server where to upload the results.') log_message(settings.ui_command.format(self.conf.results)) return False else: if self.conf.upload[-1] == '/': url = self.conf.upload else: url = self.conf.upload + '/' try: proxy = xmlrpclib.ServerProxy(url) proxy.submit.ping() except Exception as ex: message = 'Can\'t connect to preupgrade assistant WEB-UI at %s.' \ '\n\nPlease ensure that package' \ ' preupgrade-assistant-ui has been installed on target' \ ' system and firewall is set up ' \ 'to allow connections on port 8099.' % url log_message(message) log_message(ex.__str__()) return False if not self.conf.results: tarball_results = TarballHelper.get_latest_tarball( settings.tarball_result_dir) else: tarball_results = self.conf.results if tarball_results is None or not os.path.exists(tarball_results): log_message("Can't determine what tarball to upload to the UI.", level=logging.ERROR) return False file_content = FileHelper.get_file_content(tarball_results, 'rb', False, False) binary = xmlrpclib.Binary(file_content) host = socket.gethostname() response = proxy.submit.submit_new({ 'data': binary, 'host': host, }) try: status = response['status'] except KeyError: log_message('Invalid response from the server.') log_message("Invalid response from the server: %s" % response, level=logging.ERROR) return False else: if status == 'OK': try: url = response['url'] except KeyError: log_message('The report submitted successfully.') else: log_message( 'The report submitted successfully. You can inspect it at %s.' % url) else: try: message = response['message'] log_message( 'The report not submitted. The server returned a message: ', message) log_message("The report status: %s (%s)" % (status, message), level=logging.ERROR) except KeyError: log_message( 'The report not submitted. The server returned a status: ', status) log_message("The report status: %s" % status, level=logging.ERROR) return False return True
def scan_system(self): """The function is used for scanning system with all steps.""" self._set_devel_mode() if int(self.prepare_scan_system()) != 0: return ReturnValues.SCENARIO if int(self.generate_report()) != 0: return ReturnValues.SCENARIO # Update source XML file in temporary directory self.content = os.path.join(self.assessment_dir, settings.content_file) self.openscap_helper.update_variables(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.content) try: self.report_parser = ReportParser(self.content) except IOError: log_message("The module {0} does not exist.".format(self.content)) return ReturnValues.SCENARIO if not self.conf.contents: version = SystemIdentification.get_assessment_version(self.conf.scan) if version is None: log_message("Your scan is in a wrong format %s." % version, level=logging.ERROR) log_message("It should be like 'RHEL6_7' for upgrade from RHEL 6->7.", level=logging.ERROR) return ReturnValues.SCENARIO self.report_parser.modify_platform_tag(version[0]) if self.conf.mode: try: lines = [i.rstrip() for i in FileHelper.get_file_content(os.path.join(self.assessment_dir, self.conf.mode), 'rb', method=True)] except IOError: return self.report_parser.select_rules(lines) if self.conf.select_rules: lines = [i.strip() for i in self.conf.select_rules.split(',')] unknown_rules = self.report_parser.check_rules(lines) if unknown_rules: log_message(settings.unknown_rules % '\n'.join(unknown_rules)) self.report_parser.select_rules(lines) self.run_scan_process() main_report = self.scanning_progress.get_output_data() # This function prepare XML and generate HTML self.prepare_xml_for_html() third_party_dir_name = self.get_third_party_dir(self.assessment_dir) if os.path.exists(third_party_dir_name): self.run_third_party_modules(third_party_dir_name) self.copy_preupgrade_scripts(self.assessment_dir) ConfigFilesHelper.copy_modified_config_files(settings.assessment_results_dir) # It prints out result in table format ScanningHelper.format_rules_to_table(main_report, "main contents") for target, report in six.iteritems(self.report_data): ScanningHelper.format_rules_to_table(report, "3rdparty content " + target) self.tar_ball_name = TarballHelper.tarball_result_dir(self.conf.tarball_name, self.conf.assessment_results_dir, self.conf.verbose) log_message("The tarball with results is stored in '%s' ." % self.tar_ball_name) log_message("The latest assessment is stored in the '%s' directory." % self.conf.assessment_results_dir) # pack all configuration files to tarball return 0
def upload_results(self, tarball_path=None): """upload tarball with results to frontend""" import xmlrpclib import socket url = "" if self.conf.upload is True: # lets try default configuration log_message('Specify the server where to upload the results.') log_message(settings.ui_command.format(self.conf.results)) return False else: if self.conf.upload[-1] == '/': url = self.conf.upload else: url = self.conf.upload + '/' message = "" try: proxy = xmlrpclib.ServerProxy(url) proxy.submit.ping() except Exception as ex: message = 'Can\'t connect to preupgrade assistant WEB-UI at %s.\n\n' \ 'Please ensure that package preupgrade-assistant-ui ' \ 'has been installed on target system and firewall is set up ' \ 'to allow connections on port 8099.' % url log_message(message) log_message(ex.__str__()) return False if not self.conf.results: tarball_results = TarballHelper.get_latest_tarball(settings.tarball_result_dir) else: tarball_results = self.conf.results if tarball_results is None or not os.path.exists(tarball_results): return False file_content = FileHelper.get_file_content(tarball_results, 'rb', False, False) binary = xmlrpclib.Binary(file_content) host = socket.gethostname() response = proxy.submit.submit_new({ 'data': binary, 'host': host, }) try: status = response['status'] except KeyError: log_message('Invalid response from the server.') log_message("Invalid response from the server: %s" % response, level=logging.ERROR) else: if status == 'OK': try: url = response['url'] except KeyError: log_message('The report submitted successfully.') else: log_message('The report submitted successfully. You can inspect it at %s.' % url) else: try: message = response['message'] log_message('The report not submitted. The server returned a message: ', message) log_message("The report status: %s (%s)" % (status, message), level=logging.ERROR) except KeyError: log_message('The report not submitted. The server returned a status: ', status) log_message("The report status: %s" % status, level=logging.ERROR)
def scan_system(self): """The function is used for scanning system with all steps.""" self._set_devel_mode() if int(self.prepare_scan_system()) != 0: return ReturnValues.SCENARIO if int(self.generate_report()) != 0: return ReturnValues.SCENARIO # Update source XML file in temporary directory self.content = os.path.join(self.assessment_dir, settings.content_file) self.openscap_helper.update_variables(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.content) try: self.report_parser = ReportParser(self.content) except IOError: log_message("The module {0} does not exist.".format(self.content)) return ReturnValues.SCENARIO if not self.conf.contents: version = SystemIdentification.get_assessment_version( self.conf.scan) if version is None: log_message("Your scan is in a wrong format %s." % version, level=logging.ERROR) log_message( "It should be like 'RHEL6_7' for upgrade from RHEL 6->7.", level=logging.ERROR) return ReturnValues.SCENARIO self.report_parser.modify_platform_tag(version[0]) if self.conf.mode: try: lines = [ i.rstrip() for i in FileHelper.get_file_content(os.path.join( self.assessment_dir, self.conf.mode), 'rb', method=True) ] except IOError: return self.report_parser.select_rules(lines) if self.conf.select_rules: lines = [i.strip() for i in self.conf.select_rules.split(',')] unknown_rules = self.report_parser.check_rules(lines) if unknown_rules: log_message(settings.unknown_rules % '\n'.join(unknown_rules)) self.report_parser.select_rules(lines) self.run_scan_process() main_report = self.scanning_progress.get_output_data() # This function prepare XML and generate HTML self.prepare_xml_for_html() third_party_dir_name = self.get_third_party_dir(self.assessment_dir) if os.path.exists(third_party_dir_name): self.run_third_party_modules(third_party_dir_name) self.copy_preupgrade_scripts(self.assessment_dir) ConfigFilesHelper.copy_modified_config_files( settings.assessment_results_dir) # It prints out result in table format ScanningHelper.format_rules_to_table(main_report, "main contents") for target, report in six.iteritems(self.report_data): ScanningHelper.format_rules_to_table(report, "3rdparty content " + target) self.tar_ball_name = TarballHelper.tarball_result_dir( self.conf.tarball_name, self.conf.assessment_results_dir, self.conf.verbose) log_message("The tarball with results is stored in '%s' ." % self.tar_ball_name) log_message("The latest assessment is stored in the '%s' directory." % self.conf.assessment_results_dir) # pack all configuration files to tarball return 0