summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2015-10-27 02:56:21 +0100
committerEndi S. Dewata <edewata@redhat.com>2015-10-30 19:02:56 +0100
commitc7bc6eb94aa64c89467f9394554f860dc485ad94 (patch)
treec2de2f28f0195a2d4c0744f660252ebb5a568fb1
parent8b5c3cf9b37e5b3be44b777545fb1887c2fb75d2 (diff)
downloadpki-c7bc6eb94aa64c89467f9394554f860dc485ad94.tar.gz
pki-c7bc6eb94aa64c89467f9394554f860dc485ad94.tar.xz
pki-c7bc6eb94aa64c89467f9394554f860dc485ad94.zip
Added automatic Tomcat migration.
The pki-core.spec has been modified to execute pki-server migrate when the package is installed. This way when upgrading from F22 to F23 all PKI instances will be migrated automatically to Tomcat 8. The pki-server migrate command has been modified such that if there is no specific Tomcat version specified it will use the current Tomcat version. The top attribute in the CLI class was not functioning properly, so it has been replaced with get_top_module() method. The getopt() invocations in pki-server subcommands have been replaced with gnu_getopt() to allow intermixing options and arguments. https://fedorahosted.org/pki/ticket/1310
-rw-r--r--base/common/python/pki/cli.py7
-rw-r--r--base/server/python/pki/server/__init__.py18
-rw-r--r--base/server/python/pki/server/cli/instance.py28
-rw-r--r--base/server/python/pki/server/cli/migrate.py16
-rw-r--r--base/server/python/pki/server/cli/nuxwdog.py4
-rw-r--r--base/server/python/pki/server/cli/subsystem.py14
-rw-r--r--specs/pki-core.spec8
7 files changed, 64 insertions, 31 deletions
diff --git a/base/common/python/pki/cli.py b/base/common/python/pki/cli.py
index 802ef01aa..6c51c2384 100644
--- a/base/common/python/pki/cli.py
+++ b/base/common/python/pki/cli.py
@@ -34,7 +34,6 @@ class CLI(object):
self.name = name
self.description = description
self.parent = None
- self.top = self
self.verbose = False
self.debug = False
@@ -62,11 +61,15 @@ class CLI(object):
def add_module(self, module):
self.modules[module.name] = module
module.parent = self
- module.top = self.top
def get_module(self, name):
return self.modules.get(name)
+ def get_top_module(self):
+ if self.parent:
+ return self.parent.get_top_module()
+ return self
+
def print_message(self, message):
print('-' * len(message))
print(message)
diff --git a/base/server/python/pki/server/__init__.py b/base/server/python/pki/server/__init__.py
index 01f1e9427..0d522084c 100644
--- a/base/server/python/pki/server/__init__.py
+++ b/base/server/python/pki/server/__init__.py
@@ -456,3 +456,21 @@ class PKIServerException(pki.PKIException):
self.instance = instance
self.subsystem = subsystem
+
+
+class Tomcat(object):
+
+ @classmethod
+ def get_major_version(self):
+
+ # run "tomcat version"
+ output = subprocess.check_output(['/usr/sbin/tomcat', 'version'])
+
+ # find "Server version: Apache Tomcat/<major version>.<minor version>"
+ match = re.search(r'^Server version:[^/]*/(\d+).*$', output, re.MULTILINE)
+
+ if not match:
+ raise Exception('Unable to determine Tomcat version')
+
+ # return major version
+ return match.group(1)
diff --git a/base/server/python/pki/server/cli/instance.py b/base/server/python/pki/server/cli/instance.py
index f74d251ca..fe50b605d 100644
--- a/base/server/python/pki/server/cli/instance.py
+++ b/base/server/python/pki/server/cli/instance.py
@@ -65,7 +65,7 @@ class InstanceFindCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, _ = getopt.getopt(argv, 'i:v', [
+ opts, _ = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
@@ -125,7 +125,7 @@ class InstanceShowCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
@@ -174,7 +174,7 @@ class InstanceStartCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
@@ -224,7 +224,7 @@ class InstanceStopCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
@@ -276,7 +276,7 @@ class InstanceMigrateCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'tomcat=', 'verbose', 'debug', 'help'])
except getopt.GetoptError as e:
@@ -313,11 +313,12 @@ class InstanceMigrateCLI(pki.cli.CLI):
sys.exit(1)
if not tomcat_version:
- print('ERROR: missing Tomcat version')
- self.print_help()
- sys.exit(1)
+ tomcat_version = pki.server.Tomcat.get_major_version()
+
+ if self.verbose:
+ print('Migrating to Tomcat %s' % tomcat_version)
- module = self.top.find_module('migrate')
+ module = self.get_top_module().find_module('migrate')
module.set_verbose(self.verbose)
module.set_debug(self.debug)
@@ -347,7 +348,7 @@ class InstanceNuxwdogEnableCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
@@ -373,7 +374,7 @@ class InstanceNuxwdogEnableCLI(pki.cli.CLI):
self.print_help()
sys.exit(1)
- # module = self.top.find_module('nuxwdog-enable')
+ module = self.get_top_module().find_module('nuxwdog-enable')
module = pki.server.cli.nuxwdog.NuxwdogEnableCLI()
module.set_verbose(self.verbose)
@@ -402,7 +403,7 @@ class InstanceNuxwdogDisableCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
@@ -428,8 +429,7 @@ class InstanceNuxwdogDisableCLI(pki.cli.CLI):
self.print_help()
sys.exit(1)
- # module = self.top.find_module('nuxwdog-disable')
- module = pki.server.cli.nuxwdog.NuxwdogDisableCLI()
+ module = self.get_top_module().find_module('nuxwdog-disable')
module.set_verbose(self.verbose)
instance = pki.server.PKIInstance(instance_name)
diff --git a/base/server/python/pki/server/cli/migrate.py b/base/server/python/pki/server/cli/migrate.py
index ba5e63116..09427974e 100644
--- a/base/server/python/pki/server/cli/migrate.py
+++ b/base/server/python/pki/server/cli/migrate.py
@@ -49,7 +49,7 @@ class MigrateCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, _ = getopt.getopt(argv, 'i:v', [
+ opts, _ = getopt.gnu_getopt(argv, 'i:v', [
'tomcat=', 'verbose', 'debug', 'help'])
except getopt.GetoptError as e:
@@ -80,9 +80,10 @@ class MigrateCLI(pki.cli.CLI):
sys.exit(1)
if not tomcat_version:
- print('ERROR: missing Tomcat version')
- self.print_help()
- sys.exit(1)
+ tomcat_version = pki.server.Tomcat.get_major_version()
+
+ if self.verbose:
+ print('Migrating to Tomcat %s' % tomcat_version)
instances = pki.server.PKIServer.instances()
@@ -96,6 +97,10 @@ class MigrateCLI(pki.cli.CLI):
self.migrate_subsystems(instance, tomcat_version)
def migrate_instance(self, instance, tomcat_version):
+
+ if self.verbose:
+ print('Migrating %s instance' % instance.name)
+
server_xml = os.path.join(instance.conf_dir, 'server.xml')
self.migrate_server_xml(server_xml, tomcat_version)
@@ -373,6 +378,9 @@ class MigrateCLI(pki.cli.CLI):
self.migrate_subsystem(subsystem, tomcat_version)
def migrate_subsystem(self, subsystem, tomcat_version):
+ if self.verbose:
+ print('Migrating %s/%s subsystem' % (subsystem.instance.name, subsystem.name))
+
self.migrate_context_xml(subsystem.context_xml, tomcat_version)
def migrate_context_xml(self, filename, tomcat_version):
diff --git a/base/server/python/pki/server/cli/nuxwdog.py b/base/server/python/pki/server/cli/nuxwdog.py
index dd54f5683..dbdf973b6 100644
--- a/base/server/python/pki/server/cli/nuxwdog.py
+++ b/base/server/python/pki/server/cli/nuxwdog.py
@@ -68,7 +68,7 @@ class NuxwdogEnableCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, _ = getopt.getopt(argv, 'i:v', [
+ opts, _ = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
@@ -275,7 +275,7 @@ class NuxwdogDisableCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, _ = getopt.getopt(argv, 'i:v', [
+ opts, _ = getopt.gnu_getopt(argv, 'i:v', [
'verbose', 'help'])
except getopt.GetoptError as e:
diff --git a/base/server/python/pki/server/cli/subsystem.py b/base/server/python/pki/server/cli/subsystem.py
index f72292a9d..3b9f9860f 100644
--- a/base/server/python/pki/server/cli/subsystem.py
+++ b/base/server/python/pki/server/cli/subsystem.py
@@ -67,7 +67,7 @@ class SubsystemFindCLI(pki.cli.CLI):
def execute(self, args):
try:
- opts, _ = getopt.getopt(args, 'i:v', [
+ opts, _ = getopt.gnu_getopt(args, 'i:v', [
'instance=',
'verbose', 'help'])
@@ -125,7 +125,7 @@ class SubsystemShowCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'instance=',
'verbose', 'help'])
@@ -182,7 +182,7 @@ class SubsystemEnableCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'instance=',
'verbose', 'help'])
@@ -244,7 +244,7 @@ class SubsystemDisableCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'instance=',
'verbose', 'help'])
@@ -324,7 +324,7 @@ class SubsystemCertFindCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'instance=',
'verbose', 'help'])
@@ -392,7 +392,7 @@ class SubsystemCertShowCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'instance=',
'verbose', 'help'])
@@ -457,7 +457,7 @@ class SubsystemCertUpdateCLI(pki.cli.CLI):
def execute(self, argv):
try:
- opts, args = getopt.getopt(argv, 'i:v', [
+ opts, args = getopt.gnu_getopt(argv, 'i:v', [
'instance=',
'verbose', 'help'])
diff --git a/specs/pki-core.spec b/specs/pki-core.spec
index 2680bf97f..df2e3aa9e 100644
--- a/specs/pki-core.spec
+++ b/specs/pki-core.spec
@@ -778,7 +778,7 @@ then
else
# On RPM upgrade run system upgrade
- echo "Upgrading system at `/bin/date`." >> /var/log/pki/pki-upgrade-%{version}.log 2>&1
+ echo "Upgrading PKI system configuration at `/bin/date`." >> /var/log/pki/pki-upgrade-%{version}.log 2>&1
/sbin/pki-upgrade --silent >> /var/log/pki/pki-upgrade-%{version}.log 2>&1
echo >> /var/log/pki/pki-upgrade-%{version}.log 2>&1
fi
@@ -798,10 +798,14 @@ fi
## from EITHER 'sysVinit' OR previous 'systemd' processes to the new
## PKI deployment process
-echo "Upgrading server at `/bin/date`." >> /var/log/pki/pki-server-upgrade-%{version}.log 2>&1
+echo "Upgrading PKI server configuration at `/bin/date`." >> /var/log/pki/pki-server-upgrade-%{version}.log 2>&1
/sbin/pki-server-upgrade --silent >> /var/log/pki/pki-server-upgrade-%{version}.log 2>&1
echo >> /var/log/pki/pki-server-upgrade-%{version}.log 2>&1
+# Migrate Tomcat configuration
+/sbin/pki-server migrate >> /var/log/pki/pki-server-upgrade-%{version}.log 2>&1
+echo >> /var/log/pki/pki-server-upgrade-%{version}.log 2>&1
+
systemctl daemon-reload
## %preun -n pki-server