summaryrefslogtreecommitdiffstats
path: root/base/common/sbin
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2013-04-24 11:56:14 -0400
committerEndi Sukma Dewata <edewata@redhat.com>2013-04-25 23:17:48 -0400
commite81f0c638f4860623a04613f6735ed0374ed354d (patch)
treeb83bd13767d879d2acca4a1cf13e27ec17d88574 /base/common/sbin
parentf4fe2c94958ccd0d312ea5232531385ec51fd320 (diff)
downloadpki-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-xbase/common/sbin/pki-upgrade146
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)