diff --git a/leapp/cli/upgrade/__init__.py b/leapp/cli/upgrade/__init__.py index c43f77b75..7b5cb5a63 100644 --- a/leapp/cli/upgrade/__init__.py +++ b/leapp/cli/upgrade/__init__.py @@ -14,7 +14,7 @@ from leapp.repository.scan import find_and_scan_repositories from leapp.utils.audit import Execution, get_connection, get_checkpoints from leapp.utils.clicmd import command, command_opt -from leapp.utils.output import report_errors, report_info, beautify_actor_exception +from leapp.utils.output import report_errors, report_info, beautify_actor_exception, report_unsupported from leapp.utils.report import fetch_upgrade_report_messages, generate_report_file @@ -117,6 +117,13 @@ def generate_report_files(context): generate_report_file(messages, context, report_txt) +def warn_if_unsupported(configuration): + env = os.environ + if env.get('LEAPP_UNSUPPORTED', '0') == '1': + devel_vars = {k: env[k] for k in env if k.startswith('LEAPP_DEVEL_')} + report_unsupported(devel_vars, configuration["whitelist_experimental"]) + + @command('upgrade', help='Upgrades the current system to the next available major version.') @command_opt('resume', is_flag=True, help='Continue the last execution after it was stopped (e.g. after reboot)') @command_opt('reboot', is_flag=True, help='Automatically performs reboot when requested.') @@ -129,6 +136,10 @@ def upgrade(args): if args.whitelist_experimental: args.whitelist_experimental = list(itertools.chain(*[i.split(',') for i in args.whitelist_experimental])) + os.environ['LEAPP_EXPERIMENTAL'] = '1' + else: + os.environ['LEAPP_EXPERIMENTAL'] = '0' + os.environ['LEAPP_UNSUPPORTED'] = '0' if os.getenv('LEAPP_UNSUPPORTED', '0') == '0' else '1' skip_phases_until = None context = str(uuid.uuid4()) configuration = { @@ -172,6 +183,7 @@ def upgrade(args): msg = 'No such Actor: {}'.format(actor_name) logger.error(msg) raise CommandError(msg) + warn_if_unsupported(configuration) with beautify_actor_exception(): answerfile_path = args.load_answerfile or get_config().get('report', 'answerfile') logger.info("Using answerfile at %s", answerfile_path) @@ -195,6 +207,10 @@ def preupgrade(args): if args.whitelist_experimental: args.whitelist_experimental = list(itertools.chain(*[i.split(',') for i in args.whitelist_experimental])) + os.environ['LEAPP_EXPERIMENTAL'] = '1' + else: + os.environ['LEAPP_EXPERIMENTAL'] = '0' + os.environ['LEAPP_UNSUPPORTED'] = '0' if os.getenv('LEAPP_UNSUPPORTED', '0') == '0' else '1' context = str(uuid.uuid4()) configuration = { 'debug': os.getenv('LEAPP_DEBUG', '0'), @@ -220,6 +236,7 @@ def preupgrade(args): msg = 'No such Actor: {}'.format(actor_name) logger.error(msg) raise CommandError(msg) + warn_if_unsupported(configuration) with beautify_actor_exception(): until_phase = 'ReportsPhase' logger.info('Executing workflow until phase: %s', until_phase) diff --git a/leapp/utils/output.py b/leapp/utils/output.py index 64b8429bc..9ef133ec1 100644 --- a/leapp/utils/output.py +++ b/leapp/utils/output.py @@ -13,6 +13,7 @@ class Color(object): bold = "\033[1m" if sys.stdout.isatty() else "" red = "\033[1;31m" if sys.stdout.isatty() else "" green = "\033[1;32m" if sys.stdout.isatty() else "" + yellow = "\033[1;33m" if sys.stdout.isatty() else "" def pretty_block(string, color=Color.bold, width=60): @@ -35,7 +36,7 @@ def print_error(error): def report_errors(errors): if errors: sys.stdout.write(pretty_block("ERRORS", color=Color.red)) - sys.stderr.write("\n") + sys.stdout.write("\n") for error in errors: print_error(error) sys.stdout.write(pretty_block("END OF ERRORS", color=Color.red)) @@ -51,6 +52,24 @@ def report_info(path, fail=False): sys.stdout.write(pretty_block("END OF REPORT", color=Color.bold if fail else Color.green)) +def report_unsupported(devel_vars, experimental): + sys.stdout.write(pretty_block("UNSUPPORTED UPGRADE", color=Color.yellow)) + sys.stdout.write("\nVariable LEAPP_UNSUPPORTED has been detected. Proceeding at your own risk.\n") + + if devel_vars: + sys.stdout.write("{yellow}Development variables{reset} have been detected:\n".format( + yellow=Color.yellow, reset=Color.reset)) + for key in devel_vars: + sys.stdout.write("- {key}={value}\n".format(key=key, value=devel_vars[key])) + if experimental: + sys.stdout.write("{yellow}Experimental actors{reset} have been detected:\n".format( + yellow=Color.yellow, reset=Color.reset)) + for actor in experimental: + sys.stdout.write("- {actor}\n".format(actor=actor)) + sys.stdout.write(pretty_block("UNSUPPORTED UPGRADE", color=Color.yellow)) + sys.stdout.write("\n") + + @contextmanager def beautify_actor_exception(): try: