在 os-server-groups API 中显示 ‘project_id’ 和 ‘user_id’ 信息

https://blueprints.launchpad.net/nova/+spec/add-project-id-and-user-id

在 os-server-groups API 中显示服务器组的 ‘project_id’ 和 ‘user_id’ 信息。此修复将允许管理员用户更容易地识别服务器组。

问题描述

目前,os-server-groups API 允许管理员用户列出所有项目的服务器组,但响应体不包含每个服务器组的项目 ID 信息,在多租户环境中,很难确定哪个服务器组属于哪个项目。

用例

作为云管理员,我希望在发送 GET 请求时能够轻松识别服务器组属于哪个项目。

提议的变更

为 os-server-groups API 扩展添加一个新的 API 微版本,以便
  • API ‘list’ 请求的版本满足最低版本,包含服务器组的 ‘project_id’ 和 ‘user_id’ 信息在响应数据中。

  • API ‘show’ 请求的版本满足最低版本,包含服务器组的 ‘project_id’ 和 ‘user_id’ 信息在响应数据中。

  • API ‘create’ 请求的版本满足最低版本,包含服务器组的 ‘project_id’ 和 ‘user_id’ 信息在响应数据中。

备选方案

数据模型影响

REST API 影响

提议的更改更新了 os-server-groups API 扩展中 GET 响应数据,如果请求具有最低支持版本,则包含 ‘project_id’ 和 ‘user_id’ 字段。

提议的更改还更新了 os-server-groups API 扩展中 POST 响应数据,如果请求具有最低支持版本,则包含 ‘project_id’ 和 ‘user_id’ 字段。

  • 方法修改

    • 在当前响应数据中添加项目 ID 信息。

    • 在当前响应数据中添加用户 ID 信息。

    • GET 请求的响应数据将会受到影响。

    • POST 请求的响应数据将会受到影响。

  • 示例用例

请求

GET –header “X-OpenStack-Nova-API-Version: 2.12” http://127.0.0.1:8774/v2.1/e0c1f4c0b9444fa086fa13881798144f/os-server-groups

响应

{
 "server_groups": [
 {
   "user_id": "ed64bccd0227444fa02dbd7695769a7d",
   "policies": [
     "affinity"
   ],
   "name": "test1",
   "members": [],
   "project_id": "b8112a8d8227490eba99419b8a8c2555",
   "id": "e64b6ae1-4d05-4faa-9f53-72c71f8e6f1a",
   "metadata": {}
 },
 {
   "user_id": "9128b975e91846f882eb63dc35c2ffd8",
   "policies": [
     "anti-affinity"
   ],
   "name": "test2",
   "members": [],
   "project_id": "b8112a8d8227490eba99419b8a8c2555",
   "id": "b1af831c-69b5-4d42-be44-d710f2b8954c",
   "metadata": {}
 }
 ]
 }

请求

GET –header “X-OpenStack-Nova-API-Version: 2.12” http://127.0.0.1:8774/v2.1/e0c1f4c0b9444fa086fa13881798144f/os-server-groups/ e64b6ae1-4d05-4faa-9f53-72c71f8e6f1a

响应

{
   "user_id": "ed64bccd0227444fa02dbd7695769a7d",
   "policies": [
     "affinity"
   ],
   "name": "test1",
   "members": [],
   "project_id": "b8112a8d8227490eba99419b8a8c2555",
   "id": "e64b6ae1-4d05-4faa-9f53-72c71f8e6f1a",
   "metadata": {}
 }

请求

POST –header “X-OpenStack-Nova-API-Version: 2.12” http://127.0.0.1:8774/v2.1/e0c1f4c0b9444fa086fa13881798144f/os-server-groups -d {“server_group”: { “name”: “test”, “policies”: [ “affinity” ] }}

响应

{
  "user_id": "ed64bccd0227444fa02dbd7695769a7d",
  "policies": [
    "affinity"
  ],
  "name": "test",
  "members": [],
  "project_id": "b8112a8d8227490eba99419b8a8c2555",
  "id": "e64b6ae1-4d05-4faa-9f53-72c71f8e6f1a",
  "metadata": {}
}
  • 此更改不应影响 policy.json 文件。

安全影响

通知影响

其他最终用户影响

  • python-novaclient server-group-list、server-group-show 和 server-group-create 命令将被更新,以处理微版本,以便在输出中显示 ‘project_id’ 和 ‘user_id’ 信息(如果请求的微版本提供这些信息)。

性能影响

其他部署者影响

无;如果部署者正在使用 API 的必需最低版本来获取 ‘project_id’ 和 ‘user_id’ 数据,他们可以开始使用它,否则他们不会看到任何更改。

开发人员影响

实现

负责人

主要负责人

Zhenyu Zheng <zhengzhenyu@huawei.com>

工作项

  • 添加一个新的微版本,并更改 nova/api/openstack/compute/server_groups.py 以使用它来确定是否应返回服务器组的 ‘project_id’ 和 ‘user_id’ 信息。

依赖项

测试

  • nova 树中的单元测试和 API 示例功能测试。

  • 目前,Tempest 中没有测试计算 API 微版本超过 v2.1。我们可以添加支持在 Tempest 中测试新版本,但到目前为止,API 至少已达到 v2.10,而没有对 Tempest 进行更改。

文档影响

参考资料