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)
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)
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)
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)
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)
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)
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)
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
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 = {}
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
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)
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
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)
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)
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)
def validate(self): if not self.is_valid(): raise pki.PKIException('Invalid instance: ' + self.__repr__(), None)
def validate(self): if not self.is_valid(): raise pki.PKIException('Invalid subsystem: ' + self.__repr__(), None, self.instance)
def validate(self): if not self.exists(): raise pki.PKIException('Invalid instance: ' + self.name, None)