diff options
| author | Endi Sukma Dewata <edewata@redhat.com> | 2013-05-08 19:32:26 -0400 |
|---|---|---|
| committer | Endi Sukma Dewata <edewata@redhat.com> | 2013-05-15 15:47:27 -0400 |
| commit | aaf6e899f28ecfc5d75bc378a7dc6ccee5b2249e (patch) | |
| tree | a6c32a5edbc3f1a3c60ed995a9d0cf4d0e084fa9 /base/server | |
| parent | c90155c4983b55cc93b6d7cf131bd4aa541ab515 (diff) | |
| download | pki-aaf6e899f28ecfc5d75bc378a7dc6ccee5b2249e.tar.gz pki-aaf6e899f28ecfc5d75bc378a7dc6ccee5b2249e.tar.xz pki-aaf6e899f28ecfc5d75bc378a7dc6ccee5b2249e.zip | |
Added support for backup/restore on upgrade.
The upgrade framework has been modified to support backup and restore
functionality. A new method backup(filename) has been added to save
a file into a backup folder. The CLI's have been modified to accept
a --revert parameter which will restore the backup files one version
at a time.
Ticket #583
Diffstat (limited to 'base/server')
| -rw-r--r-- | base/server/python/pki/server/upgrade.py | 6 | ||||
| -rwxr-xr-x | base/server/sbin/pki-server-upgrade | 41 | ||||
| -rwxr-xr-x | base/server/upgrade/10.0.1/01-ReplaceRandomNumberGenerator | 10 | ||||
| -rwxr-xr-x | base/server/upgrade/10.0.1/02-CloningInterfaceChanges | 2 | ||||
| -rwxr-xr-x | base/server/upgrade/10.0.1/03-AddRestServlet | 2 |
5 files changed, 46 insertions, 15 deletions
diff --git a/base/server/python/pki/server/upgrade.py b/base/server/python/pki/server/upgrade.py index 84e05127e..940dbe44a 100644 --- a/base/server/python/pki/server/upgrade.py +++ b/base/server/python/pki/server/upgrade.py @@ -29,6 +29,7 @@ import pki.server from pki.upgrade import verbose UPGRADE_DIR = pki.SHARE_DIR + '/server/upgrade' +BACKUP_DIR = pki.LOG_DIR + '/server/upgrade' INSTANCE_TRACKER = '%s/tomcat.conf' SUBSYSTEM_TRACKER = '%s/CS.cfg' @@ -40,6 +41,9 @@ class PKIServerUpgradeScriptlet(pki.upgrade.PKIUpgradeScriptlet): super(PKIServerUpgradeScriptlet, self).__init__() + def get_backup_dir(self): + return BACKUP_DIR + '/' + str(self.version) + '/' + str(self.index) + def can_upgrade(self, instance, subsystem=None): # A scriptlet can run if the version matches the tracker and @@ -293,6 +297,8 @@ class PKIServerUpgrader(pki.upgrade.PKIUpgrader): tracker = self.get_tracker(instance, subsystem) tracker.set(version) + print 'Tracker has been set to version ' + str(version) + '.' + def remove_tracker(self): for instance in self.instances(): diff --git a/base/server/sbin/pki-server-upgrade b/base/server/sbin/pki-server-upgrade index 58bc9ccb4..0b43f9b4b 100755 --- a/base/server/sbin/pki-server-upgrade +++ b/base/server/sbin/pki-server-upgrade @@ -24,6 +24,7 @@ import signal import sys import pki +import pki.upgrade import pki.server.upgrade @@ -47,6 +48,7 @@ def usage(): print print ' --silent Upgrade in silent mode. Ignore any failures.' print ' --status Show upgrade status only. Do not perform upgrade.' + print ' --revert Revert the last version' print print ' -X Show advanced usage.' print ' -v, --verbose Run in verbose mode.' @@ -56,8 +58,9 @@ def usage(): 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' + print ' --remove-tracker Remove tracker' + print ' --reset-tracker Reset tracker to match package version' + print ' --set-tracker <version> Set tracker to a specific version' def main(argv): @@ -68,8 +71,8 @@ def main(argv): opts, args = getopt.getopt(argv[1:], 'hi:s:t:vX', [ 'instance=', 'subsystem=', 'instance-type=', 'scriptlet-version=', 'scriptlet-index=', - 'silent', 'status', - 'remove-tracker', 'reset-tracker', + 'silent', 'status', 'revert', + 'remove-tracker', 'reset-tracker', 'set-tracker=', 'verbose', 'help']) except getopt.GetoptError as e: @@ -81,14 +84,18 @@ def main(argv): subsystemName = None instanceType = None - version = None - index = None + scriptlet_version = None + scriptlet_index = None silent = False status = False + revert = False + remove_tracker = False reset_tracker = False + tracker_version = None + for o, a in opts: if o in ('-i', '--instance'): instanceName = a @@ -100,10 +107,10 @@ def main(argv): instanceType = int(a) elif o == '--scriptlet-version': - version = a + scriptlet_version = a elif o == '--scriptlet-index': - index = int(a) + scriptlet_index = int(a) elif o == '--silent': silent = True @@ -111,12 +118,18 @@ def main(argv): elif o == '--status': status = True + elif o == '--revert': + revert = True + elif o == '--remove-tracker': remove_tracker = True elif o == '--reset-tracker': reset_tracker = True + elif o == '--set-tracker': + tracker_version = pki.upgrade.Version(a) + elif o in ('-v', '--verbose'): pki.upgrade.verbose = True @@ -138,7 +151,7 @@ def main(argv): usage() sys.exit(1) - if index and not version: + if scriptlet_index and not scriptlet_version: print 'ERROR: --scriptlet-index requires --scriptlet-version' usage() sys.exit(1) @@ -148,19 +161,25 @@ def main(argv): instanceName = instanceName, subsystemName = subsystemName, instanceType = instanceType, - version = version, - index = index, + version = scriptlet_version, + index = scriptlet_index, silent = silent) if status: upgrader.status() + elif revert: + upgrader.revert() + elif remove_tracker: upgrader.remove_tracker() elif reset_tracker: upgrader.reset_tracker() + elif tracker_version is not None: + upgrader.set_tracker(tracker_version) + else: upgrader.upgrade() diff --git a/base/server/upgrade/10.0.1/01-ReplaceRandomNumberGenerator b/base/server/upgrade/10.0.1/01-ReplaceRandomNumberGenerator index e73ede236..af3d53cc4 100755 --- a/base/server/upgrade/10.0.1/01-ReplaceRandomNumberGenerator +++ b/base/server/upgrade/10.0.1/01-ReplaceRandomNumberGenerator @@ -46,6 +46,8 @@ class ReplaceRandomNumberGenerator(pki.server.upgrade.PKIServerUpgradeScriptlet) 'webapps', subsystem.name, 'META-INF', 'context.xml') + self.backup(context_xml) + if not os.path.exists(context_xml): self.create_context_xml( instance, @@ -64,13 +66,11 @@ class ReplaceRandomNumberGenerator(pki.server.upgrade.PKIServerUpgradeScriptlet) with open(context_xml, 'w') as f: f.write(etree.tostring(document, pretty_print=True)) - def upgrade_instance(self, instance): self.update_root_context_xml(instance) self.update_pki_context_xml(instance) - def update_root_context_xml(self, instance): context_xml = os.path.join( @@ -78,6 +78,8 @@ class ReplaceRandomNumberGenerator(pki.server.upgrade.PKIServerUpgradeScriptlet) 'webapps', 'ROOT', 'META-INF', 'context.xml') + self.backup(context_xml) + if not os.path.exists(context_xml): self.create_context_xml(instance, 'server', 'ROOT') @@ -95,6 +97,8 @@ class ReplaceRandomNumberGenerator(pki.server.upgrade.PKIServerUpgradeScriptlet) 'webapps', 'pki', 'META-INF', 'context.xml') + self.backup(context_xml) + if not os.path.exists(context_xml): self.create_context_xml(instance, 'server', 'pki') @@ -105,7 +109,6 @@ class ReplaceRandomNumberGenerator(pki.server.upgrade.PKIServerUpgradeScriptlet) with open(context_xml, 'w') as f: f.write(etree.tostring(document, pretty_print=True)) - def create_context_xml(self, instance, pkg, context): uid = pwd.getpwnam('pkiuser').pw_uid @@ -147,7 +150,6 @@ class ReplaceRandomNumberGenerator(pki.server.upgrade.PKIServerUpgradeScriptlet) manager.set('secureRandomProvider', 'Mozilla-JSS') manager.set('secureRandomAlgorithm', 'pkcs11prng') - def update_authenticator(self, document): context = document.getroot() diff --git a/base/server/upgrade/10.0.1/02-CloningInterfaceChanges b/base/server/upgrade/10.0.1/02-CloningInterfaceChanges index d97cb4258..c70a4263c 100755 --- a/base/server/upgrade/10.0.1/02-CloningInterfaceChanges +++ b/base/server/upgrade/10.0.1/02-CloningInterfaceChanges @@ -106,6 +106,8 @@ class CloningInterfaceChanges(pki.server.upgrade.PKIServerUpgradeScriptlet): 'webapps', subsystem.name, 'WEB-INF', 'web.xml') + self.backup(web_xml) + self.doc = ET.parse(web_xml) self.root = self.doc.getroot() self.remove_get_token_info(subsystem.name) diff --git a/base/server/upgrade/10.0.1/03-AddRestServlet b/base/server/upgrade/10.0.1/03-AddRestServlet index dd656e972..37304e294 100755 --- a/base/server/upgrade/10.0.1/03-AddRestServlet +++ b/base/server/upgrade/10.0.1/03-AddRestServlet @@ -53,6 +53,8 @@ class AddRestServlet(pki.server.upgrade.PKIServerUpgradeScriptlet): 'webapps', subsystem.name, 'WEB-INF', 'web.xml') + self.backup(web_xml) + self.doc = ET.parse(web_xml) self.root = self.doc.getroot() self.add_rest_services_servlet() |
