资源分配 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 |
引入 |