允许项目管理员列出允许的超visor

https://blueprints.launchpad.net/nova/+spec/allow-project-admin-list-hypervisors

允许项目管理员获取允许的超visor信息,以便他们可以在 POST /servers API 中指定 host 创建服务器。

问题描述

项目管理员当前可以通过 availability_zone 字段中的 host 在特定超visor上创建服务器。但是,项目管理员不允许 列出超visor。另一方面,只有系统管理员或系统读取者才能列出超visor,但他们无法代表项目创建服务器,因为无法通过 project_id 在 POST /servers API 中传递。因此,除非用户向项目管理员或系统用户授予额外的 token 权限,否则‘POST /servers with specific host’将无法使用。

用例

作为一个用户(当前是项目管理员,在新 RBAC 中是项目经理),我应该能够在分配给该项目的特定 host 上创建服务器。

提议的变更

以下是三个提议的变更

  1. GET /os-hypervisors API

    允许项目管理员列出他们分配到的超visor的 uuidstatestatus。这些信息将从 aggregate metadata 信息 (filter_tenant_id) 中检索。

    如果请求的项目在 filter_tenant_id 中,则该 host 信息将列出给项目管理员。如果 filter_tenant_id 中未列出项目,则返回一个空列表。只有以下超visor字段将返回给项目管理员,其余字段将以 None 值返回。

    • uuid

    • state

    • status

    将引入一个新的 API 策略,以切换上述行为,向允许的用户返回完整的超visor信息列表。

    对于 System 范围的用户,返回超visor列表的行为不变。

  2. POST /servers API

    POST /servers API 将开始接受请求字段中的超visor uuid,以便在该超visor上启动服务器。现有的字段 hypervisor_hostname 用于传递超visor名称,我们不会更改现有用例。我们将添加一个新的字段 hypervisor_uuid 到请求中,以便用户可以传递超visor uuid。超visor uuid 将用于在调度器运行的情况下,在具有 host 的服务器上启动服务器。

  3. 删除在 availability_zone 请求字段中传递 host 和 node 的遗留 hack。这仅适用于较新的 microversion,并保持旧版本 microversion 的相同行为。

    这是强制服务器在请求的 host 和 node 上启动的遗留 hack - https://github.com/openstack/nova/blob/e28afc564700a1a35e3bf0269687d5734251b88a/nova/compute/api.py#L555-L561 删除此遗留 hack 将标准化‘在请求的 host 上启动服务器’请求。

备选方案

了解超visor信息的 System 用户可以切换到项目管理员 token 并启动特定 host 上的服务器。

数据模型影响

无。

REST API 影响

此更改将通过 microversion 升级完成。

以下是将被更改的两个 API

GET /os-hypervisors

  • 允许策略 ‘os_compute_api:os-hypervisors:list’ 也应用于项目管理员(范围到 system 和 project)。

  • 检查请求者是 system 用户还是项目管理员(通过请求上下文的 system_scope)。对于 system 用户,API 的行为与当前行为没有变化。对于项目管理员,返回分配给该项目的那些 host 的 uuidstatestatus,其余字段将以 None 值返回。

    {
      "hypervisors": [
          {
              "hypervisor_hostname": None,
              "id": "1bb62a04-c576-402c-8147-9e89757a09e3",
              "state": "up",
              "status": "enabled"
          }
      ],
      "hypervisors_links": None
    }
    

POST /servers

  • POST /servers API 将开始接受请求字段中的超visor uuid,以便在该超visor上启动服务器。我们将添加一个新的字段 hypervisor_uuid 到创建服务器请求中,以便用户可以传递 uuid。超visor uuid 将用于在调度器运行的情况下,在具有 host 的服务器上启动服务器。

  • 删除在 availability_zone 请求字段中传递 host 和 node 的遗留 hack。对于旧的 microversion,它将继续像当前工作一样。使用这个新的 microversion,availability_zone 字段中只能接受有效的 AZ,否则返回 404。基本上删除这个遗留 hack - https://github.com/openstack/nova/blob/e28afc564700a1a35e3bf0269687d5734251b88a/nova/compute/api.py#L555-L561

安全影响

无。已经分配的 host uuid 名称也将列出给项目管理员。

通知影响

无。

其他最终用户影响

nova api-ref 将更新以反映这些更改。

性能影响

无。

其他部署者影响

无。

开发人员影响

无。

升级影响

将添加有关在特定 host 上启动服务器的新工作流程的升级说明。

实现

负责人

主要负责人

gmann

其他贡献者

功能联络人

功能联络人

工作项

  • 带有 microversion 的 API 变更

  • 更改的测试。

依赖项

无。

测试

  • API 更改的单元或功能测试。

  • 使用超visor uuid 启动服务器的 Tempest 测试。

文档影响

api-ref 将更新以反映这些更改。

参考资料

历史

修订

发布名称

描述

瑜伽

引入