[master/rhel7-branch] Fix error handling in cmdline mode. (#1034773)

Samantha N. Bueno sbueno+anaconda at redhat.com
Tue Mar 11 01:02:10 UTC 2014


On Mon, Mar 10, 2014 at 08:31:00PM -0400, Samantha N. Bueno wrote:
> Handle CmdlineError properly so that the installer actually reboots
> itself.
> 
> Resolves: rhbz#1034773
> ---
>  pyanaconda/exception.py            | 44 +++++++++++++++++++-------------------
>  pyanaconda/packaging/yumpayload.py | 15 ++++++-------
>  pyanaconda/ui/tui/__init__.py      |  2 +-
>  3 files changed, 30 insertions(+), 31 deletions(-)
> 
> diff --git a/pyanaconda/exception.py b/pyanaconda/exception.py
> index 9767c00..6e9710e 100644
> --- a/pyanaconda/exception.py
> +++ b/pyanaconda/exception.py
> @@ -92,23 +92,6 @@ class AnacondaExceptionHandler(ExceptionHandler):
>                               "The installer will now terminate.") % str(value)
>              self.intf.messageWindow(_("Hardware error occured"), hw_error_msg)
>              sys.exit(0)
> -        elif (issubclass (ty, CmdlineError)):
> -
> -            cmdline_error_msg = _("\nThe installation was stopped due to an "
> -                                  "error which occurred while running in "
> -                                  "non-interactive cmdline mode. Since there can "
> -                                  "not be any questions in cmdline mode, edit "
> -                                  "your kickstart file and retry installation. "
> -                                  "\nThe exact error message is: \n\n%s. \n\nThe "
> -                                  "installer will now terminate.") % str(value)
> -
> -            # since there is no UI in cmdline mode and it is completely
> -            # non-interactive, we can't show a message window asking the user
> -            # to acknowledge the error; instead, print the error out and sleep
> -            # for a few seconds before exiting the installer
> -            print(cmdline_error_msg)
> -            time.sleep(180)
> -            sys.exit(0)
>          else:
>              try:
>                  # pylint: disable-msg=E0611
> @@ -139,11 +122,28 @@ class AnacondaExceptionHandler(ExceptionHandler):
>                  # X not running (Gtk cannot be initialized)
>                  if threadMgr.in_main_thread():
>                      log.debug("In the main thread, running exception handler")
> -                    print "An unknown error has occured, look at the "\
> -                        "/tmp/anaconda-tb* file(s) for more details"
> -                    # in the main thread, run exception handler
> -                    super(AnacondaExceptionHandler, self).handleException(
> -                                                            dump_info)
> +                    if (issubclass (ty, CmdlineError)):
> +                        cmdline_error_msg = _("\nThe installation was stopped due to an "
> +                                              "error which occurred while running in "
> +                                              "non-interactive cmdline mode. Since there can "
> +                                              "not be any questions in cmdline mode, edit "
> +                                              "your kickstart file and retry installation. "
> +                                              "\nThe exact error message is: \n\n%s. \n\nThe "
> +                                              "installer will now terminate.") % str(value)
> +
> +                        # since there is no UI in cmdline mode and it is completely
> +                        # non-interactive, we can't show a message window asking the user
> +                        # to acknowledge the error; instead, print the error out and sleep
> +                        # for a few seconds before exiting the installer
> +                        print(cmdline_error_msg)
> +                        time.sleep(10)

I've already changed the sleep to be 180, as it should have been (was
using 10 for testing).

> +                        sys.exit()
> +                    else:
> +                        print "An unknown error has occured, look at the "\
> +                            "/tmp/anaconda-tb* file(s) for more details"
> +                        # in the main thread, run exception handler
> +                        super(AnacondaExceptionHandler, self).handleException(
> +                                                                dump_info)
>                  else:
>                      log.debug("In a non-main thread, sending a message with "
>                               "exception data")
> diff --git a/pyanaconda/packaging/yumpayload.py b/pyanaconda/packaging/yumpayload.py
> index 824c8a4..211e5e9 100644
> --- a/pyanaconda/packaging/yumpayload.py
> +++ b/pyanaconda/packaging/yumpayload.py
> @@ -1350,14 +1350,13 @@ reposdir=%s
>          if self.data.packages.handleMissing == KS_MISSING_IGNORE:
>              return
>  
> -        if errorHandler.cb(exn, str(exn)) == ERROR_RAISE:
> -            if flags.automatedInstall and not flags.ksprompt:
> -                # If we're doing non-interactive ks install, raise CmdlineError
> -                # otherwise the system will just reboot automatically
> -                errtxt = _("CmdlineError: Missing package: %s" % str(exn))
> -                log.error(errtxt)
> -                raise CmdlineError(errtxt)
> -
> +        # If we're doing non-interactive ks install, raise CmdlineError,
> +        # otherwise the system will just reboot automatically
> +        if flags.automatedInstall and not flags.ksprompt:
> +            errtxt = _("CmdlineError: Missing package: %s" % str(exn))
> +            log.error(errtxt)
> +            raise CmdlineError(errtxt)
> +        elif errorHandler.cb(exn, str(exn)) == ERROR_RAISE:
>              # The progress bar polls kind of slowly, thus installation could
>              # still continue for a bit before the quit message is processed.
>              # Let's sleep forever to prevent any further actions and wait for
> diff --git a/pyanaconda/ui/tui/__init__.py b/pyanaconda/ui/tui/__init__.py
> index c3e8471..96e4ef7 100644
> --- a/pyanaconda/ui/tui/__init__.py
> +++ b/pyanaconda/ui/tui/__init__.py
> @@ -278,7 +278,7 @@ class TextUserInterface(ui.UserInterface):
>             times where anaconda cannot make a reasonable decision.  We don't
>             want to overwhelm the user with choices.
>  
> -           When cmdline mode is active, the default will be to answer no.
> +            When cmdline mode is active the default will be to answer now.
>          """
>  
>          return self._show_message_in_main_thread(self._showYesNoQuestion, (message,))
> -- 
> 1.8.3.1
> 
> _______________________________________________
> anaconda-patches mailing list
> anaconda-patches at lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/anaconda-patches


More information about the anaconda-patches mailing list