密钥对分页支持¶
https://blueprints.launchpad.net/nova/+spec/keypairs-pagination
该蓝图旨在向 GET /os-keypairs 请求添加可选参数 limit 和 marker。
问题描述¶
目前用户只能获取所有未删除的密钥对,这可能会太慢。计算 API 用户希望能够使用分页机制获取所有租户密钥对的子集。
用例¶
Horizon 的规模测试面临多个问题,原因是 Nova 侧接收到大量数据。此更改对于在 Horizon 中将密钥对显示在多个页面上而不是一个通用列表中很有用。
提议的变更¶
添加一个 API 微版本,允许使用通用的分页机制,通过在 GET /os-keypairs 请求中添加可选参数 limit 和 marker 来获取多个密钥对。此外,更新 ‘key_pair_get_all_by_user’ DP API 函数,按 user_id 对密钥对进行排序,以便服务器端排序可以用于分页。
marker:前一页的最后一个密钥对名称。显示 “marker” 之后的密钥对列表。
limit:要显示的密钥对的最大数量。如果 limit 为 None,将显示所有密钥对。如果 limit 大于 Nova API 的 osapi_max_limit 选项,则将使用 osapi_max_limit 代替。
注意
这不会添加管理员用户列出所有租户密钥对的支持。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
该提案将添加 API 微版本,用于使用通用分页机制获取多个密钥对。新的可选参数 limit 和 marker 将添加到 GET /os-keypairs 请求中。如果未找到 marker,API 将返回 HTTP 404。
通用请求格式
GET /os-keypairs?limit={limit}&marker={kp_name}
获取所有密钥对
GET /os-keypairs
响应
{ "keypairs": [ { "keypair": { "public_key": <ssh-key1>, "name":"kp1", "fingerprint": "cc:cc:cc:cc" } }, { "keypair": { "public_key": <ssh-key2>, "name":"kp2", "fingerprint": "aa:aa:aa:aa" } }, { "keypair": { "public_key": <ssh-key3>, "name":"kp3", "fingerprint": "bb:bb:bb:bb" } } ] }
获取最多 2 个密钥对
GET /os-keypairs?limit=2
响应
{ "keypairs": [ { "keypair": { "public_key": <ssh-key1>, "name":"kp1", "fingerprint": "cc:cc:cc:cc" } }, { "keypair": { "public_key": <ssh-key2>, "name":"kp2", "fingerprint": "aa:aa:aa:aa" } } ] }
获取 kp2 之后的全部密钥对
GET /os-keypairs?marker=kp2
响应
{ "keypairs": [ { "keypair": { "public_key": <ssh-key3>, "name":"kp3", "fingerprint": "bb:bb:bb:bb" } } ] }
从 kp1 获取最多 1 个密钥对
GET /os-keypairs?marker=kp1&limit=1
响应
{ "keypairs": [ { "keypair": { "public_key": <ssh-key2>, "name":"kp2", "fingerprint": "aa:aa:aa:aa" } } ] }
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
无
性能影响¶
通过分页从 Nova 侧检索密钥对来减轻 Horizon 的负载。
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
pkholkin
工作项¶
创建一个新的 API 微版本,用于使用通用分页机制获取多个密钥对。
依赖项¶
无
测试¶
需要新的 Tempest、功能和单元测试。
文档影响¶
需要新的 API 微版本和用量文档。
参考资料¶
Nova bug 描述了该问题
历史¶
发布名称 |
描述 |
|---|---|
Mitaka |
引入 |
Newton |
重新提出 |