多次创建期间返回所有服务器¶
https://blueprints.launchpad.net/nova/+spec/return-all-servers-during-multiple-create
在本蓝图中,我们建议通过在响应中包含所有创建的服务器,而不是仅包含第一台服务器,来改进 V3 中的服务器创建 API。在 V2 中,服务器[0] 会作为对已指定 min/max_count 的创建请求的响应返回给调用者。
问题描述¶
服务器创建 API 的最终用户可以通过在请求中指定 min/max_count 来一次批量创建多个实例。使用此功能的原因之一是快速扩展云托管应用程序或响应增加的负载。在请求多个服务器时,用户需要知道已创建的服务器列表才能与其一起工作。理想情况下,应该在创建请求的响应中接收该列表。
提议的变更¶
为了最有效地向最终用户提供已创建服务器的列表,我们建议将 V3 中服务器创建 API 的响应从仅返回一台服务器更改为返回服务器列表。如果最终用户请求创建一台服务器,则将返回包含一台服务器的列表。
备选方案¶
在 V2 中,调用者可以通过在请求中指定 return_reservation_id=True 来获取预留 ID,从而解决此问题,该 ID 可用于获取服务器列表。目前在 V3 中也可以这样做,但需要额外的 API 调用才能获取服务器列表。
数据模型影响¶
无
REST API 影响¶
V3 API 规范
描述:创建一台或多台服务器
方法类型:POST
正常的 http 响应代码:202
预期的错误 http 响应代码
400:无效的请求参数,找不到镜像/风味
409:端口正在使用中,没有唯一匹配项
413:超出配额或端口限制
URL:v3/servers
示例 JSON 请求(无更改)
{ "server": { "name": "server-test-1", "image_ref": "b5660a6e-4b46-4be3-9707-6b47221b454f", "flavor_ref": "2", "max_count": 2, "min_count": 2 }示例 JSON 响应(新格式)
{ "servers": [ { "admin_password": "qpYU66rKxmnK", "id": "215d1109-216d-48c3-af8e-998bb9bc3ca0", "links": [ { "href": "http://openstack.example.com/v3/servers/<id>", "rel": "self" }, { "href": "http://openstack.example.com/servers/<id>", "rel": "bookmark" } ] }, { "admin_password": "wfksH3GTTseP", "id": "440cf918-3ee0-4143-b289-f63e1d2000e6", "links": [ { "href": "http://openstack.example.com/v3/servers/<id>", "rel": "self" }, { "href": "http://openstack.example.com/servers/<id>", "rel": "bookmark" } ] } ] }部分 JSON 响应模式定义以显示更改
create = { 'type': 'object', 'properties': { 'servers': { 'type': 'array', 'items': { 'type': 'object', 'properties: { 'admin_password': {type': 'string'}, 'id': {'type': 'string'}, 'links': { 'type': 'array', 'items': { 'type': 'object', 'properties': { 'href': {'type': 'string'}, 'rel': {'type': 'string'} } } } } } } } }
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
python-novaclient 将需要更改以处理 V3 API 服务器创建响应中的服务器列表,并将该列表显示给用户。
性能影响¶
对于多个服务器的服务器创建 API 请求,与其仅返回第一台服务器,不如序列化所有创建的服务器对象,并在响应中返回它们,而不是仅返回第一台服务器。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
melwitt
- 其他贡献者
无
工作项¶
更改 V3 API 响应,以便服务器创建返回实例列表。
更新 tempest 中的测试以处理更改后的响应。
依赖项¶
本蓝图与任务 API 蓝图 [1] 相关,因为它需要与任务在 V3 中运作的方式进行交互。关于此交互的初步评论可在原始审查 [2] 中找到。
[1] https://blueprints.launchpad.net/nova/+spec/instance-tasks-api
测试¶
必须更新 Tempest 测试以接受更改后的服务器创建 API 响应格式。Tempest 测试已经练习了各种服务器创建场景,但 V3 的响应格式已更改。
文档影响¶
需要记录服务器创建的更改后的 REST API 响应,如上面的 jsonschema 定义所示。更改后的 API 响应将作为从测试生成的 API 示例提供。
参考资料¶
无