def download_disk(connection, backup_uuid, disk, disk_path, args, incremental=False): progress("Creating image transfer for disk %s" % disk.id) transfer = imagetransfer.create_transfer( connection, disk, types.ImageTransferDirection.DOWNLOAD, backup=types.Backup(id=backup_uuid)) try: progress("Image transfer %s is ready" % transfer.id) download_url = transfer.transfer_url extra_args = {} parameters = inspect.signature(client.download).parameters # Use multiple workers to speed up the download. if "max_workers" in parameters: extra_args["max_workers"] = args.max_workers # Use proxy_url if available. Download will use proxy_url if # transfer_url is not available. if "proxy_url" in parameters: extra_args["proxy_url"] = transfer.proxy_url with client.ProgressBar() as pb: client.download(download_url, disk_path, args.cafile, incremental=incremental, secure=args.secure, buffer_size=args.buffer_size, progress=pb, **extra_args) finally: progress("Finalizing image transfer") imagetransfer.finalize_transfer(connection, transfer, disk)
args = parser.parse_args() common.configure_logging(args) connection = common.create_connection(args) with closing(connection): system_service = connection.system_service() disks_service = connection.system_service().disks_service() disk_service = disks_service.disk_service(args.disk_uuid) disk = disk_service.get() transfer = imagetransfer.create_transfer( connection, disk, types.ImageTransferDirection.DOWNLOAD) try: url = urlparse(transfer.transfer_url) con = client.HTTPSConnection( url.netloc, context=ssl.create_default_context(cafile=args.cafile)) with closing(con): con.request("GET", url.path + "/checksum") res = con.getresponse() if res.status != client.OK: error = res.read().decode("utf-8", "replace") raise RuntimeError( "Error computing checksum: {}".format(error)) result = json.loads(res.read()) print(json.dumps(result, indent=4)) finally: imagetransfer.finalize_transfer(connection, transfer, disk)
progress("Transfer ID: %s" % transfer.id) progress("Transfer host name: %s" % transfer.host.name) extra_args = {} if args.use_proxy: download_url = transfer.proxy_url else: download_url = transfer.transfer_url extra_args["proxy_url"] = transfer.proxy_url if args.backing_file: extra_args["backing_file"] = os.path.basename(args.backing_file) extra_args["backing_format"] = "qcow2" progress("Downloading image...") with client.ProgressBar() as pb: client.download(download_url, args.filename, args.cafile, secure=args.secure, max_workers=args.max_workers, buffer_size=args.buffer_size, progress=pb, **extra_args) finally: progress("Finalizing image transfer...") imagetransfer.finalize_transfer(connection, transfer, disk_snapshot.disk)