Example #1
0
    def upgrade_version(self, version):

        print('Upgrading from version ' + str(version) + ' to ' +
              str(version.next) + ':')

        scriptlets = self.scriptlets(version)

        if len(scriptlets) == 0:

            print('No upgrade scriptlets.')

            self.set_tracker(version.next)
            return

        # execute scriptlets
        for scriptlet in scriptlets:

            message = str(scriptlet.index) + '. ' + scriptlet.message

            if self.silent:
                print(message)

            else:
                result = pki.read_text(message + ' (Yes/No)',
                                       options=['Y', 'N'],
                                       default='Y',
                                       case_sensitive=False).lower()

                if result == 'n':
                    raise pki.PKIException('Upgrade canceled.')

            try:
                scriptlet.init()
                scriptlet.upgrade()

            except pki.PKIException:
                raise

            except Exception as e:  # pylint: disable=W0703

                print()

                message = 'Upgrade failed: %s' % e

                if verbose:
                    traceback.print_exc()
                else:
                    print(e)

                print()

                result = pki.read_text('Continue (Yes/No)',
                                       options=['Y', 'N'],
                                       default='Y',
                                       delimiter='?',
                                       case_sensitive=False).lower()

                if result == 'n':
                    raise pki.PKIException(message, e)
Example #2
0
    def upgrade_version(self, version):

        if version == version.next:
            print('Upgrading version %s:' % version)
        else:
            print('Upgrading from version %s to %s:' % (version, version.next))

        scriptlets = self.scriptlets(version)

        if len(scriptlets) == 0:

            print('No upgrade scriptlets.')

            self.set_tracker(version.next)
            return

        # execute scriptlets
        for scriptlet in scriptlets:

            message = str(scriptlet.index) + '. ' + scriptlet.message

            if self.silent:
                print(message)

            else:
                result = pki.util.read_text(message + ' (Yes/No)',
                                            options=['Y', 'N'],
                                            default='Y',
                                            case_sensitive=False).lower()

                if result == 'n':
                    raise pki.PKIException('Upgrade canceled.')

            try:
                scriptlet.init()
                scriptlet.upgrade()

            except Exception as e:  # pylint: disable=W0703

                print()

                message = 'Upgrade failed: %s' % e

                if logger.isEnabledFor(logging.INFO):
                    logger.exception(e)
                else:
                    logger.error(e)

                print()

                result = pki.util.read_text('Continue (Yes/No)',
                                            options=['Y', 'N'],
                                            default='Y',
                                            delimiter='?',
                                            case_sensitive=False).lower()

                if result == 'n':
                    raise pki.PKIException(message, e)
Example #3
0
    def revert_version(self, version):

        print('Reverting to version ' + str(version) + ':')

        scriptlets = self.scriptlets(version)
        scriptlets.reverse()

        for scriptlet in scriptlets:

            message = str(scriptlet.index) + '. ' + scriptlet.message

            if self.silent:
                print(message)

            else:
                result = pki.read_text(message + ' (Yes/No)',
                                       options=['Y', 'N'],
                                       default='Y',
                                       case_sensitive=False).lower()

                if result == 'n':
                    raise pki.PKIException('Revert canceled.')

            try:
                scriptlet.revert()

            except pki.PKIException:
                raise

            except Exception as e:  # pylint: disable=W0703

                print()

                message = 'Revert failed: %s' % e

                if verbose:
                    traceback.print_exc()
                else:
                    print(e)

                print()

                result = pki.read_text('Continue (Yes/No)',
                                       options=['Y', 'N'],
                                       default='Y',
                                       delimiter='?',
                                       case_sensitive=False).lower()

                if result == 'n':
                    raise pki.PKIException(message, e)

        self.set_tracker(version)
