def manual_backup(): backend = Backend() # keyfile is in vault directories_to_backup = action_get('directory-list') timestamp = "{:%Y-%m-%d-%H-%M-%S}".format(datetime.datetime.now()) try: log("Running a manual backup on {}".format(directories_to_backup), level=DEBUG) for directory in directories_to_backup: check_output( ["/snap/bin/preserve", "--configdir", os.path.join(os.path.expanduser("~"), ".config"), "--loglevel", "error", "create", "{name}-{timestamp}".format(name=directory, timestamp=timestamp), str(directory), "--backend", backend.get_backend(), "--vault" ]) except OSError as err: log("Create backup failed with error: {}".format(err.message), level=ERROR) action_fail("List backup failed with error: {}".format(err.message))
def list_backups(): backend = Backend() try: log("Listing backups", level=DEBUG) preserve_list = check_output( ["/snap/bin/preserve", "--configdir", os.path.join(os.path.expanduser("~"), ".config"), "--loglevel", "error", "list", "--vault", "--backend", backend.get_backend(), "--json"]) try: backup_list = json.loads(preserve_list) action_set({"message": backup_list}) except ValueError as verr: log("Unable to load preserve output as json. Error {}".format( verr), level=ERROR) action_fail( "Json loading of preserve output failed: {}".format(verr)) except OSError as err: log("List backup failed with error: {}".format(err.message), level=ERROR) action_fail("List backup failed with error: {}".format(err.message))
def setup_cron_job(cron_spec, directories_list): cron_path = os.path.join(os.sep, "etc", "cron.d", "backup") context = {'directories': directories_list} backend = Backend() # Overwrite the file if needed try: context['cron_spec'] = cron_spec context['backend'] = backend.get_backend() context['configdir'] = CONFIG_DIR # Add --vault flag if vault is related if relation_ids('vault'): context['vault'] = True else: context['vault'] = False render('backup_cron', cron_path, context, perms=0o644) except IOError as err: log("Error creating cron file: {}".format(err.message), level='error')
def restore_backup(): backend = Backend() backup_name = action_get("backup-name") restore_path = action_get("restore-path") if not os.path.exists(restore_path): log("Creating restore path: {}".format(restore_path)) os.mkdir(restore_path) try: log("Restoring backup {} to {}".format(backup_name, restore_path), level=DEBUG) check_output( ["/snap/bin/preserve", "--configdir", os.path.join(os.path.expanduser("~"), ".config"), "--loglevel", "error", "restore", "--backend", backend.get_backend(), "--vault", backup_name, restore_path]) except OSError as err: log("Restore backup failed with error: {}".format(err.message), level=ERROR) action_fail("Restore backup failed with error: {}".format(err.message))