def delete(filename, destination=DEFAULT_DESTINATION, profile="default", **kwargs): """Delete a backup. :type filename: str :param filename: stored filename to delete. :type destination: str :param destination: glacier|s3 :type profile: str :param profile: Profile name (default by default). :type conf: dict :keyword conf: A dict with a custom configuration. :type conf: dict :keyword conf: Override/set AWS configuration. :rtype: bool :return: True if the file is deleted. """ conf = kwargs.get("conf", None) if not filename: log.error("No file to delete, use -f to specify one.") return backup = dump_truck_get_backup(filename, destination, profile) if not backup: log.error("No file matched.") return key_name = backup.get("stored_filename") storage_backend = _get_store_backend(conf, destination, profile) log.info("Deleting {0}".format(key_name)) storage_backend.delete(key_name) dump_truck_delete_backup(key_name) return True
def restore(filename, destination=DEFAULT_DESTINATION, profile="default", **kwargs): """Restore backup in the current working directory. :type filename: str :param filename: File/directory to backup. :type destination: str :param destination: s3|glacier :type profile: str :param profile: Profile name (default by default). :type conf: dict :keyword conf: Override/set AWS configuration. :rtype: bool :return: True if successful. """ conf = kwargs.get("conf", None) storage_backend = _get_store_backend(conf, destination, profile) if not filename: log.error("No file to restore, use -f to specify one.") return backup = dump_truck_get_backup(filename, destination, profile) if not backup: log.error("No file matched.") return key_name = backup.get("stored_filename") log.info("Restoring " + key_name) # Asking password before actually download to avoid waiting if key_name and key_name.endswith(".enc"): password = kwargs.get("password") if not password: password = getpass() log.info("Downloading...") download_kwargs = {} if kwargs.get("job_check"): download_kwargs["job_check"] = True log.info("Job Check: " + repr(download_kwargs)) out = storage_backend.download(key_name, **download_kwargs) if kwargs.get("job_check"): log.info("Job Check Request") # If it's a job_check call, we return Glacier job data return out if out and key_name.endswith(".enc"): log.info("Decrypting...") decrypted_out = tempfile.TemporaryFile() decrypt(out, decrypted_out, password) out = decrypted_out if out: log.info("Uncompressing...") out.seek(0) tar = tarfile.open(fileobj=out) tar.extractall() tar.close() return True