summaryrefslogtreecommitdiffstats
path: root/base/server
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2013-05-08 19:32:26 -0400
committerEndi Sukma Dewata <edewata@redhat.com>2013-05-15 15:47:27 -0400
commitaaf6e899f28ecfc5d75bc378a7dc6ccee5b2249e (patch)
treea6c32a5edbc3f1a3c60ed995a9d0cf4d0e084fa9 /base/server
parentc90155c4983b55cc93b6d7cf131bd4aa541ab515 (diff)
downloadpki-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.py6
-rwxr-xr-xbase/server/sbin/pki-server-upgrade41
-rwxr-xr-xbase/server/upgrade/10.0.1/01-ReplaceRandomNumberGenerator10
-rwxr-xr-xbase/server/upgrade/10.0.1/02-CloningInterfaceChanges2
-rwxr-xr-xbase/server/upgrade/10.0.1/03-AddRestServlet2
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()