def safe_copy_vdis(session, sr_path, vdi_uuids, uuid_stack): staging_path = utils.make_staging_area(sr_path) try: _copy_vdis(sr_path, staging_path, vdi_uuids) return utils.import_vhds(sr_path, staging_path, uuid_stack) finally: utils.cleanup_staging_area(staging_path)
def download_vhd2(session, image_id, endpoint, uuid_stack, sr_path, extra_headers, api_version=1): """Download an image from Glance v2, unbundle it, and then deposit the VHDs into the storage repository. """ staging_path = utils.make_staging_area(sr_path) try: # Download tarball into staging area and extract it # TODO(mfedosin): remove this check when v1 is deprecated. if api_version == 1: _download_tarball_by_url_v1(sr_path, staging_path, image_id, endpoint, extra_headers) else: _download_tarball_by_url_v2(sr_path, staging_path, image_id, endpoint, extra_headers) # Move the VHDs from the staging area into the storage repository return utils.import_vhds(sr_path, staging_path, uuid_stack) finally: utils.cleanup_staging_area(staging_path)
def download_vhd(session, image_id, torrent_url, torrent_seed_duration, torrent_seed_chance, torrent_max_last_accessed, torrent_listen_port_start, torrent_listen_port_end, torrent_download_stall_cutoff, uuid_stack, sr_path, torrent_max_seeder_processes_per_host): """Download an image from BitTorrent, unbundle it, and then deposit the VHDs into the storage repository """ seed_cache_path = _make_seed_cache() torrent_cache_path = _make_torrent_cache() # Housekeeping _reap_finished_seeds(seed_cache_path) _reap_old_torrent_files(torrent_cache_path, torrent_max_last_accessed) torrent_path = _fetch_torrent_file( torrent_cache_path, image_id, torrent_url) staging_path = utils.make_staging_area(sr_path) try: tarball_filename = os.path.basename(torrent_path).replace( '.torrent', '') tarball_path = os.path.join(staging_path, tarball_filename) # Download tarball into staging area _download(torrent_path, staging_path, torrent_listen_port_start, torrent_listen_port_end, torrent_download_stall_cutoff) # Extract the tarball into the staging area _extract_tarball(tarball_path, staging_path) # Move the VHDs from the staging area into the storage repository vdi_list = utils.import_vhds(sr_path, staging_path, uuid_stack) # Seed image for others in the swarm _seed_if_needed(seed_cache_path, tarball_path, torrent_path, torrent_seed_duration, torrent_seed_chance, torrent_listen_port_start, torrent_listen_port_end, torrent_max_seeder_processes_per_host) finally: utils.cleanup_staging_area(staging_path) return vdi_list
def download_vhd(session, image_id, torrent_url, torrent_seed_duration, torrent_seed_chance, torrent_max_last_accessed, torrent_listen_port_start, torrent_listen_port_end, torrent_download_stall_cutoff, uuid_stack, sr_path, torrent_max_seeder_processes_per_host): """Download an image from BitTorrent, unbundle it, and then deposit the VHDs into the storage repository """ seed_cache_path = _make_seed_cache() torrent_cache_path = _make_torrent_cache() # Housekeeping _reap_finished_seeds(seed_cache_path) _reap_old_torrent_files(torrent_cache_path, torrent_max_last_accessed) torrent_path = _fetch_torrent_file(torrent_cache_path, image_id, torrent_url) staging_path = utils.make_staging_area(sr_path) try: tarball_filename = os.path.basename(torrent_path).replace( '.torrent', '') tarball_path = os.path.join(staging_path, tarball_filename) # Download tarball into staging area _download(torrent_path, staging_path, torrent_listen_port_start, torrent_listen_port_end, torrent_download_stall_cutoff) # Extract the tarball into the staging area _extract_tarball(tarball_path, staging_path) # Move the VHDs from the staging area into the storage repository vdi_list = utils.import_vhds(sr_path, staging_path, uuid_stack) # Seed image for others in the swarm _seed_if_needed(seed_cache_path, tarball_path, torrent_path, torrent_seed_duration, torrent_seed_chance, torrent_listen_port_start, torrent_listen_port_end, torrent_max_seeder_processes_per_host) finally: utils.cleanup_staging_area(staging_path) return vdi_list
def move_vhds_into_sr(session, instance_uuid, sr_path, uuid_stack): """Moves the VHDs from their copied location to the SR.""" staging_path = "/images/instance%s" % instance_uuid imported_vhds = utils.import_vhds(sr_path, staging_path, uuid_stack) utils.cleanup_staging_area(staging_path) return imported_vhds