def setUp(self): ks_template = settings.KS_TEMPLATE self.WORKING_DIR = tempfile.mkdtemp(prefix='preupg') if os.path.isdir(self.WORKING_DIR): shutil.rmtree(self.WORKING_DIR) os.makedirs(self.WORKING_DIR) settings.KS_DIR = self.WORKING_DIR shutil.copyfile( os.path.join(os.getcwd(), 'data', 'templates', ks_template), os.path.join(self.WORKING_DIR, ks_template)) conf = {"y": True} dc = DummyConfKickstart(**conf) cli_kickstart = CLIKickstart(["--assumeyes"]) conf = ConfKickstart(cli_kickstart.opts, dc, cli_kickstart) self.kg = KickstartGenerator(conf, self.WORKING_DIR, settings.KS_FILENAME) self.kg.collect_data()
def setUp(self): ks_template = settings.KS_TEMPLATE self.WORKING_DIR = tempfile.mkdtemp(prefix='preupg') if os.path.isdir(self.WORKING_DIR): shutil.rmtree(self.WORKING_DIR) os.makedirs(self.WORKING_DIR) settings.KS_DIR = self.WORKING_DIR shutil.copyfile(os.path.join(os.getcwd(), 'data', 'templates', ks_template), os.path.join(self.WORKING_DIR, ks_template)) conf = {"y": True} dc = DummyConfKickstart(**conf) cli_kickstart = CLIKickstart(["--assumeyes"]) conf = ConfKickstart(cli_kickstart.opts, dc, cli_kickstart) self.kg = KickstartGenerator(conf, self.WORKING_DIR, settings.KS_FILENAME) self.kg.collect_data()
def run(self): """run analysis""" version_msg = "Preupgrade Assistant version: %s" % VERSION if self.conf.version: print(version_msg) return 0 logger_debug.debug(version_msg) if self.conf.list_contents_set: for dir_name, dummy_content in iter( get_installed_module_sets(self.conf.source_dir).items()): log_message("%s" % dir_name) return 0 if self.conf.riskcheck: result_xml_path = os.path.join(settings.assessment_results_dir, settings.xml_result_name) if not os.path.exists(result_xml_path): log_message("System assessment needs to be performed first.") return ReturnValues.PREUPG_BEFORE_RISKCHECK return XccdfHelper.check_inplace_risk(result_xml_path, self.conf.verbose) if self.conf.upload and self.conf.results: if not self.upload_results(): return ReturnValues.SEND_REPORT_TO_UI return 0 if self.conf.cleanup: if not self.executed_under_root(): return ReturnValues.ROOT self.clean_preupgrade_environment() return 0 if self.conf.text: # Test whether w3m, lynx and elinks packages are installed found = False for pkg in SystemIdentification.get_convertors(): if xml_manager.get_package_version(pkg): self.text_convertor = pkg found = True break if not found: log_message( settings.converter_message.format(' '.join( SystemIdentification.get_convertors()))) return ReturnValues.MISSING_TEXT_CONVERTOR return_code = self.determine_module_set_location() if return_code: return return_code self.determine_module_set_copy_location() if self.conf.list_rules: rules = [ x for x in XccdfHelper.get_list_rules(self.all_xccdf_xml_path) ] log_message('\n'.join(rules)) return 0 if self.conf.mode and self.conf.select_rules: log_message(settings.options_not_allowed) return ReturnValues.MODE_SELECT_RULES # If force option is not mentioned and user selects NO then exit if not self.conf.force: text = "" if self.conf.dst_arch: correct_option = [ x for x in settings.migration_options if self.conf.dst_arch == x ] if not correct_option: sys.stderr.write( "Error: Specify correct value for --dst-arch" " option.\nValid are: %s.\n" % ", ".join(settings.migration_options)) return ReturnValues.INVALID_CLI_OPTION if SystemIdentification.get_arch() == "i386" or \ SystemIdentification.get_arch() == "i686": if not self.conf.dst_arch: text = '\n' + settings.migration_text logger_debug.debug("Architecture '%s'. Text '%s'.", SystemIdentification.get_arch(), text) if not show_message(settings.warning_text + text): # User does not want to continue return ReturnValues.USER_ABORT self.openscap_helper = OpenSCAPHelper(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.all_xccdf_xml_path) if not self.executed_under_root(): return ReturnValues.ROOT if not os.path.exists(settings.openscap_binary): log_message("Oscap with SCE enabled is not installed") return ReturnValues.MISSING_OPENSCAP if not os.access(settings.openscap_binary, os.X_OK): log_message("Oscap with SCE %s is not executable" % settings.openscap_binary) return ReturnValues.MISSING_OPENSCAP self.execution_dir = os.getcwd() os.chdir("/tmp") retval = self.scan_system() if retval != 0: return retval retval = self.summary_report(self.tar_ball_name) self.common.copy_common_files() KickstartGenerator.kickstart_scripts() FileHelper.remove_home_issues() if self.conf.upload: if not self.upload_results(): retval = ReturnValues.SEND_REPORT_TO_UI os.chdir(self.execution_dir) return retval
class TestKickstartPartitioning(base.TestCase): kickstart = None dir_name = None WORKING_DIR = '' lsblk_list = 'lsblk_list' vgs_list = 'vgs_list' lvdisplay = 'lvdisplay' firewall_cmd = 'firewall-cmd' users = 'Users' groups = 'Groups' kg = None def setUp(self): ks_template = settings.KS_TEMPLATE self.WORKING_DIR = tempfile.mkdtemp(prefix='preupg') if os.path.isdir(self.WORKING_DIR): shutil.rmtree(self.WORKING_DIR) os.makedirs(self.WORKING_DIR) settings.KS_DIR = self.WORKING_DIR shutil.copyfile( os.path.join(os.getcwd(), 'data', 'templates', ks_template), os.path.join(self.WORKING_DIR, ks_template)) conf = {"y": True} dc = DummyConfKickstart(**conf) cli_kickstart = CLIKickstart(["--assumeyes"]) conf = ConfKickstart(cli_kickstart.opts, dc, cli_kickstart) self.kg = KickstartGenerator(conf, self.WORKING_DIR, settings.KS_FILENAME) self.kg.collect_data() def test_lvm_partitions(self): lvm_lsblk = get_full_path('lvm_lsblk_list') vgs_list = get_full_path('vgs_list') lvdisplay = get_full_path('lvdisplay') shutil.copyfile(lvm_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) shutil.copyfile(vgs_list, os.path.join(self.WORKING_DIR, self.vgs_list)) shutil.copyfile(lvdisplay, os.path.join(self.WORKING_DIR, self.lvdisplay)) self.kg.generate() expected_layout = [ 'clearpart --all', 'part /boot --ondisk=vda --size=500', 'part pv.01 --size=9000', 'volgroup vg_rhel67 --pesize=4096 pv.01', 'logvol / --size=8000 --name=lv_root --vgname=vg_rhel67', 'logvol swap --size=1000 --name=lv_swap --vgname=vg_rhel67' ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_lvm_crypt_partitions(self): lvm_lsblk = get_full_path('lvm_crypt_lsblk_list') vgs_list = get_full_path('vgs_list') lvdisplay = get_full_path('lvdisplay') shutil.copyfile(lvm_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) shutil.copyfile(vgs_list, os.path.join(self.WORKING_DIR, self.vgs_list)) shutil.copyfile(lvdisplay, os.path.join(self.WORKING_DIR, self.lvdisplay)) self.kg.generate() expected_layout = [ 'clearpart --all', 'part /boot --ondisk=vda --size=500', 'part pv.01 --size=9000', 'volgroup vg_rhel67 --pesize=4096 pv.01', 'logvol / --size=8000 --name=lv_root --vgname=vg_rhel67', 'logvol swap --size=1000 --name=lv_swap --vgname=vg_rhel67' ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_crypt_partitions(self): lvm_lsblk = get_full_path('crypt_lsblk_list') shutil.copyfile(lvm_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = [ 'clearpart --all', 'part / --size=3000 --encrypted', 'part /boot --ondisk=vda --size=200', 'part swap --ondisk=vda --size=2000' ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_raid_crypt_partitions(self): raid_lsblk = get_full_path('raid_lsblk_list') shutil.copyfile(raid_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = [ 'clearpart --all', 'part /boot --ondisk=sda --size=200', 'part swap --ondisk=sda --size=1000', 'part raid.00001 --grow --size=2048', 'part raid.00002 --grow --size=2048', 'part raid.00003 --grow --size=2048', 'part raid.00004 --grow --size=2048', 'raid / --device=md1 --level=1 raid.00001 raid.00002', 'raid /home --device=md0 --level=0 --encrypted raid.00003 raid.00004' ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_raid_second_partitions(self): raid_lsblk = get_full_path('raid_lsblk_second_list') shutil.copyfile(raid_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = [ 'clearpart --all', 'part /boot --ondisk=vda --size=1000 ', 'part swap --ondisk=vdb --size=1000', 'part raid.00001 --grow --size=2048', 'part raid.00002 --grow --size=2048', 'raid / --device=md0 --level=0 raid.00001 raid.00002', ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_native_partitioning(self): lsblk_native_lsblk = get_full_path('lsblk_native_list') shutil.copyfile(lsblk_native_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = [ 'clearpart --all', 'part / --ondisk=vda --size=5000', 'part /boot --ondisk=vda --size=200', 'part /home --ondisk=vda --size=2000', 'part swap --ondisk=vda --size=1000', ] for layout in expected_layout: self.assertTrue(layout.strip() in self.kg.ks.handler.__str__()) def test_firewall_rules(self): firewall_cmd = get_full_path(self.firewall_cmd) shutil.copyfile(firewall_cmd, os.path.join(self.WORKING_DIR, self.firewall_cmd)) self.kg.generate() expected_layout = ['firewall --enabled --service=foo,bar,test'] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_user_and_groups(self): files = ['Users', 'Groups', 'setup_passwd', 'uidgid'] for f in files: shutil.copyfile(get_full_path(f), os.path.join(self.WORKING_DIR, f)) self.kg.generate() expected_layout = [ 'group --name=foobar --gid=500', 'group --name=testfoo --gid=506', 'group --name=preupg --gid=501', 'user --homedir=/home/foobar --name=foobar --shell=/bin/bash --uid=500 --gid=500', 'user --homedir=/ --name=testfoo --shell=/sbin/nologin --uid=506 --gid=506', 'user --homedir=/home/preupg --name=preupg --shell=/sbin/nologin --uid=501 --gid=501' ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def tearDown(self): pass
def run(self): """run analysis""" version_msg = "Preupgrade Assistant version: %s" % VERSION if self.conf.version: print (version_msg) return 0 logger_debug.debug(version_msg) if self.conf.list_contents_set: for dir_name, dummy_content in six.iteritems(list_contents(self.conf.source_dir)): log_message("%s" % dir_name) return 0 if not self.conf.scan and not self.conf.contents and not self.conf.list_rules: ret_val = self._check_available_contents() if int(ret_val) != 0: return ret_val if self.conf.list_rules: ret_val = self._check_available_contents() if int(ret_val) != 0: return ret_val rules = [self.conf.scan + ':' + x for x in XccdfHelper.get_list_rules(self.conf.scan)] log_message('\n'.join(rules)) return 0 if self.conf.upload: if not self.upload_results(): return ReturnValues.SEND_REPORT_TO_UI return 0 if self.conf.mode and self.conf.select_rules: log_message(settings.options_not_allowed) return ReturnValues.MODE_SELECT_RULES if not self.conf.riskcheck and not self.conf.cleanup and not self.conf.kickstart: # If force option is not mentioned and user select NO then exits if not self.conf.force: text = "" if self.conf.dst_arch: correct_option = [x for x in settings.migration_options if self.conf.dst_arch == x] if not correct_option: log_message("Specify the correct --dst-arch option.") log_message("There are '%s' or '%s' available." % (settings.migration_options[0], settings.migration_options[1])) return ReturnValues.RISK_CLEANUP_KICKSTART if SystemIdentification.get_arch() == "i386" or SystemIdentification.get_arch() == "i686": if not self.conf.dst_arch: text = '\n' + settings.migration_text logger_debug.debug("Architecture '%s'. Text '%s'.", SystemIdentification.get_arch(), text) if not show_message(settings.warning_text + text): # We do not want to continue return ReturnValues.RISK_CLEANUP_KICKSTART if self.conf.text: # Test whether w3m, lynx and elinks packages are installed found = False for pkg in SystemIdentification.get_convertors(): if xml_manager.get_package_version(pkg): self.text_convertor = pkg found = True break if not found: log_message(settings.converter_message.format(' '.join(SystemIdentification.get_convertors()))) return ReturnValues.MISSING_TEXT_CONVERTOR if os.geteuid() != 0: print("Need to be root", end="\n") if not self.conf.debug: return ReturnValues.ROOT if self.conf.cleanup: self.clean_preupgrade_environment() return 0 self.openscap_helper = OpenSCAPHelper(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.content) if self.conf.riskcheck: if not os.path.exists(self.openscap_helper.get_default_xml_result_path()): log_message("The 'preupg' command was not run yet. Run it to check for possible risks.") return ReturnValues.PREUPG_BEFORE_KICKSTART return_val = XccdfHelper.check_inplace_risk(self.openscap_helper.get_default_xml_result_path(), self.conf.verbose) return return_val if self.conf.kickstart: if not os.path.exists(self.openscap_helper.get_default_xml_result_path()): log_message("The 'preupg' command was not run yet. Run it before the Kickstart generation.") return ReturnValues.PREUPG_BEFORE_KICKSTART kg = KickstartGenerator(self.conf, settings.KS_DIR, settings.KS_PATH) kg.main() return 0 if self.conf.scan: self.content = os.path.join(self.conf.source_dir, self.conf.scan, settings.content_file) if self.conf.scan.startswith("/"): log_message('Specify the correct upgrade path parameter like -s RHEL6_7') log_message("Upgrade path is provided by the 'preupg --list' command.") self._check_available_contents() log_message("The available upgrade paths: '%s'" % '\n'.join(self.list_scans)) return ReturnValues.SCENARIO if not os.path.isdir(os.path.join(self.conf.source_dir, self.conf.scan)): log_message('Specify the correct upgrade path parameter like -s RHEL6_7') self._check_available_contents() log_message("Upgrade path is provided by the 'preupg --list' command.") log_message("The available upgrade paths: '%s'" % '\n'.join(self.list_scans)) return ReturnValues.SCENARIO if self.conf.contents: self.content = os.path.join(os.getcwd(), self.conf.contents) # From content path like content-users/RHEL6_7 we need # to get content-users dir content_dir = self.conf.contents[:self.conf.contents.find(self.get_scenario())] self.conf.source_dir = os.path.join(os.getcwd(), content_dir) self.common = Common(self.conf) if not self.conf.skip_common: if not self.common.common_results(): return ReturnValues.SCRIPT_TXT_MISSING if self.conf.scan or self.conf.contents: if not os.path.exists(settings.openscap_binary): log_message("Oscap with SCE enabled is not installed") return ReturnValues.MISSING_OPENSCAP if not os.access(settings.openscap_binary, os.X_OK): log_message("Oscap with SCE %s is not executable" % settings.openscap_binary) return ReturnValues.MISSING_OPENSCAP current_dir = os.getcwd() os.chdir("/tmp") retval = self.scan_system() if int(retval) != 0: return retval self.summary_report(self.tar_ball_name) self.common.copy_common_files() KickstartGenerator.kickstart_scripts() FileHelper.remove_home_issues() if self.conf.upload: self.upload_results(self.tar_ball_name) os.chdir(current_dir) return self.report_return_value log_message('Nothing to do. Give me a task, please.') self.conf.settings[2].parser.print_help() return 0
def run(self): """run analysis""" version_msg = "Preupgrade Assistant version: %s" % VERSION if self.conf.version: print (version_msg) return 0 logger_debug.debug(version_msg) if self.conf.list_contents_set: for dir_name, dummy_content in iter(get_installed_module_sets( self.conf.source_dir).items()): log_message("%s" % dir_name) return 0 if self.conf.riskcheck: result_xml_path = os.path.join(settings.assessment_results_dir, settings.xml_result_name) if not os.path.exists(result_xml_path): log_message("System assessment needs to be performed first.") return ReturnValues.PREUPG_BEFORE_RISKCHECK return XccdfHelper.check_inplace_risk(result_xml_path, self.conf.verbose) if self.conf.upload and self.conf.results: if not self.upload_results(): return ReturnValues.SEND_REPORT_TO_UI return 0 if self.conf.cleanup: if not self.executed_under_root(): return ReturnValues.ROOT self.clean_preupgrade_environment() return 0 if self.conf.text: # Test whether w3m, lynx and elinks packages are installed found = False for pkg in SystemIdentification.get_convertors(): if xml_manager.get_package_version(pkg): self.text_convertor = pkg found = True break if not found: log_message(settings.converter_message.format( ' '.join(SystemIdentification.get_convertors()))) return ReturnValues.MISSING_TEXT_CONVERTOR return_code = self.determine_module_set_location() if return_code: return return_code self.determine_module_set_copy_location() if self.conf.list_rules: rules = [x for x in XccdfHelper.get_list_rules(self.all_xccdf_xml_path)] log_message('\n'.join(rules)) return 0 if self.conf.mode and self.conf.select_rules: log_message(settings.options_not_allowed) return ReturnValues.MODE_SELECT_RULES # If force option is not mentioned and user selects NO then exit if not self.conf.force: text = "" if self.conf.dst_arch: correct_option = [x for x in settings.migration_options if self.conf.dst_arch == x] if not correct_option: sys.stderr.write( "Error: Specify correct value for --dst-arch" " option.\nValid are: %s.\n" % ", ".join(settings.migration_options) ) return ReturnValues.INVALID_CLI_OPTION if SystemIdentification.get_arch() == "i386" or \ SystemIdentification.get_arch() == "i686": if not self.conf.dst_arch: text = '\n' + settings.migration_text logger_debug.debug("Architecture '%s'. Text '%s'.", SystemIdentification.get_arch(), text) if not show_message(settings.warning_text + text): # User does not want to continue return ReturnValues.USER_ABORT self.openscap_helper = OpenSCAPHelper(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.all_xccdf_xml_path) if not self.executed_under_root(): return ReturnValues.ROOT if not os.path.exists(settings.openscap_binary): log_message("Oscap with SCE enabled is not installed") return ReturnValues.MISSING_OPENSCAP if not os.access(settings.openscap_binary, os.X_OK): log_message("Oscap with SCE %s is not executable" % settings.openscap_binary) return ReturnValues.MISSING_OPENSCAP self.execution_dir = os.getcwd() os.chdir("/tmp") retval = self.scan_system() if retval != 0: return retval retval = self.summary_report(self.tar_ball_name) self.common.copy_common_files() KickstartGenerator.kickstart_scripts() FileHelper.remove_home_issues() if self.conf.upload: if not self.upload_results(): retval = ReturnValues.SEND_REPORT_TO_UI os.chdir(self.execution_dir) return retval
class TestKickstartPartitioning(base.TestCase): kickstart = None dir_name = None WORKING_DIR = '' lsblk_list = 'lsblk_list' vgs_list = 'vgs_list' lvdisplay = 'lvdisplay' firewall_cmd = 'firewall-cmd' users = 'Users' groups = 'Groups' kg = None def setUp(self): ks_template = settings.KS_TEMPLATE self.WORKING_DIR = tempfile.mkdtemp(prefix='preupg') if os.path.isdir(self.WORKING_DIR): shutil.rmtree(self.WORKING_DIR) os.makedirs(self.WORKING_DIR) settings.KS_DIR = self.WORKING_DIR shutil.copyfile(os.path.join(os.getcwd(), 'data', 'templates', ks_template), os.path.join(self.WORKING_DIR, ks_template)) conf = {"y": True} dc = DummyConfKickstart(**conf) cli_kickstart = CLIKickstart(["--assumeyes"]) conf = ConfKickstart(cli_kickstart.opts, dc, cli_kickstart) self.kg = KickstartGenerator(conf, self.WORKING_DIR, settings.KS_FILENAME) self.kg.collect_data() def test_lvm_partitions(self): lvm_lsblk = get_full_path('lvm_lsblk_list') vgs_list = get_full_path('vgs_list') lvdisplay = get_full_path('lvdisplay') shutil.copyfile(lvm_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) shutil.copyfile(vgs_list, os.path.join(self.WORKING_DIR, self.vgs_list)) shutil.copyfile(lvdisplay, os.path.join(self.WORKING_DIR, self.lvdisplay)) self.kg.generate() expected_layout = ['clearpart --all', 'part /boot --ondisk=vda --size=500', 'part pv.01 --size=9000', 'volgroup vg_rhel67 --pesize=4096 pv.01', 'logvol / --size=8000 --name=lv_root --vgname=vg_rhel67', 'logvol swap --size=1000 --name=lv_swap --vgname=vg_rhel67'] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_lvm_crypt_partitions(self): lvm_lsblk = get_full_path('lvm_crypt_lsblk_list') vgs_list = get_full_path('vgs_list') lvdisplay = get_full_path('lvdisplay') shutil.copyfile(lvm_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) shutil.copyfile(vgs_list, os.path.join(self.WORKING_DIR, self.vgs_list)) shutil.copyfile(lvdisplay, os.path.join(self.WORKING_DIR, self.lvdisplay)) self.kg.generate() expected_layout = ['clearpart --all', 'part /boot --ondisk=vda --size=500', 'part pv.01 --size=9000', 'volgroup vg_rhel67 --pesize=4096 pv.01', 'logvol / --size=8000 --name=lv_root --vgname=vg_rhel67', 'logvol swap --size=1000 --name=lv_swap --vgname=vg_rhel67'] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_crypt_partitions(self): lvm_lsblk = get_full_path('crypt_lsblk_list') shutil.copyfile(lvm_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = ['clearpart --all', 'part / --size=3000 --encrypted', 'part /boot --ondisk=vda --size=200', 'part swap --ondisk=vda --size=2000'] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_raid_crypt_partitions(self): raid_lsblk = get_full_path('raid_lsblk_list') shutil.copyfile(raid_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = ['clearpart --all', 'part /boot --ondisk=sda --size=200', 'part swap --ondisk=sda --size=1000', 'part raid.00001 --grow --size=2048', 'part raid.00002 --grow --size=2048', 'part raid.00003 --grow --size=2048', 'part raid.00004 --grow --size=2048', 'raid / --device=md1 --level=1 raid.00001 raid.00002', 'raid /home --device=md0 --level=0 --encrypted raid.00003 raid.00004' ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_raid_second_partitions(self): raid_lsblk = get_full_path('raid_lsblk_second_list') shutil.copyfile(raid_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = ['clearpart --all', 'part /boot --ondisk=vda --size=1000 ', 'part swap --ondisk=vdb --size=1000', 'part raid.00001 --grow --size=2048', 'part raid.00002 --grow --size=2048', 'raid / --device=md0 --level=0 raid.00001 raid.00002', ] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_native_partitioning(self): lsblk_native_lsblk = get_full_path('lsblk_native_list') shutil.copyfile(lsblk_native_lsblk, os.path.join(self.WORKING_DIR, self.lsblk_list)) self.kg.generate() expected_layout = ['clearpart --all', 'part / --ondisk=vda --size=5000', 'part /boot --ondisk=vda --size=200', 'part /home --ondisk=vda --size=2000', 'part swap --ondisk=vda --size=1000', ] for layout in expected_layout: self.assertTrue(layout.strip() in self.kg.ks.handler.__str__()) def test_firewall_rules(self): firewall_cmd = get_full_path(self.firewall_cmd) shutil.copyfile(firewall_cmd, os.path.join(self.WORKING_DIR, self.firewall_cmd)) self.kg.generate() expected_layout = ['firewall --enabled --service=foo,bar,test'] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def test_user_and_groups(self): files = ['Users', 'Groups', 'setup_passwd', 'uidgid'] for f in files: shutil.copyfile(get_full_path(f), os.path.join(self.WORKING_DIR, f)) self.kg.generate() expected_layout = ['group --name=foobar --gid=500', 'group --name=testfoo --gid=506', 'group --name=preupg --gid=501', 'user --homedir=/home/foobar --name=foobar --shell=/bin/bash --uid=500 --gid=500', 'user --homedir=/ --name=testfoo --shell=/sbin/nologin --uid=506 --gid=506', 'user --homedir=/home/preupg --name=preupg --shell=/sbin/nologin --uid=501 --gid=501'] for layout in expected_layout: self.assertTrue(layout.strip(), self.kg.ks.handler.__str__()) def tearDown(self): pass
def run(self): """run analysis""" version_msg = "Preupgrade Assistant version: %s" % VERSION if self.conf.version: print(version_msg) return 0 logger_debug.debug(version_msg) if self.conf.list_contents_set: for dir_name, dummy_content in six.iteritems( list_contents(self.conf.source_dir)): log_message("%s" % dir_name) return 0 if not self.conf.scan and not self.conf.contents and not self.conf.list_rules: ret_val = self._check_available_contents() if int(ret_val) != 0: return ret_val if self.conf.list_rules: ret_val = self._check_available_contents() if int(ret_val) != 0: return ret_val rules = [ self.conf.scan + ':' + x for x in XccdfHelper.get_list_rules(self.conf.scan) ] log_message('\n'.join(rules)) return 0 if self.conf.upload: if not self.upload_results(): return ReturnValues.SEND_REPORT_TO_UI return 0 if self.conf.mode and self.conf.select_rules: log_message(settings.options_not_allowed) return ReturnValues.MODE_SELECT_RULES if not self.conf.riskcheck and not self.conf.cleanup and not self.conf.kickstart: # If force option is not mentioned and user select NO then exits if not self.conf.force: text = "" if self.conf.dst_arch: correct_option = [ x for x in settings.migration_options if self.conf.dst_arch == x ] if not correct_option: log_message("Specify the correct --dst-arch option.") log_message("There are '%s' or '%s' available." % (settings.migration_options[0], settings.migration_options[1])) return ReturnValues.RISK_CLEANUP_KICKSTART if SystemIdentification.get_arch( ) == "i386" or SystemIdentification.get_arch() == "i686": if not self.conf.dst_arch: text = '\n' + settings.migration_text logger_debug.debug("Architecture '%s'. Text '%s'.", SystemIdentification.get_arch(), text) if not show_message(settings.warning_text + text): # We do not want to continue return ReturnValues.RISK_CLEANUP_KICKSTART if self.conf.text: # Test whether w3m, lynx and elinks packages are installed found = False for pkg in SystemIdentification.get_convertors(): if xml_manager.get_package_version(pkg): self.text_convertor = pkg found = True break if not found: log_message( settings.converter_message.format(' '.join( SystemIdentification.get_convertors()))) return ReturnValues.MISSING_TEXT_CONVERTOR if os.geteuid() != 0: print("Need to be root", end="\n") if not self.conf.debug: return ReturnValues.ROOT if self.conf.cleanup: self.clean_preupgrade_environment() return 0 self.openscap_helper = OpenSCAPHelper(self.conf.assessment_results_dir, self.conf.result_prefix, self.conf.xml_result_name, self.conf.html_result_name, self.content) if self.conf.riskcheck: if not os.path.exists( self.openscap_helper.get_default_xml_result_path()): log_message( "The 'preupg' command was not run yet. Run it to check for possible risks." ) return ReturnValues.PREUPG_BEFORE_KICKSTART return_val = XccdfHelper.check_inplace_risk( self.openscap_helper.get_default_xml_result_path(), self.conf.verbose) return return_val if self.conf.kickstart: if not os.path.exists( self.openscap_helper.get_default_xml_result_path()): log_message( "The 'preupg' command was not run yet. Run it before the Kickstart generation." ) return ReturnValues.PREUPG_BEFORE_KICKSTART kg = KickstartGenerator(self.conf, settings.KS_DIR, settings.KS_PATH) kg.main() return 0 if self.conf.scan: self.content = os.path.join(self.conf.source_dir, self.conf.scan, settings.content_file) if self.conf.scan.startswith("/"): log_message( 'Specify the correct upgrade path parameter like -s RHEL6_7' ) log_message( "Upgrade path is provided by the 'preupg --list' command.") self._check_available_contents() log_message("The available upgrade paths: '%s'" % '\n'.join(self.list_scans)) return ReturnValues.SCENARIO if not os.path.isdir( os.path.join(self.conf.source_dir, self.conf.scan)): log_message( 'Specify the correct upgrade path parameter like -s RHEL6_7' ) self._check_available_contents() log_message( "Upgrade path is provided by the 'preupg --list' command.") log_message("The available upgrade paths: '%s'" % '\n'.join(self.list_scans)) return ReturnValues.SCENARIO if self.conf.contents: self.content = os.path.join(os.getcwd(), self.conf.contents) # From content path like content-users/RHEL6_7 we need # to get content-users dir content_dir = self.conf.contents[:self.conf.contents. find(self.get_scenario())] self.conf.source_dir = os.path.join(os.getcwd(), content_dir) self.common = Common(self.conf) if not self.conf.skip_common: if not self.common.common_results(): return ReturnValues.SCRIPT_TXT_MISSING if self.conf.scan or self.conf.contents: if not os.path.exists(settings.openscap_binary): log_message("Oscap with SCE enabled is not installed") return ReturnValues.MISSING_OPENSCAP if not os.access(settings.openscap_binary, os.X_OK): log_message("Oscap with SCE %s is not executable" % settings.openscap_binary) return ReturnValues.MISSING_OPENSCAP current_dir = os.getcwd() os.chdir("/tmp") retval = self.scan_system() if int(retval) != 0: return retval self.summary_report(self.tar_ball_name) self.common.copy_common_files() KickstartGenerator.kickstart_scripts() FileHelper.remove_home_issues() if self.conf.upload: self.upload_results(self.tar_ball_name) os.chdir(current_dir) return self.report_return_value log_message('Nothing to do. Give me a task, please.') self.conf.settings[2].parser.print_help() return 0