Cue/api
目录
Cue API 设计
缩写
| 缩写 | 定义 |
|---|---|
| SSL | 安全套接层 |
| REST | 表述性状态转移 |
| URI | 统一资源标识符 |
| UUID | 通用唯一标识符 |
| AMQP | 高级消息队列协议 |
需求
Cue 的 API 要求 - Kilo 时间框架。
- Keystone 集成
- 集群的 CRUD 操作
- 集群管理 – 扩展/缩减
- Devstack 集成
- Gate 测试
系统架构图
| 组件 | 描述 |
|---|---|
| 用户 (User) | Cue 的直接客户。 |
| Horizon | Cue 的功能将被添加到 Horizon,这将提供一个基于 Web 的门户来控制 Cue。 |
| CLI | Cue 的命令行界面,为用户提供配置和部署消息集群的访问权限。 |
| REST_API | 通过 REST 接口为用户提供配置和部署消息集群的访问权限。这是一个轻量级接口,集群/节点的配置和配置委托给 TaskWorker 进程。 |
| TaskScheduler | 用于在 REST_API 和 TaskWorker 进程之间同步工作任务。 |
| TaskWorker | 执行与所有 RabbitMQ 集群和节点的配置、配置和管理相关的工作。使用 heat 进行初始配置/部署。 |
| DB | 存储集群和节点信息的数据库。例如,在通过 REST_API 初始接收到请求时,此数据库将相应更新,并且工作将委托给 TaskWorker。TaskWorker 然后在配置和配置发生时更新此数据库。后续调用以检查集群创建的状态,将从此数据库返回更新的信息。 |
| Heat | 在部署 RabbitMQ 集群镜像中使用云实例编排。 |
REST API
一般要求,REST API 必须在 500 毫秒内响应。
列出集群
GET /v1/clusters
此操作同步返回与关联项目 ID 提供的所有集群。
请求参数 无
| 响应 | 代码 |
|---|---|
| 正常 | ok (200) |
| 错误 | unauthorized (401) |
响应参数
| 参数 | 类型 | 描述 |
|---|---|---|
| cluster(list) | 字符串 | 集群列表,详细说明各自的集群 ID、名称、状态、创建时间戳和更新时间戳。 |
JSON 请求
不适用
JSON 响应
{
"clusters": [
{
"cluster_id": "b51948c9-1ac5-4c28-a580-6f7c500d82f8",
"network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
"name": "Message Cluster 1",
"status": "ACTIVE",
"created": "2014-11-11T01:02:03Z",
"updated": "2014-11-11T01:02:03Z"
},
{
"cluster_id": "13c456c9-bbfc-4c31-b26d-3ae5c3cd7a77",
"network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
"name": "Message Cluster 2",
"status": "ACTIVE",
"created": "2014-11-12T13:23:54Z",
"updated": "2014-11-13T19:55:01Z"
}
]
}
创建集群
POST /v1/clusters
此操作异步创建一个新的 Nova 实例集群,这些实例配置了中央项目 ID 中所需的的消息代理。
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
| nic | UUID | Neutron 网络的网络标识符,集群将在其中创建。 |
| name | 字符串 | 集群名称。 |
| volume_size | 整数 | 可选参数,用于指示节点实例的卷大小。如果支持卷,则将使用此参数。如果不支持短暂磁盘,则需要卷支持。 |
| flavor (list) | 字符串 | 节点风味的列表,它根据 CPU/内存/磁盘资源指定 VM 类型。有关更多信息,请参阅 https://docs.openstack.org/openstack-ops/content/flavors.html。 |
响应代码
| 响应 | 代码 |
|---|---|
| 正常 | 202 (accepted) |
| 错误 | badRequest (400), unauthorized (401), itemNotFound (404) |
响应参数
| 参数 | 类型 | 描述 |
|---|---|---|
| cluster_id | UUID | 要创建的集群的 ID。 |
| name | 字符串 | 集群名称(与请求参数中提供的名称相同)。 |
| status | 字符串 | 集群的当前状态。 BUILDING:集群正在配置中。 UPDATING:集群正在更新中。 ACTIVE:集群正在运行。 ERROR:遇到配置错误。 DELETING:集群正在删除中。 DELETED:集群已被删除。 |
JSON 请求
{
"network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
"name": "MessageCluster1",
"volume_size": "100",
"nodes": [
{
"flavor": "large"
},
{
"flavor": "large"
},
{
"flavor": "large"
}
]
}
JSON 响应
{
"cluster": {
"cluster_id": "dd745f4a-9333-417e-bb89-9c989c84c068",
"network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
"name": "Message Cluster 1",
"status": "BUILDING",
"created": "2014-11-11T01:02:03Z",
"updated": "2014-11-11T01:02:03Z",
"nodes": [
{
"node_id": "616fb98f-46ca-475e-917e-2563e5a8cd19",
"status": "BUILDING",
"flavor": "large"
},
{
"node_id": "e90c9d13-c4b8-4a08-992a-dad6109b8ac2",
"status": "BUILDING",
"flavor": "large"
},
{
"node_id": "372f8f47-6818-4d83-aa42-8744c0e689b8",
"status": "BUILDING",
"flavor": "large"
}
]
}
}
显示集群
GET /v1/clusters/{cluster_id}
此操作同步返回指定集群在提供的项目 ID 中的状态和信息。
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
| cluster_id (URI) | UUID | 集群 ID。当创建新集群时返回此值。 |
响应代码
| 响应 | 代码 |
|---|---|
| 正常 | ok (200) |
| 错误 | unauthorized (401), itemNotFound (404) |
响应参数
| 参数 | 类型 | 描述 |
|---|---|---|
| cluster_id | UUID | 请求集群的 ID。 |
| name | 字符串 | 集群名称。 |
| status | 字符串 | 集群的当前状态。 BUILDING:集群正在配置中。 UPDATING:集群正在更新中。 ACTIVE:集群正在运行。 ERROR:遇到配置错误。 DELETING:集群正在删除中。 DELETED:集群已被删除。 |
| created | 字符串 | 创建时间戳格式:yyyy-mm-ddThh:mm:ssZ |
| updated | 字符串 | 上次更新时间戳格式:yyyy-mm-ddThh:mm:ssZ |
| nodes(list) | node | 节点列表,包括节点 ID、实例状态和风味。 |
JSON 请求
不适用
JSON 响应
{
"cluster": {
"cluster_id": "dd745f4a-9333-417e-bb89-9c989c84c068",
"network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
"name": "Message Cluster 1",
"status": "ACTIVE",
"created": "2014-11-11T01:02:03Z",
"updated": "2014-11-11T01:02:03Z",
"nodes": [
{
"node_id": "616fb98f-46ca-475e-917e-2563e5a8cd19",
"status": "ACTIVE",
"flavor": "large",
"endpoints": [
{
"type": "AMQP",
"value": "amqp://10.20.30.40:10000"
},
{
"type": "console",
"value": "http://10.20.30.40:5672"
}
],
"created": "2014-11-11T01:06:03Z",
"updated": "2014-11-11T01:06:03Z"
},
{
"node_id": "e90c9d13-c4b8-4a08-992a-dad6109b8ac2",
"status": "ACTIVE",
"flavor": "large",
"endpoints": [
{
"type": "AMQP",
"value": "amqp://10.20.30.41:10000"
},
{
"type": "console",
"value": "http://10.20.30.41:5672"
}
],
"created": "2014-11-11T01:08:03Z",
"updated": "2014-11-11T01:08:03Z"
},
{
"node_id": "372f8f47-6818-4d83-aa42-8744c0e689b8",
"status": "ACTIVE",
"flavor": "large",
"endpoints": [
{
"type": "AMQP",
"value": "amqp://10.20.30.42:10000"
},
{
"type": "console",
"value": "http://10.20.30.42:5672"
}
],
"created": "2014-11-11T01:12:03Z",
"updated": "2014-11-11T01:12:03Z"
}
]
}
}
删除集群
DELETE /v1/clusters/{cluster_id}''
此操作将异步删除提供的项目 ID 中的指定集群。
请求参数
| 参数 | 类型 | 描述 |
|---|---|---|
| cluster_id (URI) | UUID | 集群 ID。当创建新集群时返回此值。 |
响应代码
| 响应 | 代码 |
|---|---|
| 正常 | accepted (202) |
| 错误 | unauthorized (401), itemNotFound (404) |
响应参数
不适用
JSON 请求
不适用
JSON 响应
不适用
测试
Cue API 测试将验证 Cue 用户界面的预期功能,包括正向和负向测试。总体范围将涵盖从 HTTP REST 请求到所需数据库交互和 RPC 工作程序任务提交的测试。
单元测试
单元测试将验证每个 RESTful URI 和操作的函数调用结果。Python Mock 库将用于用占位符对象替换外部系统依赖项。
| 函数 | 测试 | 输入数据 | 预期结果 |
|---|---|---|---|
| 列出集群 |
|
|
|
| 创建集群 |
|
|
|
| 显示集群 |
|
|
|
| 删除集群 |
|
|
|
功能测试
功能测试将验证从控制器路由到 HTTP 响应的 HTTP REST URI 请求生命周期。这些测试将使用 Pecan 的测试实用程序;pecan.testing 模块。
| 操作 | URI | 测试 | 输入数据 | 预期数据 (JSON) |
|---|---|---|---|---|
| GET | /v1/clusters |
|
|
|
| POST | /v1/clusters |
|
|
|
| GET | /v1/clusters/{cluster_id} |
|
|
|
| DELETE | /v1/clusters/{cluster_id} |
|
|
|
集成测试
集成测试将涵盖从 HTTP 请求到数据库访问和 RPC 工作程序任务提交的 API 功能。Pecan 测试实用程序将用于将测试请求 URI 路由到适当的控制器,然后将验证数据库记录的适用更改。最后,将验证任务对象的创建,以确保有效的工作流程。
