From 5d23bf01e17153dce4d205dd4fe346cb51a8dcc1 Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Tue, 27 Oct 2015 02:56:21 +0100 Subject: [PATCH] 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 --- base/common/python/pki/cli.py | 7 +++++-- base/server/python/pki/server/__init__.py | 18 +++++++++++++++++ base/server/python/pki/server/cli/instance.py | 28 +++++++++++++------------- base/server/python/pki/server/cli/migrate.py | 16 +++++++++++---- base/server/python/pki/server/cli/nuxwdog.py | 4 ++-- base/server/python/pki/server/cli/subsystem.py | 14 ++++++------- specs/pki-core.spec | 8 ++++++-- 7 files changed, 64 insertions(+), 31 deletions(-) diff --git a/base/common/python/pki/cli.py b/base/common/python/pki/cli.py index 802ef01aa1df3bf95c741741cbc3aa1a9793796a..6c51c2384282713f132d96e77722ed3ada4b5aee 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 01f1e94275a15dedea062d8506ac15cbcad65a71..0d522084c0bf210e93599ce09c2d23d0214c4aa7 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/." + 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 f74d251ca669afb328fc89067ac264dacf6103a5..fe50b605da37943dd66b594326bcc4524b03fc67 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() - module = self.top.find_module('migrate') + if self.verbose: + print('Migrating to Tomcat %s' % tomcat_version) + + 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 ba5e6311616cc902dbcd85eccf7c4a3c4826773e..09427974e9f900e5d52d3fe0e3b4c2a206778a2e 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 dd54f5683f0a9fb28369b8c67bd4a0d10fd4fc9f..dbdf973b659052779001d019a3de1cfe2aa94cf5 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 f72292a9daf312edaf5daad92b5ea152e3ee22ee..3b9f9860f3b8b8cc9a3722b019c6d93181da6469 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 2680bf97f7925a240b0c4a6344c91bb4e5782118..df2e3aa9e9de7fe8659074eacbd137d20e09197c 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 -- 2.4.3