Example #1
0
    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.warning("Nothing to purge")
            return 0

        if not opts.force:
            LOG.warning("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
Example #2
0
    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.warning("Nothing to purge")
            return 0

        if not opts.force:
            LOG.warning(
                "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
Example #3
0
    def run(self, cmd, opts, *args):
        """
        get backup informantion and call print table
        """
        if args:
            print("The list-backup command takes no arguments", file=sys.stderr)
        backup_list = list(SPOOL.list_backups())
        if not backup_list:
            print("No backups")
            return 0

        backupsets_seen = []
        for backup in backup_list:
            if backup.backupset not in backupsets_seen:
                backupsets_seen.append(backup.backupset)
                print("Backupset[%s]:" % (backup.backupset))
            # Read the backup.conf
            backup.load_config()
            plugin_name = backup.config.get("holland:backup", {})["plugin"]
            if not plugin_name:
                print("Skipping broken backup: %s" % backup.name)
                continue
            print("\t%s" % backup.name)
            if opts.verbose:
                print("\t", backup.info())
                plugin = load_backup_plugin(plugin_name)
                plugin = plugin(backup.backupset, backup.config, backup.path)
                if hasattr(plugin, "info"):
                    plugin_info = plugin.info()
                    rec = re.compile(r"^", re.M)
                    print(rec.sub("\t\t", plugin_info))

        return 0
Example #4
0
    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()
Example #5
0
    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()
Example #6
0
    def run(self, cmd, opts, *args):
        """
        get backup informantion and call print table
        """
        if args:
            print("The list-backup command takes no arguments", file=sys.stderr)
        backup_list = [x for x in SPOOL.list_backups()]
        if not backup_list:
            print("No backups")
            return 0

        backupsets_seen = []
        for backup in backup_list:
            if backup.backupset not in backupsets_seen:
                backupsets_seen.append(backup.backupset)
                print("Backupset[%s]:" % (backup.backupset))
            # Read the backup.conf
            backup.load_config()
            plugin_name = backup.config.get("holland:backup", {})["plugin"]
            if not plugin_name:
                print("Skipping broken backup: %s" % backup.name)
                continue
            print("\t%s" % backup.name)
            if opts.verbose:
                print("\t", backup.info())
                plugin = load_backup_plugin(plugin_name)
                plugin = plugin(backup.backupset, backup.config, backup.path)
                if hasattr(plugin, "info"):
                    plugin_info = plugin.info()
                    import re

                    rec = re.compile(r"^", re.M)
                    print(rec.sub("\t\t", plugin_info))

        return 0
Example #7
0
 def run(self, cmd, opts, *args):
     backup = SPOOL.find_backup(args[0])
     if not backup:
         logging.error("No backup found named %s", args[0])
         return 1
     config = backup.config
     plugin_name = config.get('holland:backup', {}).get('plugin')
     plugin = load_first_entrypoint('holland.restore', plugin_name)(backup)
     plugin.dispatch([plugin_name] + list(args))
     return 1