diff options
author | Endi Sukma Dewata <edewata@redhat.com> | 2013-04-24 11:56:14 -0400 |
---|---|---|
committer | Endi Sukma Dewata <edewata@redhat.com> | 2013-04-25 23:17:48 -0400 |
commit | e81f0c638f4860623a04613f6735ed0374ed354d (patch) | |
tree | b83bd13767d879d2acca4a1cf13e27ec17d88574 /base/common/sbin | |
parent | f4fe2c94958ccd0d312ea5232531385ec51fd320 (diff) | |
download | pki-e81f0c638f4860623a04613f6735ed0374ed354d.tar.gz pki-e81f0c638f4860623a04613f6735ed0374ed354d.tar.xz pki-e81f0c638f4860623a04613f6735ed0374ed354d.zip |
Refactored upgrade framework into base and server upgrade.
The upgrade framework has been split into base and server upgrade
frameworks since they will be run automatically by different RPM
packages during upgrade. The base upgrade framework will upgrade
the system configuration. The server upgrade framework will upgrade
the instances and subsystems.
Ticket #544
Diffstat (limited to 'base/common/sbin')
-rwxr-xr-x | base/common/sbin/pki-upgrade | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/base/common/sbin/pki-upgrade b/base/common/sbin/pki-upgrade new file mode 100755 index 000000000..8b30f8fff --- /dev/null +++ b/base/common/sbin/pki-upgrade @@ -0,0 +1,146 @@ +#!/usr/bin/python +# Authors: +# Endi S. Dewata <edewata@redhat.com> +# +# 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. +# +# Copyright (C) 2013 Red Hat, Inc. +# All rights reserved. +# + +import getopt +import os +import signal +import sys + +import pki +import pki.upgrade + + +def interrupt_handler(signal, frame): + print + print + print 'Upgrade canceled.' + sys.exit(1) + + +def usage(): + print 'Usage: pki-upgrade [OPTIONS]' + print + print ' --scriptlet-version <version> Run scriptlets for a specific version only.' + print ' --scriptlet-index <index> Run a specific scriptlet only.' + print + print ' --silent Upgrade in silent mode. Ignore any failures.' + print ' --status Show upgrade status only. Do not perform upgrade.' + print + print ' -X Show advanced usage.' + print ' -v, --verbose Run in verbose mode.' + print ' -h, --help Show this help message.' + + +def advancedUsage(): + print 'WARNING: These options may render the system unusable.' + print 'Usage: pki-upgrade [OPTIONS]' + print ' --remove-tracker Remove tracker' + print ' --reset-tracker Reset tracker to match package version' + + +def main(argv): + + signal.signal(signal.SIGINT, interrupt_handler) + + try: + opts, args = getopt.getopt(argv[1:], 'hi:s:t:vX', [ + 'scriptlet-version=', 'scriptlet-index=', + 'silent', 'status', + 'remove-tracker', 'reset-tracker', + 'verbose', 'help']) + + except getopt.GetoptError as e: + print 'ERROR: ' + str(e) + usage() + sys.exit(1) + + version = None + index = None + + silent = False + status = False + remove_tracker = False + reset_tracker = False + + for o, a in opts: + if o == '--scriptlet-version': + version = a + + elif o == '--scriptlet-index': + index = int(a) + + elif o == '--silent': + silent = True + + elif o == '--status': + status = True + + elif o == '--remove-tracker': + remove_tracker = True + + elif o == '--reset-tracker': + reset_tracker = True + + elif o in ('-v', '--verbose'): + pki.upgrade.verbose = True + + elif o in ('-h', '--help'): + usage() + sys.exit() + + elif o == '-X': + advancedUsage() + sys.exit() + + else: + print 'ERROR: unknown option ' + o + usage() + sys.exit(1) + + if index and not version: + print 'ERROR: --scriptlet-index requires --scriptlet-version' + usage() + sys.exit(1) + + try: + upgrader = pki.upgrade.PKIUpgrader( + version = version, + index = index, + silent = silent) + + if status: + upgrader.status() + + elif remove_tracker: + upgrader.remove_tracker() + + elif reset_tracker: + upgrader.reset_tracker() + + else: + upgrader.upgrade() + + except pki.PKIException as e: + print e.message + + +if __name__ == '__main__': + main(sys.argv) |