Пример #1
0
def migrate_volume(context, volume_id):
    volume = context.src_cloud.cinder.volumes.get(volume_id)
    volume_id = volume.id
    tenant_id = volume._info["os-vol-tenant-attr:tenant_id"]
    tenant_retrieve = "tenant-{}-retrieve".format(tenant_id)
    try:
        users = context.src_cloud.keystone.tenants.list_users(tenant_id)
    except exceptions.keystone_excs.NotFound:
        LOG.info("No users in tenant %s, using %s", tenant_id, context.dst_cloud.keystone.auth_ref["user"]["name"])
        user_id = None
    else:
        user = users.pop()
        if str(user.name) == "admin":
            user_id = None
        else:
            user_id = user.id
    user_retrieve = "user-{}-retrieve".format(user_id)
    resources = []

    if tenant_retrieve not in context.store:
        tenant_flow = tenant_tasks.migrate_tenant(context, tenant_id)
    if user_id and user_retrieve not in context.store:
        user_flow = user_tasks.migrate_user(context, user_id)
    resources.append(tenant_flow)
    volume_flow = volume_tasks.migrate_detached_volume(context, volume_id, user_id, tenant_id)
    return resources, volume_flow
Пример #2
0
def migrate_volumes(ctx, flow, ids):
    volumes = ctx.src_cloud.cinder.volumes.list(search_opts={'all_tenants': 1})
    for volume in volumes:
        if volume.id in ids:
            volume_flow = volume_tasks.migrate_detached_volume(
                ctx, volume)
            flow.add(volume_flow)
    return flow
Пример #3
0
def migrate_project_volumes(context, flow, tenant_id):
    volumes = context.src_cloud.cinder.volumes.list(
        search_opts={"all_tenants": 1})
    for volume in volumes:
        volume_tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id")
        volume_binding = "volume-{}".format(volume.id)
        if volume_binding not in context.store \
                and volume.status == "available" \
                and volume_tenant_id == tenant_id:
            volume_flow = volume_tasks.migrate_detached_volume(
                context, volume.id, None, tenant_id)
            flow.add(volume_flow)
Пример #4
0
    def test_migrate_detached_volume(self, flow_mock,
                                     retrieve_vol_mock,
                                     upload_vol_mock,
                                     create_vol_mock,
                                     ensure_img_mock):
        volume_binding = "volume-{}".format(self.test_volume_id)
        volume_retrieve = "{}-retrieve".format(volume_binding)
        volume_upload = "{}-upload".format(volume_binding)
        image_ensure = "{}-image-ensure".format(volume_binding)
        user_id = "none"
        user_ensure = "user-{}-ensure".format(user_id)
        volume_ensure = "{}-ensure".format(volume_binding)
        expected_store_dict = {volume_retrieve: self.test_volume_id,
                               user_ensure: None}
        flow = volume.migrate_detached_volume(self.context, self.volume)

        retrieve_vol_mock.assert_called_once_with(self.context.src_cloud,
                                                  name=volume_binding,
                                                  provides=volume_binding,
                                                  rebind=[volume_retrieve])
        upload_vol_mock.assert_called_once_with(self.context.src_cloud,
                                                name=volume_upload,
                                                provides=volume_upload,
                                                rebind=[volume_binding])
        create_vol_mock.assert_called_once_with(self.context.dst_cloud,
                                                name=volume_ensure,
                                                provides=volume_ensure,
                                                rebind=[volume_binding,
                                                        image_ensure])
        ensure_img_mock.assert_called_once_with(self.context.src_cloud,
                                                self.context.dst_cloud,
                                                name=image_ensure,
                                                provides=image_ensure,
                                                rebind=[volume_upload,
                                                        user_ensure])
        flow_mock.assert_called_once_with("migrate-{}".format(volume_binding))
        self.assertEqual(self.context.store, expected_store_dict)
        self.assertEqual(flow.add.call_args_list,
                         [call(retrieve_vol_mock()),
                          call(upload_vol_mock()),
                          call(ensure_img_mock()),
                          call(create_vol_mock())])
Пример #5
0
    def test_migrate_detached_volume(self, flow_mock,
                                     retrieve_vol_mock,
                                     upload_vol_mock,
                                     create_vol_mock,
                                     ensure_img_mock):
        self.test_tenant_id = "1111"
        self.tenant_ensure = "tenant-{}-ensure".format(self.test_tenant_id)
        self.user_ensure = "user-none-ensure"
        expected_store_dict = {self.volume_retrieve: self.test_volume_id,
                               self.user_ensure: None}
        flow = volume.migrate_detached_volume(self.context,
                                              self.test_volume_id,
                                              None,
                                              self.test_tenant_id)

        retrieve_vol_mock.assert_called_once_with(
            self.context.src_cloud, name=self.volume_binding,
            provides=self.volume_binding, rebind=[self.volume_retrieve])
        upload_vol_mock.assert_called_once_with(
            self.context.src_cloud, name=self.volume_upload,
            provides=self.volume_upload, rebind=[self.volume_binding],
            inject={"timeout": int(self.timeout)})
        create_vol_mock.assert_called_once_with(
            self.context.dst_cloud, name=self.volume_ensure,
            provides=self.volume_ensure,
            rebind=[self.volume_binding, self.image_ensure,
                    self.user_ensure, self.tenant_ensure],
            inject={"timeout": int(self.timeout)})
        ensure_img_mock.assert_called_once_with(
            self.context.src_cloud, self.context.dst_cloud,
            name=self.image_ensure, provides=self.image_ensure,
            rebind=[self.volume_upload, self.tenant_ensure])
        flow_mock.assert_called_once_with(
            "migrate-{}".format(self.volume_binding))
        self.assertEqual(self.context.store, expected_store_dict)
        self.assertEqual(flow.add.call_args_list,
                         [call(retrieve_vol_mock()),
                          call(upload_vol_mock()),
                          call(ensure_img_mock()),
                          call(create_vol_mock())])