跳转到: 导航, 搜索

Cue/api

< Cue

Cue API 设计

缩写

缩写 定义
SSL 安全套接层
REST 表述性状态转移
URI 统一资源标识符
UUID 通用唯一标识符
AMQP 高级消息队列协议

需求

Cue 的 API 要求 - Kilo 时间框架。

  • Keystone 集成
  • 集群的 CRUD 操作
  • 集群管理 – 扩展/缩减
  • Devstack 集成
  • Gate 测试

系统架构图

Cue-arch.png

组件 描述
用户 (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 库将用于用占位符对象替换外部系统依赖项。

函数 测试 输入数据 预期结果
列出集群
  1. 创建 'n' 个集群,然后调用列出集群并验证预期的返回对象
  2. 在项目 ID 中不存在集群时调用列出集群并验证预期的返回对象
  • n = 要创建的集群数
  1. 返回包含适当字段的 'n' 个集群列表,HTTP Ok (200)
  2. 返回空集群列表,HTTP Ok (200)
创建集群
  1. 创建标准集群 'c' 并验证预期的返回对象
  2. 使用无效风味创建集群并验证预期的返回值
  3. 使用无效卷大小创建集群并验证预期的返回值
  • n = 集群大小(节点数)
  • m = 集群名称
  • f = 风味
  • s = 卷大小
  • nic = 网络 UUID
  1. 返回新创建的集群的集群 ID、名称和状态,HTTP Accepted (202)
  2. 返回 HTTP 错误请求 (400)
  3. 返回 HTTP 错误请求 (400)
显示集群
  1. 创建集群,然后调用获取集群并验证预期的返回对象
  2. 使用无效的 cluster_id 获取集群
  • cluster_id = 集群 ID
  1. 返回集群 ID、名称、状态、创建/更新日期戳和节点列表,HTTP Ok (200)。
  2. 返回 HTTP 错误请求 (400)
删除集群
  1. 创建一个集群,然后调用删除集群并验证预期的返回值
  2. 使用无效的 cluster_id 删除集群
  • cluster_id = 集群 ID
  1. 返回 HTTP accepted (202)
  2. 返回 HTTP 错误请求 (400)

功能测试

功能测试将验证从控制器路由到 HTTP 响应的 HTTP REST URI 请求生命周期。这些测试将使用 Pecan 的测试实用程序;pecan.testing 模块。

操作 URI 测试 输入数据 预期数据 (JSON)
GET /v1/clusters
  1. 集群存在时调用
  2. 不存在集群时调用
  • n/a
  1. 返回包含适当字段的 'n' 个集群列表,HTTP Ok (200)
  2. 返回空集群列表,HTTP Ok (200)
POST /v1/clusters
  1. 创建标准集群 'c' 并验证预期的返回对象
  2. 使用无效风味创建集群并验证预期的返回值
  3. 使用无效卷大小创建集群并验证预期的返回值
  • n = 集群大小(节点数)
  • m = 集群名称
  • f = 风味
  • s = 卷大小
  • nic = 网络 UUID
  1. 返回新创建的集群的集群 ID、名称和状态,HTTP Accepted (202)
  2. 返回 HTTP 错误请求 (400)
  3. 返回 HTTP 错误请求 (400)
GET /v1/clusters/{cluster_id}
  1. 创建集群,然后调用获取集群并验证预期的返回对象
  2. 使用无效的 cluster_id 获取集群
  • cluster_id = 集群
  1. 返回集群 ID、名称、状态、创建/更新日期戳和节点列表,HTTP Ok (200)。
  2. 返回 HTTP 错误请求 (400)
DELETE /v1/clusters/{cluster_id}
  1. 创建一个集群,然后调用删除集群并验证预期的返回值
  2. 使用无效的 cluster_id 删除集群
  • cluster_id = 集群 ID
  1. 返回 HTTP accepted (202)
  2. 返回 HTTP 错误请求 (400)

集成测试

集成测试将涵盖从 HTTP 请求到数据库访问和 RPC 工作程序任务提交的 API 功能。Pecan 测试实用程序将用于将测试请求 URI 路由到适当的控制器,然后将验证数据库记录的适用更改。最后,将验证任务对象的创建,以确保有效的工作流程。