|
| 1 | +#SPDX-License-Identifier: GPL-2.0-only |
| 2 | +# |
| 3 | +# (C) Copyright IBM Corp. 2020 |
| 4 | +# Author: Seeteena Thoufeek <[email protected]> |
| 5 | + |
| 6 | +"""Plugin to repair the rsct configuration check""" |
| 7 | + |
| 8 | + |
| 9 | +from servicereportpkg.repair.plugins import RepairPlugin |
| 10 | +from servicereportpkg.check import Notes |
| 11 | +from servicereportpkg.utils import execute_command |
| 12 | +from servicereportpkg.validate.schemes.schemes import PSeriesScheme |
| 13 | +from servicereportpkg.utils import install_package |
| 14 | + |
| 15 | + |
| 16 | +class RSCTRepair(RepairPlugin, PSeriesScheme): |
| 17 | + """Plugin to repair the RSCT configuration check""" |
| 18 | + |
| 19 | + def __init__(self): |
| 20 | + RepairPlugin.__init__(self) |
| 21 | + self.name = 'RSCT' |
| 22 | + self.optional = True |
| 23 | + |
| 24 | + def enable_subsystem(self, plugin_obj, check): |
| 25 | + """Enables the subsystem if not active""" |
| 26 | + |
| 27 | + subsys_list = check.get_service() |
| 28 | + for subsystem in subsys_list: |
| 29 | + subsystem_status = subsystem[1] |
| 30 | + if subsystem_status is False: |
| 31 | + command = ["startsrc", "-s", subsystem[0]] |
| 32 | + execute_command(command) |
| 33 | + re_check = plugin_obj.check_rsct_subsystem_check() |
| 34 | + if re_check.get_status(): |
| 35 | + self.log.debug("Subsystems active") |
| 36 | + check.set_status(True) |
| 37 | + check.set_note(Notes.FIXED) |
| 38 | + else: |
| 39 | + self.log.debug("Subsystems not active") |
| 40 | + check.set_note(Notes.FAIL_TO_FIX) |
| 41 | + |
| 42 | + def fix_rsct_package(self, plugin_obj, check): |
| 43 | + """fix rsct package""" |
| 44 | + |
| 45 | + self.log.info("RSCT package repair") |
| 46 | + pkg_list = check.get_package_name() |
| 47 | + for package in pkg_list: |
| 48 | + install_package(package[0]) |
| 49 | + re_check = plugin_obj.check_rsct_package_check() |
| 50 | + if re_check.get_status(): |
| 51 | + check.set_status(True) |
| 52 | + check.set_note(Notes.FIXED) |
| 53 | + else: |
| 54 | + check.set_note(Notes.FAIL_TO_FIX) |
| 55 | + |
| 56 | + def fix_rsct_install_path(self, plugin_obj, check): |
| 57 | + """Fix rsct install path""" |
| 58 | + |
| 59 | + re_check = plugin_obj.check_rsct_installation_path() |
| 60 | + if re_check.get_status(): |
| 61 | + check.set_status(True) |
| 62 | + check.set_note(Notes.FIXED) |
| 63 | + else: |
| 64 | + check.set_note(Notes.FAIL_TO_FIX) |
| 65 | + |
| 66 | + def repair(self, plugin_obj, checks): |
| 67 | + """Repair rsct subsystem checks""" |
| 68 | + |
| 69 | + self.log.info("RSCT Subsystem Repair") |
| 70 | + check_dir = {} |
| 71 | + for check in checks: |
| 72 | + check_dir[check.get_name()] = check |
| 73 | + |
| 74 | + rsct_package_check = check_dir["RSCT package check"] |
| 75 | + self.log.debug("package_check: %s", rsct_package_check.get_name()) |
| 76 | + if not rsct_package_check.get_status(): |
| 77 | + rsct_power_repo_check = \ |
| 78 | + check_dir["IBM Power Repo Package Check"] |
| 79 | + self.log.debug("rsct_power_repo_check %s", |
| 80 | + rsct_power_repo_check.get_name()) |
| 81 | + if not rsct_power_repo_check.get_status(): |
| 82 | + rsct_power_repo_check.set_note(Notes.NOT_FIXABLE + "\n \n \ |
| 83 | +WARNING!!!! ibm-power-repo package needs to be enabled to install rsct \ |
| 84 | +packages on this machine. \n Please follow below steps to install \ |
| 85 | +ibm-power-repo package. \n 1. Download and install ibm-power-repo package. \ |
| 86 | +\n 2. run /opt/ibm/lop/configure to agree with the license. \ |
| 87 | +\n Refer https://www.ibm.com/support/pages/service-and-productivity-tools \ |
| 88 | +for more details") |
| 89 | + return |
| 90 | + if rsct_package_check.get_status() is False: |
| 91 | + self.fix_rsct_package(plugin_obj, rsct_package_check) |
| 92 | + elif rsct_package_check.get_status() is None: |
| 93 | + rsct_package_check.set_note(Notes.FAIL_TO_FIX) |
| 94 | + |
| 95 | + if "RSCT Installation path" in check_dir.keys(): |
| 96 | + rsct_install_exists = check_dir["RSCT Installation path"] |
| 97 | + if rsct_install_exists.get_status() is False: |
| 98 | + self.fix_rsct_install_path(plugin_obj, rsct_install_exists) |
| 99 | + elif rsct_install_exists.get_status() is None: |
| 100 | + rsct_install_exists.set_note(Notes.FAIL_TO_FIX) |
| 101 | + |
| 102 | + if "RSCT service status" in check_dir.keys(): |
| 103 | + rsct_service_check = check_dir["RSCT service status"] |
| 104 | + self.log.debug("rsct_service_check %s %s", |
| 105 | + rsct_service_check.get_status(), |
| 106 | + rsct_service_check.get_service()) |
| 107 | + if rsct_service_check.get_status() is False: |
| 108 | + self.enable_subsystem(plugin_obj, rsct_service_check) |
| 109 | + elif rsct_service_check.get_status() is None: |
| 110 | + rsct_service_check.set_note(Notes.FAIL_TO_FIX) |
0 commit comments