Example #4
0
    def upgrade(self):

        try:
            if not self.can_upgrade():
                logger.info('Skipping system')
                return

            logger.info('Upgrading system')
            self.upgrade_system()
            self.update_tracker()

        except Exception as e:

            if logger.isEnabledFor(logging.INFO):
                logger.exception(e)
            else:
                logger.error(e)

            message = 'Failed upgrading system.'
            if self.upgrader.silent:
                print(message)
            else:
                result = pki.util.read_text(message + ' Continue (Yes/No)',
                                            options=['Y', 'N'],
                                            default='Y',
                                            delimiter='?',
                                            case_sensitive=False).lower()
                if result == 'y':
                    return

            raise pki.PKIException('Upgrade failed: %s' % e, e)
Example #5
0
    def revert_version(self, version):

        print('Reverting to version ' + str(version) + ':')

        scriptlets = self.scriptlets(version)
        scriptlets.reverse()

        for scriptlet in scriptlets:

            message = str(scriptlet.index) + '. ' + scriptlet.message
            print(message)

            try:
                scriptlet.revert()

            except Exception as e:  # pylint: disable=W0703

                print()

                message = 'Revert failed: %s' % e

                if logger.isEnabledFor(logging.INFO):
                    logger.exception(e)
                else:
                    logger.error(e)

                raise pki.PKIException(message, e)

        self.set_tracker(version)
Example #6
0
    def upgrade(self):

        try:
            if not self.can_upgrade():
                if verbose:
                    print('Skipping system.')
                return

            if verbose:
                print('Upgrading system.')
            self.upgrade_system()
            self.update_tracker()

        except Exception as e:

            if verbose:
                traceback.print_exc()
            else:
                print('ERROR: %s' % e)

            message = 'Failed upgrading system.'
            if self.upgrader.silent:
                print(message)
            else:
                result = pki.read_text(message + ' Continue (Yes/No)',
                                       options=['Y', 'N'],
                                       default='Y',
                                       delimiter='?',
                                       case_sensitive=False).lower()
                if result == 'y':
                    return

            raise pki.PKIException('Upgrade failed: %s' % e, e)
Example #7
0
    def test_issue_raises_error_pki_exception(self):
        order_meta = {dogtag_import.DogtagCAPlugin.PROFILE_ID: self.profile_id}
        plugin_meta = {}

        self.certclient_mock.enroll_cert.side_effect = (
            pki.PKIException("generic enrollment error"))

        self.assertRaises(cm.CertificateGeneralException,
                          self.plugin.issue_certificate_request, self.order_id,
                          order_meta, plugin_meta)
Example #8
0
    def __init__(self, upgrade_dir=UPGRADE_DIR, version=None, index=None):

        self.upgrade_dir = upgrade_dir
        self.version = version
        self.index = index

        if version and not os.path.exists(self.version_dir(version)):
            raise pki.PKIException('Invalid scriptlet version: ' +
                                   str(version))

        self.system_tracker = None
Example #9
0
    def __init__(self, instanceName=None, instance_version=None,  # noqa: N803
                 subsystemName=None, upgrade_dir=UPGRADE_DIR,  # noqa: N803
                 version=None, index=None, silent=False):
        super(PKIServerUpgrader, self).__init__(
            upgrade_dir, version, index, silent)

        if subsystemName and not instanceName:
            raise pki.PKIException(
                'Invalid subsystem: ' + subsystemName +
                ', Instance not defined')

        self.instanceName = instanceName
        self.instance_version = instance_version
        self.subsystemName = subsystemName

        self.instance_trackers = {}
        self.subsystem_trackers = {}
Example #10
0
    def scriptlets(self, version):
        scriptlets = []

        version_dir = self.version_dir(version)
        if not os.path.exists(version_dir):
            return scriptlets

        filenames = os.listdir(version_dir)
        for filename in filenames:

            # parse <index>-<classname>
            try:
                i = filename.index('-')
            except ValueError as e:
                raise pki.PKIException(
                    'Invalid scriptlet name: ' + filename,
                    e)

            index = int(filename[0:i])
            classname = filename[i + 1:]

            if self.index and index != self.index:
                continue

            # load scriptlet class
            variables = {}
            absname = os.path.join(version_dir, filename)
            with open(absname, 'r') as f:
                bytecode = compile(f.read(), absname, 'exec')
            exec(bytecode, variables)  # pylint: disable=W0122

            # create scriptlet object
            scriptlet = variables[classname]()

            scriptlet.upgrader = self
            scriptlet.version = version
            scriptlet.index = index
            scriptlet.last = index == len(filenames)

            scriptlets.append(scriptlet)

        # sort scriptlets based on index
        scriptlets.sort()

        return scriptlets
