summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Harmsen <mharmsen@redhat.com>2015-11-01 23:18:53 -0700
committerMatthew Harmsen <mharmsen@redhat.com>2015-11-01 23:28:53 -0700
commit54bbce097db9caaeeeda04bd547f2798221591ed (patch)
treec9a08f54d532d01ee8b655e526659d9af01165ed
parente35499a0d72b47e1418cfb6526c301b442c87155 (diff)
downloadpki-54bbce097db9caaeeeda04bd547f2798221591ed.tar.gz
pki-54bbce097db9caaeeeda04bd547f2798221591ed.tar.xz
pki-54bbce097db9caaeeeda04bd547f2798221591ed.zip
Added automatic Tomcat migration.
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 (based upon Edewata patch c7bc6eb94aa64c89467f9394554f860dc485ad94)
-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.py14
-rw-r--r--base/server/python/pki/server/cli/nuxwdog.py4
-rw-r--r--base/server/python/pki/server/cli/subsystem.py14
6 files changed, 56 insertions, 29 deletions
diff --git a/base/common/python/pki/cli.py b/base/common/python/pki/cli.py
index 4379780b2..2c51056f8 100644
--- a/base/common/python/pki/cli.py
+++ b/base/common/python/pki/cli.py
@@ -31,7 +31,6 @@ class CLI(object):
self.name = name
self.description = description
self.parent = None
- self.top = self
self.verbose = False
self.debug = False
@@ -59,11 +58,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 89d4acfd5..dbb18cd3d 100644
--- a/base/server/python/pki/server/__init__.py
+++ b/base/server/python/pki/server/__init__.py
@@ -431,3 +431,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 becad1447..9f0788b69 100644
--- a/base/server/python/pki/server/cli/instance.py
+++ b/base/server/python/pki/server/cli/instance.py
@@ -63,7 +63,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:
@@ -123,7 +123,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:
@@ -172,7 +172,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:
@@ -222,7 +222,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:
@@ -274,7 +274,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:
@@ -311,11 +311,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)
@@ -343,7 +344,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:
@@ -369,7 +370,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)
@@ -397,7 +398,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:
@@ -423,8 +424,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 bb807d8ca..cb3ba8f6c 100644
--- a/base/server/python/pki/server/cli/migrate.py
+++ b/base/server/python/pki/server/cli/migrate.py
@@ -48,7 +48,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:
@@ -79,9 +79,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()
@@ -97,6 +98,9 @@ class MigrateCLI(pki.cli.CLI):
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)
@@ -376,6 +380,8 @@ 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)
diff --git a/base/server/python/pki/server/cli/nuxwdog.py b/base/server/python/pki/server/cli/nuxwdog.py
index d6ef91e43..5f14e61fe 100644
--- a/base/server/python/pki/server/cli/nuxwdog.py
+++ b/base/server/python/pki/server/cli/nuxwdog.py
@@ -66,7 +66,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:
@@ -272,7 +272,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 19db203c0..cd0e8566e 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'])
@@ -242,7 +242,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'])
@@ -322,7 +322,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'])
@@ -390,7 +390,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'])
@@ -455,7 +455,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'])