summaryrefslogtreecommitdiffstats
path: root/base/common/python
diff options
context:
space:
mode:
authorEndi Sukma Dewata <edewata@redhat.com>2013-04-11 15:27:27 -0400
committerEndi Sukma Dewata <edewata@redhat.com>2013-04-17 11:36:28 -0400
commit76a2e85dbbc8d8b8472bf91fc75e21163672e7f4 (patch)
treee3bc2782df9654af8bbd1ae24cb78d0c4d906905 /base/common/python
parentaea976ad646037d3122113790175d7e2edb4b33a (diff)
downloadpki-76a2e85dbbc8d8b8472bf91fc75e21163672e7f4.tar.gz
pki-76a2e85dbbc8d8b8472bf91fc75e21163672e7f4.tar.xz
pki-76a2e85dbbc8d8b8472bf91fc75e21163672e7f4.zip
Tracking upgrade using existing config files.
The upgrade framework has been modified to use pki.conf to track system upgrade, tomcat.conf to track instance upgrade, and CS.cfg to track subsystem upgrade. The preop.product.version in CS.cfg has been renamed into cms.product.version and is now used to track upgrade. Ticket #544
Diffstat (limited to 'base/common/python')
-rw-r--r--base/common/python/pki/upgrade.py77
1 files changed, 48 insertions, 29 deletions
diff --git a/base/common/python/pki/upgrade.py b/base/common/python/pki/upgrade.py
index 33077df23..fda1f829c 100644
--- a/base/common/python/pki/upgrade.py
+++ b/base/common/python/pki/upgrade.py
@@ -32,20 +32,17 @@ import pki
DEFAULT_VERSION = '10.0.0'
-VERSION_KEY = 'Configuration-Version'
-INDEX_KEY = 'Scriptlet-Index'
-
UPGRADE_DIR = pki.SHARE_DIR + '/server/upgrade'
VERSION_DIR = UPGRADE_DIR + '/%s'
SCRIPTLET_FILE = VERSION_DIR + '/%s'
-SYSTEM_VERSION = pki.CONF_DIR + '/' + pki.VERSION_FILE
+SYSTEM_TRACKER = pki.CONF_DIR + '/pki.conf'
INSTANCE_CONF = pki.CONF_DIR + '/%s'
-INSTANCE_VERSION = INSTANCE_CONF + '/' + pki.VERSION_FILE
+INSTANCE_TRACKER = INSTANCE_CONF + '/tomcat.conf'
SUBSYSTEM_CONF = INSTANCE_CONF + '/%s'
-SUBSYSTEM_VERSION = SUBSYSTEM_CONF + '/' + pki.VERSION_FILE
+SUBSYSTEM_TRACKER = SUBSYSTEM_CONF + '/CS.cfg'
verbose = False
@@ -128,10 +125,18 @@ class PKIUpgradeException(Exception):
class PKIUpgradeTracker(object):
- def __init__(self, name, filename):
+ def __init__(self, name, filename,
+ delimiter='=',
+ version_key='PKI_VERSION',
+ index_key='PKI_UPGRADE_INDEX'):
+
self.name = name
self.filename = filename
+ self.delimiter = delimiter
+ self.version_key = version_key
+ self.index_key = index_key
+
self.read()
@@ -161,17 +166,17 @@ class PKIUpgradeTracker(object):
print 'Removing ' + self.name + ' tracker.'
- if os.path.exists(self.filename):
- if verbose: print 'Removing ' + self.filename
- os.remove(self.filename)
+ self.remove_version()
+ self.remove_index()
+ self.write()
def reset(self, version):
print 'Resetting ' + self.name + ' tracker.'
- self.lines = []
self.set_version(version)
+ self.remove_index()
self.write()
@@ -179,8 +184,12 @@ class PKIUpgradeTracker(object):
print self.name + ':'
- for line in self.lines:
- print ' ' + line
+ version = self.get_version()
+ print ' Configuration version: ' + str(version)
+
+ index = self.get_index()
+ if index > 0:
+ print ' Last completed scriptlet: ' + str(index)
print
@@ -191,8 +200,8 @@ class PKIUpgradeTracker(object):
for line in self.lines:
- # parse <key>: <value>
- match = re.match('^\s*(\S*)\s*:\s*(.*)\s*$', line)
+ # parse <key> <delimiter> <value>
+ match = re.match('^\s*(\S*)\s*%s\s*(.*)\s*$' % self.delimiter, line)
if not match:
continue
@@ -213,8 +222,8 @@ class PKIUpgradeTracker(object):
for index, line in enumerate(self.lines):
- # parse <key>: <value>
- match = re.match('^\s*(\S*)\s*:\s*(.*)\s*$', line)
+ # parse <key> <delimiter> <value>
+ match = re.match('^\s*(\S*)\s*%s\s*(.*)\s*$' % self.delimiter, line)
if not match:
continue
@@ -224,20 +233,20 @@ class PKIUpgradeTracker(object):
if key.lower() != name.lower():
continue
- self.lines[index] = key + ': ' + value
+ self.lines[index] = key + self.delimiter + value
found = True
break
if not found:
- self.lines.append(name + ': ' + value)
+ self.lines.append(name + self.delimiter + value)
def remove_property(self, name):
for index, line in enumerate(self.lines):
- # parse <key>: <value>
- match = re.match('^\s*(\S*)\s*: \s*(.*)\s*$', line)
+ # parse <key> <delimiter> <value>
+ match = re.match('^\s*(\S*)\s*%s\s*(.*)\s*$' % self.delimiter, line)
if not match:
continue
@@ -252,7 +261,7 @@ class PKIUpgradeTracker(object):
def get_index(self):
- index = self.get_property(INDEX_KEY)
+ index = self.get_property(self.index_key)
if index:
return int(index)
@@ -261,16 +270,16 @@ class PKIUpgradeTracker(object):
def set_index(self, index):
- self.set_property(INDEX_KEY, str(index))
+ self.set_property(self.index_key, str(index))
def remove_index(self):
- self.remove_property(INDEX_KEY)
+ self.remove_property(self.index_key)
def get_version(self):
- version = self.get_property(VERSION_KEY)
+ version = self.get_property(self.version_key)
if version:
return Version(version)
@@ -279,7 +288,11 @@ class PKIUpgradeTracker(object):
def set_version(self, version):
- self.set_property(VERSION_KEY, str(version))
+ self.set_property(self.version_key, str(version))
+
+
+ def remove_version(self):
+ self.remove_property(self.version_key)
@functools.total_ordering
@@ -602,7 +615,9 @@ class PKIUpgrader():
tracker = self.subsystem_trackers[instance]
except KeyError:
tracker = PKIUpgradeTracker(name + ' subsystem',
- SUBSYSTEM_VERSION % (instance, subsystem))
+ SUBSYSTEM_TRACKER % (instance, subsystem),
+ version_key='cms.product.version',
+ index_key='cms.upgrade.index')
self.subsystem_trackers[name] = tracker
elif instance:
@@ -610,14 +625,18 @@ class PKIUpgrader():
tracker = self.instance_trackers[instance]
except KeyError:
tracker = PKIUpgradeTracker(instance + ' instance',
- INSTANCE_VERSION % instance)
+ INSTANCE_TRACKER % instance,
+ version_key='PKI_VERSION',
+ index_key='PKI_UPGRADE_INDEX')
self.instance_trackers[instance] = tracker
else:
if self.system_tracker:
tracker = self.system_tracker
else:
- tracker = PKIUpgradeTracker('system', SYSTEM_VERSION)
+ tracker = PKIUpgradeTracker('system', SYSTEM_TRACKER,
+ version_key='PKI_VERSION',
+ index_key='PKI_UPGRADE_INDEX')
self.system_tracker = tracker
return tracker