[Pki-devel] [PATCH] 545 Added server management CLI.

Fraser Tweedale ftweedal at redhat.com
Tue Jan 27 03:45:23 UTC 2015


ACK

On Thu, Jan 22, 2015 at 01:20:16PM -0600, Endi Sukma Dewata wrote:
> A new pki-server CLI has been added to manage the instances and
> subsystems using the server management library. This CLI manages
> the system files directly, so it can only be run locally on the
> server by the system administrator.
> 
> The autoDeploy setting in server.xml has been enabled by default.
> An upgrade script has been added to enable the autoDeploy setting
> in existing instances.
> 
> https://fedorahosted.org/pki/ticket/1183
> 
> -- 
> Endi S. Dewata

> From f20225af9b168fb62de91d0a76baf76642ad4b5a Mon Sep 17 00:00:00 2001
> From: "Endi S. Dewata" <edewata at redhat.com>
> Date: Tue, 20 Jan 2015 22:11:50 -0500
> Subject: [PATCH] Added server management CLI.
> 
> A new pki-server CLI has been added to manage the instances and
> subsystems using the server management library. This CLI manages
> the system files directly, so it can only be run locally on the
> server by the system administrator.
> 
> The autoDeploy setting in server.xml has been enabled by default.
> An upgrade script has been added to enable the autoDeploy setting
> in existing instances.
> 
> https://fedorahosted.org/pki/ticket/1183
> ---
>  base/common/python/pki/cli.py                      | 145 ++++++++++
>  base/server/python/pki/server/cli/__init__.py      |   0
>  base/server/python/pki/server/cli/instance.py      | 252 +++++++++++++++++
>  base/server/python/pki/server/cli/subsystem.py     | 310 +++++++++++++++++++++
>  base/server/sbin/pki-server                        |  84 ++++++
>  base/server/share/conf/server.xml                  |   2 +-
>  .../10.2.2/02-EnableWebApplicationAutoDeploy       |  56 ++++
>  pylint-build-scan.sh                               |   8 +-
>  specs/pki-core.spec                                |   1 +
>  9 files changed, 856 insertions(+), 2 deletions(-)
>  create mode 100644 base/common/python/pki/cli.py
>  create mode 100644 base/server/python/pki/server/cli/__init__.py
>  create mode 100644 base/server/python/pki/server/cli/instance.py
>  create mode 100644 base/server/python/pki/server/cli/subsystem.py
>  create mode 100644 base/server/sbin/pki-server
>  create mode 100755 base/server/upgrade/10.2.2/02-EnableWebApplicationAutoDeploy
> 
> diff --git a/base/common/python/pki/cli.py b/base/common/python/pki/cli.py
> new file mode 100644
> index 0000000000000000000000000000000000000000..d44875fcb42bddd0cad4f4e6314c84890965e3d4
> --- /dev/null
> +++ b/base/common/python/pki/cli.py
> @@ -0,0 +1,145 @@
> +#!/usr/bin/python
> +# Authors:
> +#     Endi S. Dewata <edewata at redhat.com>
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License along
> +# with this program; if not, write to the Free Software Foundation, Inc.,
> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
> +# Copyright (C) 2015 Red Hat, Inc.
> +# All rights reserved.
> +#
> +
> +import sys
> +import collections
> +
> +
> +class CLI(object):
> +
> +    def __init__(self, name, description):
> +
> +        self.name = name
> +        self.description = description
> +        self.parent = None
> +
> +        self.verbose = False
> +        self.modules = collections.OrderedDict()
> +
> +    def set_verbose(self, verbose):
> +        self.verbose = verbose
> +        if self.parent:
> +            self.parent.set_verbose(verbose)
> +
> +    def get_full_name(self):
> +        if self.parent:
> +            return self.parent.get_full_module_name(self.name)
> +        return self.name
> +
> +    def get_full_module_name(self, module_name):
> +        return self.get_full_name() + '-' + module_name
> +
> +    def add_module(self, module):
> +        self.modules[module.name] = module
> +        module.parent = self
> +
> +    def get_module(self, name):
> +        return self.modules.get(name)
> +
> +    def print_message(self, message):
> +        print '-' * len(message)
> +        print message
> +        print '-' * len(message)
> +
> +    def print_help(self):
> +
> +        print 'Commands:'
> +
> +        for module in self.modules.itervalues():
> +            full_name = module.get_full_name()
> +            print ' {:30}{:30}'.format(full_name, module.description)
> +
> +    def init(self):
> +        pass
> +
> +    def execute(self, args):
> +
> +        if len(args) == 0:
> +            self.print_help()
> +            sys.exit()
> +
> +        # A command consists of parts joined by dashes: <part 1>-<part 2>-...-<part N>.
> +        # For example: cert-request-find
> +        command = args[0]
> +
> +        # The command will be split into module name and sub command, for example:
> +        #  - module name: cert
> +        #  - sub command: request-find
> +        module_name = None
> +        sub_command = None
> +
> +        # Search the module by incrementally adding parts into module name.
> +        # Repeat until it finds the module or until there is no more parts to add.
> +        module = None
> +        position = 0
> +
> +        while True:
> +
> +            # Find the next dash.
> +            i = command.find('-', position)
> +            if i >= 0:
> +                # Dash found. Split command into module name and sub command.
> +                module_name = command[0:i]
> +                sub_command = command[i+1:]
> +            else:
> +                # Dash not found. Use the whole command.
> +                module_name = command
> +                sub_command = None
> +
> +            if self.verbose:
> +                print 'Module: %s' % module_name
> +
> +            m = self.get_module(module_name)
> +            if m:
> +                # Module found. Check sub command.
> +                if not sub_command:
> +                    # No sub command. Use this module.
> +                    module = m
> +                    break
> +
> +                # There is a sub command. It must be processed by module's children.
> +                if len(m.modules) > 0:
> +                    # Module has children. Use this module.
> +                    module = m
> +                    break
> +
> +                # Module doesn't have children. Keep looking.
> +
> +            # If there's no more dashes, stop.
> +            if i<0:
> +                break
> +
> +            position = i + 1
> +
> +        if not module:
> +            raise Exception('Invalid module "%s".' % self.get_full_module_name(module_name))
> +
> +        # Prepare module arguments.
> +        if sub_command:
> +            # If module command exists, include it as arguments: <module command> <args>...
> +            module_args = [sub_command] + args[1:]
> +
> +        else:
> +            # Otherwise, pass the original arguments: <args>...
> +            module_args = args[1:]
> +
> +        module.init()
> +        module.execute(module_args)
> diff --git a/base/server/python/pki/server/cli/__init__.py b/base/server/python/pki/server/cli/__init__.py
> new file mode 100644
> index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
> diff --git a/base/server/python/pki/server/cli/instance.py b/base/server/python/pki/server/cli/instance.py
> new file mode 100644
> index 0000000000000000000000000000000000000000..c1ec9ddd728950d2b39384249b25335d25820c6a
> --- /dev/null
> +++ b/base/server/python/pki/server/cli/instance.py
> @@ -0,0 +1,252 @@
> +#!/usr/bin/python
> +# Authors:
> +#     Endi S. Dewata <edewata at redhat.com>
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License along
> +# with this program; if not, write to the Free Software Foundation, Inc.,
> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
> +# Copyright (C) 2015 Red Hat, Inc.
> +# All rights reserved.
> +#
> +
> +import getopt
> +import os
> +import sys
> +
> +import pki.cli
> +import pki.server
> +
> +
> +class InstanceCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(InstanceCLI, self).__init__('instance', 'Instance management commands')
> +
> +        self.add_module(InstanceFindCLI())
> +        self.add_module(InstanceShowCLI())
> +        self.add_module(InstanceStartCLI())
> +        self.add_module(InstanceStopCLI())
> +
> +    @staticmethod
> +    def print_instance(instance):
> +        print '  Instance ID: %s' % instance.name
> +        print '  Active: %s' % instance.is_active()
> +
> +
> +class InstanceFindCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(InstanceFindCLI, self).__init__('find', 'Find instances')
> +
> +    def print_help(self):
> +        print 'Usage: pki-server instance-find [OPTIONS]'
> +        print
> +        print '  -v, --verbose                Run in verbose mode.'
> +        print '      --help                   Show help message.'
> +        print
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, _ = getopt.getopt(argv, 'i:v', [
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.print_help()
> +            sys.exit(1)
> +
> +        for o, _ in opts:
> +            if o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.print_help()
> +                sys.exit(1)
> +
> +        results = []
> +        if os.path.exists(pki.server.INSTANCE_BASE_DIR):
> +            for f in os.listdir(pki.server.INSTANCE_BASE_DIR):
> +
> +                if not os.path.isdir:
> +                    continue
> +
> +                results.append(f)
> +
> +        self.print_message('%s entries matched' % len(results))
> +
> +        first = True
> +        for instance_name in results:
> +            if first:
> +                first = False
> +            else:
> +                print
> +
> +            instance = pki.server.PKIInstance(instance_name)
> +            instance.load()
> +
> +            InstanceCLI.print_instance(instance)
> +
> +
> +class InstanceShowCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(InstanceShowCLI, self).__init__('show', 'Show instance')
> +
> +    def print_help(self):
> +        print 'Usage: pki-server instance-show [OPTIONS] <instance ID>'
> +        print
> +        print '  -v, --verbose                Run in verbose mode.'
> +        print '      --help                   Show help message.'
> +        print
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, args = getopt.getopt(argv, 'i:v', [
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.print_help()
> +            sys.exit(1)
> +
> +        if len(args) != 1:
> +            print 'ERROR: missing instance ID'
> +            self.print_help()
> +            sys.exit(1)
> +
> +        instance_name = args[0]
> +
> +        for o, _ in opts:
> +            if o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.print_help()
> +                sys.exit(1)
> +
> +        instance = pki.server.PKIInstance(instance_name)
> +        instance.load()
> +
> +        InstanceCLI.print_instance(instance)
> +
> +
> +class InstanceStartCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(InstanceStartCLI, self).__init__('start', 'Start instance')
> +
> +    def print_help(self):
> +        print 'Usage: pki-server instance-start [OPTIONS] <instance ID>'
> +        print
> +        print '  -v, --verbose                Run in verbose mode.'
> +        print '      --help                   Show help message.'
> +        print
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, args = getopt.getopt(argv, 'i:v', [
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.print_help()
> +            sys.exit(1)
> +
> +        if len(args) != 1:
> +            print 'ERROR: missing instance ID'
> +            self.print_help()
> +            sys.exit(1)
> +
> +        instance_name = args[0]
> +
> +        for o, _ in opts:
> +            if o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.print_help()
> +                sys.exit(1)
> +
> +        instance = pki.server.PKIInstance(instance_name)
> +        instance.load()
> +        instance.start()
> +
> +        self.print_message('%s instance started' % instance_name)
> +
> +
> +class InstanceStopCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(InstanceStopCLI, self).__init__('stop', 'Stop instance')
> +
> +    def print_help(self):
> +        print 'Usage: pki-server instance-stop [OPTIONS] <instance ID>'
> +        print
> +        print '  -v, --verbose                Run in verbose mode.'
> +        print '      --help                   Show help message.'
> +        print
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, args = getopt.getopt(argv, 'i:v', [
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.print_help()
> +            sys.exit(1)
> +
> +        if len(args) != 1:
> +            print 'ERROR: missing instance ID'
> +            self.print_help()
> +            sys.exit(1)
> +
> +        instance_name = args[0]
> +
> +        for o, _ in opts:
> +            if o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.print_help()
> +                sys.exit(1)
> +
> +        instance = pki.server.PKIInstance(instance_name)
> +        instance.load()
> +        instance.stop()
> +
> +        self.print_message('%s instance stopped' % instance_name)
> diff --git a/base/server/python/pki/server/cli/subsystem.py b/base/server/python/pki/server/cli/subsystem.py
> new file mode 100644
> index 0000000000000000000000000000000000000000..7e487ebee9c82ba193166a91f7bf2c4074d0f7a6
> --- /dev/null
> +++ b/base/server/python/pki/server/cli/subsystem.py
> @@ -0,0 +1,310 @@
> +#!/usr/bin/python
> +# Authors:
> +#     Endi S. Dewata <edewata at redhat.com>
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License along
> +# with this program; if not, write to the Free Software Foundation, Inc.,
> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
> +# Copyright (C) 2015 Red Hat, Inc.
> +# All rights reserved.
> +#
> +
> +import getopt
> +import os
> +import sys
> +
> +import pki.cli
> +import pki.server
> +
> +
> +class SubsystemCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(SubsystemCLI, self).__init__('subsystem', 'Subsystem management commands')
> +
> +        self.add_module(SubsystemDisableCLI())
> +        self.add_module(SubsystemEnableCLI())
> +        self.add_module(SubsystemFindCLI())
> +        self.add_module(SubsystemShowCLI())
> +
> +    @staticmethod
> +    def print_subsystem(subsystem):
> +        print '  Subsystem ID: %s' % subsystem.name
> +        print '  Instance ID: %s' % subsystem.instance.name
> +        print '  Enabled: %s' % subsystem.is_enabled()
> +
> +
> +class SubsystemFindCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(SubsystemFindCLI, self).__init__('find', 'Find subsystems')
> +
> +    def usage(self):
> +        print 'Usage: pki-server subsystem-find [OPTIONS]'
> +        print
> +        print '  -i, --instance <instance ID>    Instance ID.'
> +        print '  -v, --verbose                   Run in verbose mode.'
> +        print '      --help                      Show help message.'
> +        print
> +
> +    def execute(self, args):
> +
> +        try:
> +            opts, _ = getopt.getopt(args, 'i:v', [
> +                'instance=',
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.usage()
> +            sys.exit(1)
> +
> +        instance_name = None
> +
> +        for o, a in opts:
> +            if o in ('-i', '--instance'):
> +                instance_name = a
> +
> +            elif o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.usage()
> +                sys.exit(1)
> +
> +        if not instance_name:
> +            print 'ERROR: missing instance ID'
> +            self.usage()
> +            sys.exit(1)
> +
> +        instance = pki.server.PKIInstance(instance_name)
> +        instance.load()
> +
> +        results = []
> +
> +        for name in os.listdir(instance.base_dir):
> +
> +            subsystem = pki.server.PKISubsystem(instance, name)
> +            if not subsystem.is_valid():
> +                continue
> +
> +            results.append(subsystem)
> +
> +        self.print_message('%s entries matched' % len(results))
> +
> +        first = True
> +        for subsystem in results:
> +            if first:
> +                first = False
> +            else:
> +                print
> +
> +            SubsystemCLI.print_subsystem(subsystem)
> +
> +
> +class SubsystemShowCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(SubsystemShowCLI, self).__init__('show', 'Show subsystem')
> +
> +    def usage(self):
> +        print 'Usage: pki-server subsystem-show [OPTIONS] <subsystem ID>'
> +        print
> +        print '  -i, --instance <instance ID>    Instance ID.'
> +        print '  -v, --verbose                   Run in verbose mode.'
> +        print '      --help                      Show help message.'
> +        print
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, args = getopt.getopt(argv, 'i:v', [
> +                'instance=',
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.usage()
> +            sys.exit(1)
> +
> +        if len(args) != 1:
> +            print 'ERROR: missing subsystem ID'
> +            self.usage()
> +            sys.exit(1)
> +
> +        subsystem_name = args[0]
> +        instance_name = None
> +
> +        for o, a in opts:
> +            if o in ('-i', '--instance'):
> +                instance_name = a
> +
> +            elif o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.usage()
> +                sys.exit(1)
> +
> +        if not instance_name:
> +            print 'ERROR: missing instance ID'
> +            self.usage()
> +            sys.exit(1)
> +
> +        instance = pki.server.PKIInstance(instance_name)
> +        instance.load()
> +
> +        subsystem = pki.server.PKISubsystem(instance, subsystem_name)
> +
> +        SubsystemCLI.print_subsystem(subsystem)
> +
> +
> +class SubsystemEnableCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(SubsystemEnableCLI, self).__init__('enable', 'Enable subsystem')
> +
> +    def usage(self):
> +        print 'Usage: pki-server subsystem-enable [OPTIONS] <subsystem ID>'
> +        print
> +        print '  -i, --instance <instance ID>    Instance ID.'
> +        print '  -v, --verbose                   Run in verbose mode.'
> +        print '      --help                      Show help message.'
> +        print
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, args = getopt.getopt(argv, 'i:v', [
> +                'instance=',
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.usage()
> +            sys.exit(1)
> +
> +        if len(args) != 1:
> +            print 'ERROR: missing subsystem ID'
> +            self.usage()
> +            sys.exit(1)
> +
> +        subsystem_name = args[0]
> +        instance_name = None
> +
> +        for o, a in opts:
> +            if o in ('-i', '--instance'):
> +                instance_name = a
> +
> +            elif o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.usage()
> +                sys.exit(1)
> +
> +        if not instance_name:
> +            print 'ERROR: missing instance ID'
> +            self.usage()
> +            sys.exit(1)
> +
> +        instance = pki.server.PKIInstance(instance_name)
> +        instance.load()
> +
> +        subsystem = pki.server.PKISubsystem(instance, subsystem_name)
> +        subsystem.enable()
> +
> +        self.print_message('Enabled "%s" subsystem' % subsystem_name)
> +
> +        SubsystemCLI.print_subsystem(subsystem)
> +
> +
> +class SubsystemDisableCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +        super(SubsystemDisableCLI, self).__init__('disable', 'Disable subsystem')
> +
> +    def usage(self):
> +        print 'Usage: pki-server subsystem-disable [OPTIONS] <subsystem ID>'
> +        print
> +        print '  -i, --instance <instance ID>    Instance ID.'
> +        print '  -v, --verbose                   Run in verbose mode.'
> +        print '      --help                      Show help message.'
> +        print
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, args = getopt.getopt(argv, 'i:v', [
> +                'instance=',
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.usage()
> +            sys.exit(1)
> +
> +        if len(args) != 1:
> +            print 'ERROR: missing subsystem ID'
> +            self.usage()
> +            sys.exit(1)
> +
> +        subsystem_name = args[0]
> +        instance_name = None
> +
> +        for o, a in opts:
> +            print 'option: %s %s' % (o, a)
> +            if o in ('-i', '--instance'):
> +                instance_name = a
> +
> +            elif o in ('-v', '--verbose'):
> +                self.set_verbose(True)
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.usage()
> +                sys.exit(1)
> +
> +        if not instance_name:
> +            print 'ERROR: missing instance ID'
> +            self.usage()
> +            sys.exit(1)
> +
> +        instance = pki.server.PKIInstance(instance_name)
> +        instance.load()
> +
> +        subsystem = pki.server.PKISubsystem(instance, subsystem_name)
> +        subsystem.disable()
> +
> +        self.print_message('Disabled "%s" subsystem' % subsystem_name)
> +
> +        SubsystemCLI.print_subsystem(subsystem)
> diff --git a/base/server/sbin/pki-server b/base/server/sbin/pki-server
> new file mode 100644
> index 0000000000000000000000000000000000000000..c730ebd20feef9ef6d853b4a186422af7c3e3a71
> --- /dev/null
> +++ b/base/server/sbin/pki-server
> @@ -0,0 +1,84 @@
> +#!/usr/bin/python
> +# Authors:
> +#     Endi S. Dewata <edewata at redhat.com>
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License along
> +# with this program; if not, write to the Free Software Foundation, Inc.,
> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
> +# Copyright (C) 2015 Red Hat, Inc.
> +# All rights reserved.
> +#
> +
> +import getopt
> +import sys
> +
> +import pki.cli
> +import pki.server.cli.instance
> +import pki.server.cli.subsystem
> +
> +class PKIServerCLI(pki.cli.CLI):
> +
> +    def __init__(self):
> +
> +        super(PKIServerCLI, self).__init__('pki-server', 'PKI server command-line interface')
> +
> +        self.add_module(pki.server.cli.instance.InstanceCLI())
> +        self.add_module(pki.server.cli.subsystem.SubsystemCLI())
> +
> +    def get_full_module_name(self, module_name):
> +        return module_name
> +
> +    def print_help(self):
> +
> +        print 'Usage: pki-server [OPTIONS]'
> +        print
> +        print '  -v, --verbose                Run in verbose mode.'
> +        print '      --help                   Show help message.'
> +        print
> +
> +        super(PKIServerCLI, self).print_help()
> +
> +    def execute(self, argv):
> +
> +        try:
> +            opts, args = getopt.getopt(argv[1:], 'v', [
> +                'verbose', 'help'])
> +
> +        except getopt.GetoptError as e:
> +            print 'ERROR: ' + str(e)
> +            self.print_help()
> +            sys.exit(1)
> +
> +        for o, _ in opts:
> +            if o in ('-v', '--verbose'):
> +                self.verbose = True
> +
> +            elif o == '--help':
> +                self.print_help()
> +                sys.exit()
> +
> +            else:
> +                print 'ERROR: unknown option ' + o
> +                self.print_help()
> +                sys.exit(1)
> +
> +        if self.verbose:
> +            print 'Command: %s' % ' '.join(args)
> +
> +        super(PKIServerCLI, self).execute(args)
> +
> +
> +if __name__ == '__main__':
> +    cli = PKIServerCLI()
> +    cli.init()
> +    cli.execute(sys.argv)
> diff --git a/base/server/share/conf/server.xml b/base/server/share/conf/server.xml
> index 306ebf25b9a2ac83f90e0e79e4530211ef7fc7ea..b9e8860b2179e1432ebef7d06ff9f2c70985c1b5 100644
> --- a/base/server/share/conf/server.xml
> +++ b/base/server/share/conf/server.xml
> @@ -253,7 +253,7 @@ Tomcat Port         = [TOMCAT_SERVER_PORT] (for shutdown)
>        -->
>        <Host name="localhost"
>              appBase="[PKI_INSTANCE_PATH]/webapps"
> -            unpackWARs="true" autoDeploy="false"
> +            unpackWARs="true" autoDeploy="true"
>              xmlValidation="false" xmlNamespaceAware="false">
>  
>          <!--
> diff --git a/base/server/upgrade/10.2.2/02-EnableWebApplicationAutoDeploy b/base/server/upgrade/10.2.2/02-EnableWebApplicationAutoDeploy
> new file mode 100755
> index 0000000000000000000000000000000000000000..7cafa6dcc1ebb0d98b1c0fd2d0a91180b4b9e57f
> --- /dev/null
> +++ b/base/server/upgrade/10.2.2/02-EnableWebApplicationAutoDeploy
> @@ -0,0 +1,56 @@
> +#!/usr/bin/python
> +# Authors:
> +#     Endi S. Dewata <edewata at redhat.com>
> +#
> +# This program is free software; you can redistribute it and/or modify
> +# it under the terms of the GNU General Public License as published by
> +# the Free Software Foundation; version 2 of the License.
> +#
> +# This program is distributed in the hope that it will be useful,
> +# but WITHOUT ANY WARRANTY; without even the implied warranty of
> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> +# GNU General Public License for more details.
> +#
> +# You should have received a copy of the GNU General Public License along
> +# with this program; if not, write to the Free Software Foundation, Inc.,
> +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
> +#
> +# Copyright (C) 2014 Red Hat, Inc.
> +# All rights reserved.
> +#
> +
> +import grp
> +import os
> +import pwd
> +import shutil
> +import signal
> +import sys
> +from lxml import etree
> +
> +import pki
> +import pki.server.upgrade
> +
> +
> +class EnableWebApplicationAutoDeploy(pki.server.upgrade.PKIServerUpgradeScriptlet):
> +
> +    def __init__(self):
> +
> +        self.message = 'Enabled Web application auto deploy'
> +
> +        self.parser = etree.XMLParser(remove_blank_text=True)
> +
> +    def upgrade_instance(self, instance):
> +
> +        server_xml = os.path.join(instance.conf_dir, 'server.xml')
> +        self.backup(server_xml)
> +
> +        document = etree.parse(server_xml, self.parser)
> +
> +        server = document.getroot()
> +        hosts = server.findall('.//Host')
> +
> +        for host in hosts:
> +            host.set('autoDeploy', 'true')
> +
> +        with open(server_xml, 'w') as f:
> +            f.write(etree.tostring(document, pretty_print=True))
> diff --git a/pylint-build-scan.sh b/pylint-build-scan.sh
> index bc5efb711720a830915a65eee8ca11a606f3721a..a4bff6bfc6e59fd1a5c45c8ba8fe20806e5eef08 100755
> --- a/pylint-build-scan.sh
> +++ b/pylint-build-scan.sh
> @@ -19,7 +19,13 @@ PYLINT_REPORT_PATH="`cd $HOME_DIR/../.. ; pwd`/pylint-report"
>  
>  cd $PYTHON_PACKAGE_DIR
>  
> -rv=`pylint --rcfile=$PYLINT_RC_FILE_PATH pki/ $HOME_DIR/usr/sbin/pkispawn $HOME_DIR/usr/sbin/pkidestroy $HOME_DIR/usr/sbin/pki-upgrade $HOME_DIR/usr/sbin/pki-server-upgrade >> $PYLINT_REPORT_PATH`
> +FILES="pki/"
> +FILES="$FILES $HOME_DIR/usr/sbin/pkispawn"
> +FILES="$FILES $HOME_DIR/usr/sbin/pkidestroy"
> +FILES="$FILES $HOME_DIR/usr/sbin/pki-upgrade"
> +FILES="$FILES $HOME_DIR/usr/sbin/pki-server"
> +FILES="$FILES $HOME_DIR/usr/sbin/pki-server-upgrade"
> +rv=`pylint --rcfile=$PYLINT_RC_FILE_PATH $FILES >> $PYLINT_REPORT_PATH`
>  
>  status=$?
>  
> diff --git a/specs/pki-core.spec b/specs/pki-core.spec
> index bac0083f8d1c6f4e62c9653144003fda774b39b8..dbd5de62ea12f1a501bf64d7fedb307e840702cd 100644
> --- a/specs/pki-core.spec
> +++ b/specs/pki-core.spec
> @@ -791,6 +791,7 @@ echo >> /var/log/pki/pki-server-upgrade-%{version}.log 2>&1
>  %{_sysconfdir}/pki/default.cfg
>  %{_sbindir}/pkispawn
>  %{_sbindir}/pkidestroy
> +%{_sbindir}/pki-server
>  %{_sbindir}/pki-server-upgrade
>  #%{_bindir}/pki-setup-proxy
>  %{python_sitelib}/pki/server/
> -- 
> 1.8.4.2
> 

> _______________________________________________
> Pki-devel mailing list
> Pki-devel at redhat.com
> https://www.redhat.com/mailman/listinfo/pki-devel




More information about the Pki-devel mailing list