def run(self, cmd, opts, *backups): error = 0 if not backups: LOG.info("No backupsets specified - using backupsets from %s", hollandcfg.filename) backups = hollandcfg.lookup('holland.backupsets') if not backups: LOG.warn("Nothing to purge") return 0 if not opts.force: LOG.warn( "Running in dry-run mode. Use --execute to do a real purge.") for name in backups: if '/' not in name: backupset = spool.find_backupset(name) if not backupset: LOG.error("Failed to find backupset '%s'", name) error = 1 continue purge_backupset(backupset, opts.force, opts.all) else: backup = spool.find_backup(name) if not backup: LOG.error("Failed to find single backup '%s'", name) error = 1 continue purge_backup(backup, opts.force) if opts.force: spool.find_backupset(backup.backupset).update_symlinks() return error
def run(self, cmd, opts, *backups): error = 0 if not backups: LOG.info("No backupsets specified - using backupsets from %s", hollandcfg.filename) backups = hollandcfg.lookup('holland.backupsets') if not backups: LOG.warn("Nothing to purge") return 0 if not opts.force: LOG.warn("Running in dry-run mode. Use --execute to do a real purge.") for name in backups: if '/' not in name: backupset = spool.find_backupset(name) if not backupset: LOG.error("Failed to find backupset '%s'", name) error = 1 continue purge_backupset(backupset, opts.force, opts.all) else: backup = spool.find_backup(name) if not backup: LOG.error("Failed to find single backup '%s'", name) error = 1 continue purge_backup(backup, opts.force) if opts.force: spool.find_backupset(backup.backupset).update_symlinks() return error
def __call__(self, event, entry): purge_policy = entry.config["holland:backup"]["purge-policy"] if event == "before-backup" and purge_policy != "before-backup": return if event == "after-backup" and purge_policy != "after-backup": return backupset = spool.find_backupset(entry.backupset) if not backupset: LOG.info("Nothing to purge") return retention_count = entry.config["holland:backup"]["backups-to-keep"] retention_count = int(retention_count) if event == "after-backup" and retention_count == 0: # Always maintain latest backup LOG.warning( "!! backups-to-keep set to 0, but " "purge-policy = after-backup. This would immediately " "purge all backups which is probably not intended. " "Setting backups-to-keep to 1" ) retention_count = 1 if event == "before-backup": retention_count += 1 self.purge_backupset(backupset, retention_count) backupset.update_symlinks()
def purge_old_backups(backupset, backups_to_keep=1, exclude=()): assert backups_to_keep > 0 LOGGER.info("Purging old backups from backupset '%s'", backupset) backupset = spool.find_backupset(backupset) if not backupset: backups = [] else: backups = [ bk for bk in backupset.list_backups(reverse=True) if bk not in exclude ] # Make sure we keep holland:backup.backups-to-keep LOGGER.info("Found %d backups. Keeping %d", len(backups), backups_to_keep) purge_list = [] for backup in backups: if backup.config.get('holland:backup', {}).get('stop-time', 0) == 0: LOGGER.debug("Purging broken backup") purge_list.insert(0, backup) elif backups_to_keep == 0: LOGGER.debug("Purging old backup") purge_list.insert(0, backup) else: LOGGER.debug("Retaining backup %s", backup.name) backups_to_keep -= 1 if not purge_list: LOGGER.info("No backups to purge") else: for backup in purge_list: LOGGER.info("Purging %s", backup.name) backup.purge()
def purge_old_backups(backupset, backups_to_keep=1, exclude=()): assert backups_to_keep > 0 LOGGER.info("Purging old backups from backupset '%s'", backupset) backupset = spool.find_backupset(backupset) if not backupset: backups = [] else: backups = [bk for bk in backupset.list_backups(reverse=True) if bk not in exclude] # Make sure we keep holland:backup.backups-to-keep LOGGER.info("Found %d backups. Keeping %d", len(backups), backups_to_keep) purge_list = [] for backup in backups: if backup.config.get('holland:backup',{}).get('stop-time', 0) == 0: LOGGER.debug("Purging broken backup") purge_list.insert(0, backup) elif backups_to_keep == 0: LOGGER.debug("Purging old backup") purge_list.insert(0, backup) else: LOGGER.debug("Retaining backup %s", backup.name) backups_to_keep -= 1 if not purge_list: LOGGER.info("No backups to purge") else: for backup in purge_list: LOGGER.info("Purging %s", backup.name) backup.purge()
def __call__(self, event, entry): purge_policy = entry.config['holland:backup']['purge-policy'] if event == 'before-backup' and purge_policy != 'before-backup': return if event == 'after-backup' and purge_policy != 'after-backup': return backupset = spool.find_backupset(entry.backupset) if not backupset: LOG.info("Nothing to purge") return retention_count = entry.config['holland:backup']['backups-to-keep'] retention_count = int(retention_count) if event == 'after-backup' and retention_count == 0: # Always maintain latest backup LOG.warning("!! backups-to-keep set to 0, but " "purge-policy = after-backup. This would immediately " "purge all backups which is probably not intended. " "Setting backups-to-keep to 1") retention_count = 1 if event == 'before-backup': retention_count += 1 self.purge_backupset(backupset, retention_count) backupset.update_symlinks()