[master/rhel7-branch] Fix error handling in cmdline mode. (#1034773)
Martin Kolman
mkolman at redhat.com
Tue Mar 11 16:59:03 UTC 2014
On Mon, 2014-03-10 at 21:02 -0400, Samantha N. Bueno wrote:
> 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).
What about making this a constant and moving the value to constants.py ?
>
> > + 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
> _______________________________________________
> 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