def _create_volume(self, src_volume): src_keystone = self.src_cloud.resources[utils.IDENTITY_RESOURCE] dst_keystone = self.dst_cloud.resources[utils.IDENTITY_RESOURCE] dst_cinder = self.dst_cloud.resources[utils.STORAGE_RESOURCE] dst_tenant = keystone.get_dst_tenant_from_src_tenant_id( src_keystone, dst_keystone, src_volume['project_id']) if dst_tenant is None: msg = ("Tenant '{}' does not exist in destination, make sure " "you migrated tenants.").format(src_volume['project_id']) LOG.warning(msg) raise exception.TenantNotPresentInDestination(msg) LOG.info("Creating volume of size %sG in tenant %s in destination", src_volume['size'], dst_tenant.name) dst_volume = dst_cinder.create_volume_from_volume( src_volume, dst_tenant.id) LOG.info("Volume created: %s", volume_name(dst_volume)) # It takes time to create volume object timeout = self.cfg.migrate.storage_backend_timeout retryer = retrying.Retry(max_time=timeout) dst_volume_object = retryer.run( self.dst_cinder_backend.get_volume_object, self.dst_cloud, dst_volume.id) LOG.debug("Backing file for volume in destination: %s", dst_volume_object) return dst_volume, dst_volume_object
def get_dst_image(self, src_image_id): """Returns active image for VM. If not found, tries to match image based on image name, tenant, checksum and size""" dst_glance = self.dst_cloud.resources[utils.IMAGE_RESOURCE] image = dst_glance.get_active_image_by_id(src_image_id) if image is None: src_glance = self.src_cloud.resources[utils.IMAGE_RESOURCE] src_image = src_glance.get_image_by_id(src_image_id) if src_image is None: # image does not exist in source cloud, will be recreated # from ephemeral return dst_tenant = keystone.get_dst_tenant_from_src_tenant_id( self.src_cloud.resources[utils.IDENTITY_RESOURCE], self.dst_cloud.resources[utils.IDENTITY_RESOURCE], src_image.owner) LOG.info("Image with ID '%s' was not found in destination cloud, " "looking for images in tenant '%s' with checksum '%s', " "name '%s' and size '%s'", src_image_id, dst_tenant.name, src_image.checksum, src_image.name, src_image.size) image = dst_glance.get_active_image_with( dst_tenant.id, src_image.checksum, src_image.name, src_image.size) return image
def _create_volume(self, src_volume): src_keystone = self.src_cloud.resources[utils.IDENTITY_RESOURCE] dst_keystone = self.dst_cloud.resources[utils.IDENTITY_RESOURCE] dst_cinder = self.dst_cloud.resources[utils.STORAGE_RESOURCE] dst_tenant = keystone.get_dst_tenant_from_src_tenant_id( src_keystone, dst_keystone, src_volume['project_id']) if dst_tenant is None: msg = ("Tenant '{}' does not exist in destination, make sure " "you migrated tenants.").format( src_volume['project_id']) LOG.warning(msg) raise exception.TenantNotPresentInDestination(msg) LOG.info("Creating volume of size %sG in tenant %s in destination", src_volume['size'], dst_tenant.name) dst_volume = dst_cinder.create_volume_from_volume(src_volume, dst_tenant.id) LOG.info("Volume created: %s", volume_name(dst_volume)) # It takes time to create volume object timeout = self.cfg.migrate.storage_backend_timeout retryer = retrying.Retry(max_time=timeout) dst_volume_object = retryer.run( self.dst_cinder_backend.get_volume_object, self.dst_cloud, dst_volume.id) LOG.debug("Backing file for volume in destination: %s", dst_volume_object) return dst_volume, dst_volume_object
def _create_volume(self, src_volume): src_keystone = self.src_cloud.resources[utils.IDENTITY_RESOURCE] dst_keystone = self.dst_cloud.resources[utils.IDENTITY_RESOURCE] dst_cinder = self.dst_cloud.resources[utils.STORAGE_RESOURCE] dst_tenant = keystone.get_dst_tenant_from_src_tenant_id( src_keystone, dst_keystone, src_volume['project_id']) if dst_tenant is None: msg = ("Tenant '{}' does not exist in destination, make sure " "you migrated tenants.").format(src_volume['project_id']) LOG.warning(msg) raise exception.TenantNotPresentInDestination(msg) LOG.info("Creating volume of size %sG in tenant %s in destination", src_volume['size'], dst_tenant.name) dst_volume = dst_cinder.create_volume_from_volume( src_volume, dst_tenant.id) LOG.info("Volume created: %s", volume_name(dst_volume)) return dst_volume