Fabian Deutsch has uploaded a new change for review. Change subject: console: Add module for console access ......................................................................
console: Add module for console access Initially this module contains a class to display the progress of a transaction on a plain console (so without a TUI), this is needed e.g. for KDump configuration as this requires user input for ssh-copy-id. Change-Id: Ia63946ffc00a91941be7dc2d508f76e88d36b8d1 Signed-off-by: Fabian Deutsch <[email protected]> --- M scripts/tui/src/ovirt/node/app.py A scripts/tui/src/ovirt/node/utils/console.py 2 files changed, 98 insertions(+), 12 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-node refs/changes/34/10634/1 diff --git a/scripts/tui/src/ovirt/node/app.py b/scripts/tui/src/ovirt/node/app.py index 5e2db1c..f12284b 100644 --- a/scripts/tui/src/ovirt/node/app.py +++ b/scripts/tui/src/ovirt/node/app.py @@ -34,33 +34,34 @@ 'disable_existing_loggers': True, 'formatters': { 'verbose': { - 'format': '%(levelname)s %(asctime)s %(name)s %(process)d %(message)s' + 'format': '%(levelname)s %(asctime)s %(name)s ' + + '%(process)d %(message)s' }, 'simple': { 'format': '%(asctime)s %(levelname)10s %(message)s' }, }, 'handlers': { - 'file':{ - 'level':'INFO', - 'class':'logging.FileHandler', + 'file': { + 'level': 'INFO', + 'class': 'logging.FileHandler', 'formatter': 'simple', - 'filename':'/tmp/ovirt.log', + 'filename': '/tmp/ovirt.log', 'mode': 'w' }, - 'debug':{ - 'level':'DEBUG', - 'class':'logging.FileHandler', + 'debug': { + 'level': 'DEBUG', + 'class': 'logging.FileHandler', 'formatter': 'verbose', - 'filename':'/tmp/ovirt.debug.log', + 'filename': '/tmp/ovirt.debug.log', 'mode': 'w' }, }, 'loggers': { 'ovirt.node': { - 'handlers':['debug'], + 'handlers': ['debug'], 'propagate': True, - 'level':'DEBUG', + 'level': 'DEBUG', }, 'ovirt.node': { 'handlers': ['file'], @@ -167,4 +168,4 @@ def quit(self): self.logger.info("Quitting") - self.ui.quit() \ No newline at end of file + self.ui.quit() diff --git a/scripts/tui/src/ovirt/node/utils/console.py b/scripts/tui/src/ovirt/node/utils/console.py new file mode 100644 index 0000000..029ad96 --- /dev/null +++ b/scripts/tui/src/ovirt/node/utils/console.py @@ -0,0 +1,85 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# console.py - Copyright (C) 2013 Red Hat, Inc. +# Written by Fabian Deutsch <[email protected]> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301, USA. A copy of the GNU General Public License is +# also available at http://www.gnu.org/copyleft/gpl.html. +from ovirt.node import base +import traceback +import sys + + +def writeln(txts): + """Write something to stdout + A wrapper if we want to do this differently in future + """ + if type(txts) is not list: + txts = [txts] + + sys.stdout.write("\n".join(txts)) + sys.stdout.write("\n") + + +def wait_for_keypress(): + sys.stdin.read(1) + + +class TransactionProgress(base.Base): + """Display the progress of a transaction on a console + """ + def __init__(self, transaction, plugin, initial_text=""): + self.transaction = transaction + self.plugin = plugin + self.texts = [initial_text, ""] + super(TransactionProgress, self).__init__() + + def add_update(self, txt): + self.texts.append(txt) + self.logger.debug(txt) + self._print_func(txt) + + def _print_func(self, txt): + writeln(txt) + + def run(self): + if self.transaction: + self.logger.debug("Initiating transaction") + self.__run_transaction() + else: + self.add_update("There were no changes, nothing to do.") + + def __print_title(self): + writeln([self.transaction.title, + "-" * len(self.transaction.title)]) + + def __run_transaction(self): + try: + self.__print_title() + self.logger.debug("Preparing transaction for console %s" % + self.transaction) + self.transaction.prepare() # Just to display something in dry mode + for idx, e in enumerate(self.transaction): + txt = "(%s/%s) %s" % (idx + 1, len(self.transaction), e.title) + self.add_update(txt) + self.plugin.dry_or(lambda: e.commit()) + self.add_update("\nAll changes were applied successfully.") + except Exception as e: + self.add_update("\nAn error occurred while applying the changes:") + self.add_update("%s" % e.message) + self.logger.warning("'%s' on transaction '%s': %s - %s" % + (type(e), self.transaction, e, e.message)) + self.logger.debug(str(traceback.format_exc())) -- To view, visit http://gerrit.ovirt.org/10634 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia63946ffc00a91941be7dc2d508f76e88d36b8d1 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-node Gerrit-Branch: master Gerrit-Owner: Fabian Deutsch <[email protected]> _______________________________________________ node-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/node-patches