Example #11
0
    def run_scriptlet(self, scriptlet):

        try:
            logger.info('Upgrading system')
            scriptlet.upgrade_system()
            self.update_tracker(scriptlet)

        except Exception as e:

            if logger.isEnabledFor(logging.INFO):
                logger.exception(e)
            else:
                logger.error(e)

            message = 'Failed upgrading system.'
            print(message)

            raise pki.PKIException('Upgrade failed: %s' % e, e)
Example #12
0
    def read_external_certs(conf_file):
        external_certs = []
        # load external certs data
        if os.path.exists(conf_file) and os.stat(conf_file).st_size > 0:
            tmp_certs = {}
            lines = open(conf_file).read().splitlines()
            for line in lines:
                m = re.search('(\\d+)\\.(\\w+)=(.*)', line)
                if not m:
                    raise pki.PKIException('Error parsing %s' % conf_file)
                indx = m.group(1)
                attr = m.group(2)
                value = m.group(3)
                if indx not in tmp_certs:
                    tmp_certs[indx] = ExternalCert()

                setattr(tmp_certs[indx], attr, value)
            external_certs = tmp_certs.values()
        return external_certs
Example #13
0
    def upgrade(self):

        try:
            if not self.can_upgrade():
                logger.info('Skipping system')
                return

            logger.info('Upgrading system')
            self.upgrade_system()
            self.update_tracker()

        except Exception as e:

            if logger.isEnabledFor(logging.INFO):
                logger.exception(e)
            else:
                logger.error(e)

            message = 'Failed upgrading system.'
            print(message)

            raise pki.PKIException('Upgrade failed: %s' % e, e)
Example #14
0
    def upgrade_version(self, version):

        if version == version.next:
            print('Upgrading version %s:' % version)
        else:
            print('Upgrading from version %s to %s:' % (version, version.next))

        scriptlets = self.scriptlets(version)

        if len(scriptlets) == 0:

            print('No upgrade scriptlets.')

            self.set_tracker(version.next)
            return

        # execute scriptlets
        for scriptlet in scriptlets:

            message = str(scriptlet.index) + '. ' + scriptlet.message
            print(message)

            try:
                self.init_scriptlet(scriptlet)
                self.run_scriptlet(scriptlet)

            except Exception as e:  # pylint: disable=W0703

                print()

                message = 'Upgrade failed: %s' % e

                if logger.isEnabledFor(logging.INFO):
                    logger.exception(e)
                else:
                    logger.error(e)

                raise pki.PKIException(message, e)
Example #15
0
    def revert_version(self, version):

        print('Reverting to version ' + str(version) + ':')

        scriptlets = self.scriptlets(version)
        scriptlets.reverse()

        for scriptlet in scriptlets:

            message = str(scriptlet.index) + '. ' + scriptlet.message
            print(message)

            try:
                scriptlet.revert()

            except Exception as e:  # pylint: disable=W0703

                print()

                message = 'Revert failed: %s' % e

                if logger.isEnabledFor(logging.INFO):
                    logger.exception(e)
                else:
                    logger.error(e)

                print()

                result = pki.util.read_text('Continue (Yes/No)',
                                            options=['Y', 'N'],
                                            default='Y',
                                            delimiter='?',
                                            case_sensitive=False).lower()

                if result == 'n':
                    raise pki.PKIException(message, e)

        self.set_tracker(version)
Example #16
0
 def validate(self):
     if not self.is_valid():
         raise pki.PKIException('Invalid instance: ' + self.__repr__(),
                                None)
Example #17
0
 def validate(self):
     if not self.is_valid():
         raise pki.PKIException('Invalid subsystem: ' + self.__repr__(),
                                None, self.instance)
Example #18
0
 def validate(self):
     if not self.exists():
         raise pki.PKIException('Invalid instance: ' + self.name, None)