def run(self): options = self.options super(Backup, self).run() api.bootstrap(in_server=True, context='backup') api.finalize() self.log.info("Preparing backup on %s", api.env.host) pent = pwd.getpwnam(constants.DS_USER) self.top_dir = tempfile.mkdtemp("ipa") os.chown(self.top_dir, pent.pw_uid, pent.pw_gid) os.chmod(self.top_dir, 0o750) self.dir = os.path.join(self.top_dir, "ipa") os.mkdir(self.dir) os.chmod(self.dir, 0o750) os.chown(self.dir, pent.pw_uid, pent.pw_gid) self.header = os.path.join(self.top_dir, 'header') cwd = os.getcwd() try: dirsrv = services.knownservices.dirsrv self.add_instance_specific_data() # We need the dirsrv running to get the list of services dirsrv.start(capture_output=False) self.get_connection() self.create_header(options.data_only) if options.data_only: if not options.online: self.log.info('Stopping Directory Server') dirsrv.stop(capture_output=False) else: self.log.info('Stopping IPA services') run(['ipactl', 'stop']) instance = installutils.realm_to_serverid(api.env.realm) if os.path.exists(paths.VAR_LIB_SLAPD_INSTANCE_DIR_TEMPLATE % instance): if os.path.exists(paths.SLAPD_INSTANCE_DB_DIR_TEMPLATE % (instance, 'ipaca')): self.db2ldif(instance, 'ipaca', online=options.online) self.db2ldif(instance, 'userRoot', online=options.online) self.db2bak(instance, online=options.online) if not options.data_only: # create backup of auth configuration auth_backup_path = os.path.join(paths.VAR_LIB_IPA, 'auth_backup') tasks.backup_auth_configuration(auth_backup_path) self.file_backup(options) self.finalize_backup(options.data_only, options.gpg, options.gpg_keyring) if options.data_only: if not options.online: self.log.info('Starting Directory Server') dirsrv.start(capture_output=False) else: self.log.info('Starting IPA service') run(['ipactl', 'start']) finally: try: os.chdir(cwd) except Exception as e: self.log.error('Cannot change directory to %s: %s' % (cwd, e)) shutil.rmtree(self.top_dir)
def run(self): options = self.options super(Backup, self).run() api.bootstrap(in_server=True, context='backup', confdir=paths.ETC_IPA) api.finalize() logger.info("Preparing backup on %s", api.env.host) pent = pwd.getpwnam(constants.DS_USER) self.top_dir = tempfile.mkdtemp("ipa") os.chown(self.top_dir, pent.pw_uid, pent.pw_gid) os.chmod(self.top_dir, 0o750) self.dir = os.path.join(self.top_dir, "ipa") os.mkdir(self.dir) os.chmod(self.dir, 0o750) os.chown(self.dir, pent.pw_uid, pent.pw_gid) self.tarfile = None self.header = os.path.join(self.top_dir, 'header') cwd = os.getcwd() try: dirsrv = services.knownservices.dirsrv self.add_instance_specific_data() # We need the dirsrv running to get the list of services dirsrv.start(capture_output=False) self.get_connection() self.create_header(options.data_only) if options.data_only: if not options.online: logger.info('Stopping Directory Server') dirsrv.stop(capture_output=False) else: logger.info('Stopping IPA services') run([paths.IPACTL, 'stop']) instance = ipaldap.realm_to_serverid(api.env.realm) if os.path.exists(paths.VAR_LIB_SLAPD_INSTANCE_DIR_TEMPLATE % instance): if os.path.exists(paths.SLAPD_INSTANCE_DB_DIR_TEMPLATE % (instance, 'ipaca')): self.db2ldif(instance, 'ipaca', online=options.online) self.db2ldif(instance, 'userRoot', online=options.online) self.db2bak(instance, online=options.online) if not options.data_only: # create backup of auth configuration auth_backup_path = os.path.join(paths.VAR_LIB_IPA, 'auth_backup') tasks.backup_auth_configuration(auth_backup_path) self.file_backup(options) if options.data_only: if not options.online: logger.info('Starting Directory Server') dirsrv.start(capture_output=False) else: logger.info('Starting IPA service') run([paths.IPACTL, 'start']) # Compress after services are restarted to minimize # the unavailability window if not options.data_only: self.compress_file_backup() self.finalize_backup(options.data_only, options.gpg, options.gpg_keyring) finally: try: os.chdir(cwd) except Exception as e: logger.error('Cannot change directory to %s: %s', cwd, e) shutil.rmtree(self.top_dir)