示例#1
0
    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
示例#2
0
    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
示例#3
0
    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