except IndexError: dest_client = Client(dest[0], 9292) new_image_ids = {} for image in args.images: meta, image_file = source_client.get_image(image) f = open(TEMP_IMAGE_PATH, 'wb') for chunk in image_file: f.write(chunk) f.close() f = open(TEMP_IMAGE_PATH, 'rb') old_id = str(meta['id']) del meta['id'] del meta['location'] try: meta['properties']['kernel_id'] = new_image_ids[meta['properties']['kernel_id']] except KeyError: None try: meta['properties']['ramdisk_id'] = new_image_ids[meta['properties']['ramdisk_id']] except KeyError: None new_meta = dest_client.add_image(meta, f) new_image_ids[old_id] = str(new_meta['id']) print("Image transferred. Got id: %s" % new_meta['id']) f.close() remove(TEMP_IMAGE_PATH)
# Sort keys to that kernel/ramdisk images are transferred first, makes recreating # associations easier later on mapping = {'aki': 0, 'ari': 0, 'ami': 1} sorted_ids = images.keys() sorted_ids.sort( key=lambda image_id: mapping[images[image_id]['container_format']]) new_ids = {} for image_id in sorted_ids: meta = images[image_id] del meta['id'] del meta['location'] try: meta['properties']['kernel_id'] = new_ids[meta['properties'] ['kernel_id']] except KeyError: pass try: meta['properties']['ramdisk_id'] = new_ids[meta['properties'] ['ramdisk_id']] except KeyError: pass new_meta = dest_client.add_image(meta, open(GLANCE_PATH + str(image_id))) print("Image %d transferred, new ID is %d" % (image_id, new_meta['id'])) # Track new kernel/ramdisk IDs to recreate associations if meta['container_format'] in ['aki', 'ari']: new_ids[str(image_id)] = str(new_meta['id'])
for image_id in args.images: images[image_id] = source_client.get_image_meta(image_id) # Sort keys to that kernel/ramdisk images are transferred first, makes recreating # associations easier later on mapping = { 'aki': 0, 'ari': 0, 'ami': 1 } sorted_ids = images.keys() sorted_ids.sort(key=lambda image_id: mapping[images[image_id]['container_format']]) new_ids = {} for image_id in sorted_ids: meta = images[image_id] del meta['id'] del meta['location'] try: meta['properties']['kernel_id'] = new_ids[meta['properties']['kernel_id']] except KeyError: pass try: meta['properties']['ramdisk_id'] = new_ids[meta['properties']['ramdisk_id']] except KeyError: pass new_meta = dest_client.add_image(meta, open(GLANCE_PATH+str(image_id))) print("Image %d transferred, new ID is %d" % (image_id, new_meta['id'])) # Track new kernel/ramdisk IDs to recreate associations if meta['container_format'] in ['aki', 'ari']: new_ids[str(image_id)] = str(new_meta['id'])