数据存储注册 API¶
蓝图
https://blueprints.launchpad.net/trove/+spec/datastore-registration-api
该提案旨在引入一个新的管理 API,以便在现有的 Trove 部署上实现数据存储的注册。
问题描述¶
目前,在现有部署上添加/注册数据存储/数据存储版本,唯一的方法是使用一系列 trove-manage (datastore_update, datastore_version_update) 命令来添加数据存储,然后使用其镜像添加数据存储版本。
这个过程的另一个问题是,需要从可以执行 trove-manage 的 trove-api 服务器访问权限,或者需要直接访问数据库,如果想要绕过 trove-manage 并使用 insert/update 命令直接添加到表中,这两种方法都需要放宽 trove-api/数据库服务器的安全性,以便操作员/部署者直接访问。
注册数据存储的另一个问题是,我们需要使用多个命令来注册一个带有 image-id 的新数据存储。
用例¶
作为部署者,我希望能够通过 Trove 管理 API 添加新的数据存储,而无需登录到 Trove 控制平面并手动运行 trove-manage 命令。
提议的变更¶
- 以下功能将作为变更的一部分添加:
添加/注册新的数据存储版本。
获取数据存储版本列表。
获取现有数据存储版本的相关信息。
更新现有数据存储版本的镜像/管理器/软件包/活动/默认设置。
删除现有数据存储版本。
在注册数据存储版本时,如果请求的数据存储名称不存在,我们将创建一个具有请求的数据存储名称的数据存储。
这些功能仅对通过管理租户访问 API 的管理员用户可用。
配置¶
没有配置变更。
数据库¶
没有数据库变更。
公共 API¶
没有公共 API 变更。
公共 API 安全¶
无
Python API¶
无
CLI (python-troveclient)¶
无
管理 API¶
新 API 的请求/响应如下。这些 API 只能通过管理租户调用。
添加/注册数据存储版本¶
请求
POST /v1.0/<tenant_id>/mgmt/datastore-versions
{
"version": {
"datastore": "mysql",
"name": "5.6",
"manager": "mysql",
"image": "154b350d-4d86-4214-9067-9c54b230c0da",
"packages": ["mysql-server-5.6"],
"active": true,
"default": true,
}
}
响应
{
}
HTTP 状态码
202 - Accepted.
400 - Bad Request. Datastore Version Already Exists.
404 - Not Found. Image not found.
获取数据存储版本¶
请求
GET /v1.0/<tenant_id>/mgmt/datastore-versions
响应
{
"versions": [
{
"datastore_id": "b80c2b43-cd87-4d5d-9f32-a4996bd57cb1",
"datastore_name": "mysql",
"id": "b8a23fa1-1faf-441a-a6b7-83a19c30f347",
"name": "5.6",
"manager": "mysql",
"image": "154b350d-4d86-4214-9067-9c54b230c0da",
"packages": ["mysql-server-5.6"],
"active": true,
"default": true,
},
{
"datastore_id": "127bc577-8054-4b32-9ed3-2d6b01773810",
"datastore_name": "vertica",
"id": "21c8805a-a800-4bca-a192-3a5a2519044d",
"name": "7.1",
"manager": "vertica",
"image": "6230baf1-dffe-40fa-a1fb-47d9ff346503",
"packages": ["vertica-7.1"],
"active": true,
"default": true,
}]
}
HTTP 状态码
200 - OK.
获取数据存储版本信息¶
请求
GET /v1.0/<tenant_id>/mgmt/datastore-versions/<datastore_version_id>
示例
GET /v1.0/<tenant_id>/mgmt/datastore-versions/b8a23fa1-1faf-441a-a6b7-83a19c30f347
响应
{
"version":
{
"datastore_id": "b80c2b43-cd87-4d5d-9f32-a4996bd57cb1",
"datastore_name": "mysql",
"id": "b8a23fa1-1faf-441a-a6b7-83a19c30f347",
"name": "5.6",
"manager": "mysql",
"image": "154b350d-4d86-4214-9067-9c54b230c0da",
"packages": ["mysql-server-5.6"],
"active": true,
"default": true,
}
}
HTTP 状态码
200 - OK.
404 - Not Found. Datastore Version not found.
更新数据存储版本的镜像/管理器/软件包/活动/默认设置¶
请求
PATCH /v1.0/<tenant_id>/mgmt/datastore-versions/<datastore_version_id>
Payload for this request can be those attributes which one wants to update.
示例
PATCH /v1.0/<tenant_id>/mgmt/datastore-versions/b8a23fa1-1faf-441a-a6b7-83a19c30f347
{
"image": "e33f8e2f-1148-461c-a7ea-f8228e7c5f4a",
}
响应
{
}
HTTP 状态码
202 - Accepted.
404 - Not Found. Datastore Version not found.
404 - Not Found. Image not found.
删除现有数据存储版本¶
请求
DELETE /v1.0/<tenant_id>/mgmt/datastore-versions/<datastore_versionid>
示例
DELETE /v1.0/<tenant_id>/mgmt/datastore-versions/b8a23fa1-1faf-441a-a6b7-83a19c30f347
响应
{
}
HTTP 代码
202 - Accepted.
404 - Not Found. Datastore Version not found.
409 - Conflict. Instance(s) exists for the datastore version.
内部 API¶
没有内部 API 更改。
Guest Agent¶
没有 Guest Agent 变更。
备选方案¶
当前的替代方案是使用 trove-manage 或直接使用数据库,但这两种方法都需要放宽 api/db 服务器的访问策略,这本身就存在安全隐患。
升级影响¶
无。
依赖项¶
目前正在进行一项工作,将 flavor 与数据存储版本关联起来(https://review.openstack.org/#/c/109824)。
需要注意的是,一旦这些 flavor 映射到位,在删除数据存储版本时将有两种可用选项:
如果数据存储版本有任何 flavor 映射,则不要删除该版本。
连同数据存储版本一起删除 flavor 映射。
测试¶
将添加单元测试以覆盖非平凡的代码路径。
文档影响¶
管理 API 的文档将使用新的 API 进行更新。
参考资料¶
无。