移除 tenant_id

https://blueprints.launchpad.net/nova/+spec/remove-tenant-id

该蓝图建议移除使用 tenant_id 的 API 接口,并将其替换为 project_id

问题描述

目前,Nova API 同时支持 tenant_idproject_id,这对用户来说不够友好。

以下是一个令人困惑的问题。默认情况下,我们支持通过 all_tenants (可选) 过滤实例,但通过此参数,我们获得的是所有实例的列表,而无法通过 tenant_id 获取实例。

bug 1185290 可以看出,在使用 nova list 命令时,如果需要 tenant_id,则必须出现 all_tenants,如 [1] 中所述,这有些不直观。

注意

[1] 主要说明:“如 lp:#1185290 中解释,如果未传递 all_tenants,则必须忽略 tenant_id 搜索选项。”

bug 1468992 可以看出,许多用户希望使用 tenant_id 过滤实例,并且在许多大型客户场景中,他们使用租户的概念,希望我们能够通过 tenant_id 过滤预期的实例。

用例

作为 (admin) 用户,我希望在 nova api 中统一使用 project_id,而不是同时支持 tenant_idproject_id,这将提高 nova 内部以及 nova 与已经进行此更改的其他服务之间的统一性。

提议的变更

为请求或响应参数更改 API 添加新的微版本。

移除 tenant_id 字段,使用 all_projects 替换 all_tenants 参数,然后移除以下 API 中的``all_tenants`` 参数

  • GET /servers (列出服务器)

  • GET /servers/detail (列出服务器详细信息)

在以下 API 的请求体中,将 tenant_id 替换为 project_id

  • GET /limits (显示速率和绝对限制)

  • GET /os-quota-sets/{tenant_id} (显示配额)

  • PUT /os-quota-sets/{tenant_id} (更新配额)

  • GET /os-quota-sets/{tenant_id}/defaults (列出租户的默认配额)

  • GET /os-quota-sets/{tenant_id}/detail (显示配额的详细信息)

  • GET /os-simple-tenant-usage/{tenant_id} (显示租户的使用统计信息)

在以下 API 的响应体中,将 tenant_id 替换为 project_id

  • GET /servers/detail (列出服务器详细信息)

  • GET /servers/{server_id} (列出服务器详细信息)

  • PUT /servers/{server_id} (更新服务器)

  • POST /servers/{server_id}/action (重建服务器 (rebuild 操作))

  • GET /servers/{server_id}/os-security-groups (按服务器列出安全组)

  • GET /flavors/{flavor_id}/os-flavor-access (列出风味的访问信息

    对于给定的风味)

  • POST /flavors/{flavor_id}/action (将风味访问权限添加到租户

    (addTenantAccess 操作))

  • POST /flavors/{flavor_id}/action (从租户中删除风味访问权限

    (removeTenantAccess 操作))

  • GET /os-simple-tenant-usage (列出所有租户的租户使用统计信息)

  • GET /os-simple-tenant-usage/{tenant_id} (显示租户的使用统计信息)

路径中的 tenant 关键字将被替换为 project,如下面的 API

  • GET /os-simple-tenant-usage API 将重命名为 GET /os-simple-project-usage

  • GET /os-simple-tenant-usage/{tenant_id} API 将重命名为 GET /os-simple-project-usage/{project_id}

我们应该阻止更改以下已弃用的 API 下方的 tenant_id

  • GET /os-security-groups (列出安全组)

  • GET /os-security-groups/{security_group_id} (显示安全组详细信息)

  • PUT /os-security-groups/{security_group_id} (更新安全组)

  • POST /os-security-group-rules (创建安全组规则)

  • GET /os-cells (列出单元)

  • GET /os-fping?all_tenants=1 (Ping 实例)

顺便说一下,所有策略、代码和文档中的 tenant* 引用也将被替换为 project*。

备选方案

数据模型影响

REST API 影响

添加一个新的微版本。

all_tenants 替换为 all_projects 参数,并在以下 API 的请求体中移除 all_tenants

  • GET /servers (列出服务器)

  • GET /servers/detail (列出服务器详细信息)

在以下 API 的请求体中,将 tenant_id 替换为 project_id

  • GET /limits (显示速率和绝对限制)

  • GET /os-quota-sets/{tenant_id} (显示配额)

  • PUT /os-quota-sets/{tenant_id} (更新配额)

  • GET /os-quota-sets/{tenant_id}/defaults (列出租户的默认配额)

  • GET /os-quota-sets/{tenant_id}/detail (显示配额的详细信息)

  • GET /os-simple-tenant-usage/{tenant_id} (显示租户的使用统计信息)

  • GET /os-cells (列出单元)

在以下 API 的响应体中,将 tenant_id 替换为 project_id

  • GET /servers/detail (列出服务器详细信息)

  • GET /servers/{server_id} (列出服务器详细信息)

  • PUT /servers/{server_id} (更新服务器)

  • POST /servers/{server_id}/action (重建服务器 (rebuild 操作))

  • GET /servers/{server_id}/os-security-groups (按服务器列出安全组)

  • GET /flavors/{flavor_id}/os-flavor-access (列出风味的访问信息

    对于给定的风味)

  • POST /flavors/{flavor_id}/action (将风味访问权限添加到租户

    (addTenantAccess 操作))

  • POST /flavors/{flavor_id}/action (从租户中删除风味访问权限

    (removeTenantAccess 操作))

  • GET /os-simple-tenant-usage (列出所有租户的租户使用统计信息)

  • GET /os-simple-tenant-usage/{tenant_id} (显示租户的使用统计信息)

安全影响

通知影响

其他最终用户影响

更新 openstacksdk、python-novaclient 和 python-openstackclient 以支持新的微版本。

性能影响

其他部署者影响

开发人员影响

升级影响

实现

负责人

主要负责人

brinzhang

功能联络人

功能联络人

brinzhang

工作项

  • 在相关的 API、策略和代码中,将 tenant_id 替换为 project_id

  • 在相关的 API、策略和代码中,将 all_tenants 替换为 all_projects

  • 添加相关的测试。

  • 新微版本的文档。

  • 检查 python-novaclient、python-openstackclient 和 openstacksdk,仅支持在相关 API 中请求 project_id

依赖项

测试

  • 添加与负面场景相关的单元测试。

  • 添加相关的功能测试 (API 示例)。

此更改不需要 Tempest 测试。

文档影响

更新新微版本的 API 参考,并在所有文档和代码中将所有 tenant 用法更新为 project

参考资料

历史

修订

发布名称

描述

Wallaby

引入

Xena

重新提出