资源分配 API

https://blueprints.launchpad.net/blazar/+spec/resource-availability-api

引入新的 API 用于查询每个资源的当前使用情况。

问题描述

Blazar 预留至少消耗一个可预留资源。对于主机预留和实例预留,预留与特定主机相关联,并且关系存储在 Blazar 数据库中。

Blazar 没有描述消耗关系的 API。Blazar 具有租约和主机的列表 API,这些 API 向云用户和云管理员显示租约列表或可预留主机列表。但是,这两个 API 的范围仅限于单个资源信息。

云管理员无法通过 Blazar API 找到这种关系。如果他们想知道特定时间窗口内主机的使用情况,他们需要直接查询 Blazar 数据库。通常不支持用户直接查询数据库。

用例

  • 云管理员希望找到特定主机即将使用的信息,以便进行维护。

提议的变更

引入一个新的 API 集,获取和列出预留分配 API,添加到主机 API 中。这些 API 显示消耗可预留主机的预留列表。如果云管理员调用此 API,他们可以找到消耗特定主机的所有预留。

注意

规范和蓝图的名称是资源可用性 API。但是,提议的 API 变更响应现有预留的分配。API 集合的名称已从可用性更改为预留分配 API。

该 API 集是主机 API 的一部分。默认授权策略是管理员 API。

有关 API 详细信息,请参阅 REST API 影响部分。

备选方案

将新的键值对附加到租约获取 API 和租约列表 API。该对可以形成如下形式:"hosts": [{"id": 1}, {"id": 2}],并添加到每个预留的详细信息中。

此更改的好处是不引入新的 API。引入新的 API 总是会对 pythonclient 产生影响。

缺点是 API 调用的身份验证和授权变得更加复杂。响应体会根据 keystone token 而变化。如果 token 具有管理员角色,则 API 需要使用主机信息创建其响应。如果不是,则 API 无需添加该信息。

数据模型影响

无。

REST API 影响

  • URL: GET /v1/os-hosts/allocations

    • 该 API 回复预留和主机之间的所有分配。

    • 正常响应代码: 200

    • 错误响应代码: 错误请求(400), 未授权(401), 禁止(403), 内部服务器错误(500)

响应示例

{
  "allocations": [
      {
           "resource_id": "host-id1",
           "reservations": [
             {
               "id": "reservation-id1",
               "lease_id": "lease-id1"
             },
             {
               "id": "reservation-id2",
               "lease_id": "lease-id1"
             }
           ]
      },
      ..snippet..
  ]
}
  • URL: GET /v1/os-hosts/{host-id}/allocation

    • 该 API 回复仅针对该主机的所有分配。

    • 正常响应代码: 200

    • 错误响应代码: 错误请求(400), 未授权(401), 禁止(403), 未找到(404), 内部服务器错误(500)

响应示例

{
  "allocation": {
      "resource_id": "host-id1",
      "reservations": [
        {
          "id": "reservation-id1",
          "lease_id": "lease-id1"
        },
        {
          "id": "reservation-id2",
          "lease_id": "lease-id1"
        }
      ]
   }
 }

这两个 API 支持一些查询参数。

  • lease_id: 一个过滤属于该 lease_id 的分配的参数

  • reservation_id: 一个过滤属于该 reservation_id 的分配的参数

  • terminated: 一个标志,用于过滤已终止或未终止的分配

安全影响

通知影响

其他最终用户影响

pythonclient 将支持分配 API。

性能影响

列出所有分配 API,GET /v1/os-hosts/allocations,返回所有分配。当主机和预留的数量巨大时,数据库查询和响应体也可能变得巨大。

为了尝试减少数据库查询的数量,这两个 API 使用如下查询。

 # List reservation allocations API
 SELECT computehost_allocations.host, reservation.id, reservations.lease_id
   FROM computehost_allocations
     JOIN reservations ON computehost_allocations.reservation_id = reservations.id;

# Get reservation allocations API
 SELECT computehost_allocations.host, reservation.id, reservations.lease_id
   FROM computehost_allocations
     JOIN reservations ON computehost_allocations.reservation_id = reservations.id
   WHERE computehost_allocations.host = host_id;

其他部署者影响

开发者影响

实现

负责人

主要负责人

muroi-masahito

其他贡献者

工作项

  • 支持 GET 请求的查询参数

  • 在主机插件中实现预留分配 API

  • 在 blazarclient 中支持预留分配 API

依赖项

测试

  • 单元测试

  • Tempest 场景测试

文档影响

  • API 参考

参考资料

历史记录

修订版

发布名称

描述

Rocky

引入