跳转到: 导航, 搜索

Cue/api 2

< Cue

Cue API 设计

缩写

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

需求

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

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

系统上下文图

SCD.jpg

组件 描述
用户 (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 关联的已配置的所有集群。

请求参数

响应 代码
正常 确定 (200)
错误 未授权 (401)

响应参数

参数 类型 描述
cluster(列表) 字符串 集群列表,详细说明各自的集群 ID、名称、状态、创建时间戳和更新时间戳。


JSON 请求

不适用

JSON 响应

{

   "clusters": [
       {
           "cluster_id": "b51948c9-1ac5-4c28-a580-6f7c500d82f8",
           "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
           "name": "Message Cluster 1",
           "status": "ACTIVE",
           "flavor": "medium",
           "size": "3",
           "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": "BUILDING",
           "flavor": "small",
           "size": "5",
           "created": "2014-11-12T13:23:54Z",
           "updated": "2014-11-13T19:55:01Z"
       }
   ]

}

创建集群

POST /v1/clusters

此操作异步创建一个新的 Nova 实例集群,这些实例配置了中央项目 ID 中所需的的消息代理。

请求参数

参数 类型 描述
network_id UUID 用于 Neutron 网络的网络标识,集群将在其中创建。
name 字符串 集群名称。
flavor 字符串 集群节点风味,它根据 CPU/内存/磁盘资源指定 VM 类型。有关更多信息,请参见 https://docs.openstack.org/openstack-ops/content/flavors.html
大小 整数 集群中的节点数。
volume_size 整数 可选参数,用于指示节点实例的卷大小。如果支持卷,则将使用此参数。如果不支持短暂磁盘,则需要卷支持。

响应代码

响应 代码
正常 202 (已接受)
错误 badRequest (400),未授权 (401),itemNotFound (404)

响应参数

参数 类型 描述
cluster_id UUID 要创建的集群的 ID。
network_id UUID 用于 Neutron 网络的网络标识,集群将在其中创建。
name 字符串 集群名称(与请求参数中提供的名称相同)。
status 字符串 集群的当前状态。

BUILDING:集群正在配置中。

UPDATING:集群正在更新中。

ACTIVE:集群正在运行。

ERROR:遇到配置错误。

DELETING:集群正在删除中。

DELETED:集群已被删除。

flavor 字符串 集群节点风味,它根据 CPU/内存/磁盘资源指定 VM 类型。有关更多信息,请参见 https://docs.openstack.org/openstack-ops/content/flavors.html
大小 整数 集群中的节点数。
volume_size 整数 指示节点实例的卷大小。

JSON 请求

{

   "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
   "name": "MessageCluster1",
   "flavor": "large",
   "size": "3",
   "volume_size": "100"

}

JSON 响应


{

   "cluster": {
       "cluster_id": "dd745f4a-9333-417e-bb89-9c989c84c068",
       "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
       "name": "Message Cluster 1",
       "status": "BUILDING",
       "flavor": "large",
       "size": "3",
       "volume_size": "100",
       "created": "2014-11-11T01:02:03Z",
       "updated": "2014-11-11T01:02:03Z"
   }

}

显示集群

GET /v1/clusters/{cluster_id}

此操作同步返回指定集群在提供的项目 ID 中的状态和信息。

请求参数

参数 类型 描述
cluster_id (URI) UUID 集群 ID。当创建新集群时返回此值。

响应代码

响应 代码
正常 确定 (200)
错误 未授权 (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(列表) 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",
       "flavor": "large",
       "size": "3",
       "volume_size": "100",
       "created": "2014-11-11T01:02:03Z",
       "updated": "2014-11-11T01:02:03Z",
       "endpoints": [
           {
               "type": "AMQP",
               "value": "amqp://10.20.30.40:10000"
           },
           {
               "type": "console",
               "value": "http://10.20.30.40:5672"
           },
           {
               "type": "AMQP",
               "value": "amqp://10.20.30.41:10000"
           },
           {
               "type": "console",
               "value": "http://10.20.30.41:5672"
           },
           {
               "type": "AMQP",
               "value": "amqp://10.20.30.42:10000"
           },
           {
               "type": "console",
               "value": "http://10.20.30.42:5672"
           }
       ]
   }

}

删除集群

DELETE /v1/clusters/{cluster_id}''

此操作将异步删除提供的项目 ID 中的指示集群。

请求参数

参数 类型 描述
cluster_id (URI) UUID 集群 ID。当创建新集群时返回此值。

响应代码

响应 代码
正常 accepted (202)
错误 未授权 (401),itemNotFound (404)

响应参数

不适用

JSON 请求

不适用

JSON 响应

不适用

更新集群

PATCH /v1/clusters/{cluster_id}

此操作将异步更新指示的集群 (cluster_id) 基于收到的请求主体。请求主体结构与创建集群 API 相同。Cue 将自动检测差异并执行适当的操作以相应地更新集群。

请求参数

参数 类型 描述
network_id UUID 用于 Neutron 网络的网络标识,集群将在其中创建。
name 字符串 集群名称。
flavor 字符串 集群节点风味,它根据 CPU/内存/磁盘资源指定 VM 类型。有关更多信息,请参见 https://docs.openstack.org/openstack-ops/content/flavors.html

small:1 GHz 双核 CPU;512 MB 内存;250 GB 磁盘

medium:2.8 GHz 双核 CPU;4 GB 内存;1 TB 磁盘

large:3.6 GHz 四核 CPU;32 GB 内存;5 TB 磁盘

大小 整数 集群中的节点数。
volume_size 整数 可选参数,用于指示节点实例的卷大小。如果支持卷,则将使用此参数。如果不支持短暂磁盘,则需要卷支持。

响应代码

响应 代码
正常 202 (已接受)
错误 badRequest (400),未授权 (401),itemNotFound (404)

响应参数

参数 类型 描述
cluster_id UUID 要创建的集群的 ID。
network_id UUID 用于 Neutron 网络的网络标识,集群将在其中创建。
name 字符串 集群名称(与请求参数中提供的名称相同)。
status 字符串 集群的当前状态。

BUILDING:集群正在配置中。

UPDATING:集群正在更新中。

ACTIVE:集群正在运行。

ERROR:遇到配置错误。

DELETING:集群正在删除中。

DELETED:集群已被删除。

flavor 字符串 集群节点风味,它根据 CPU/内存/磁盘资源指定 VM 类型。有关更多信息,请参见 https://docs.openstack.org/openstack-ops/content/flavors.html
大小 整数 集群中的节点数。
volume_size 整数 可选参数,用于指示节点实例的卷大小。如果支持卷,则将使用此参数。如果不支持短暂磁盘,则需要卷支持。

JSON 请求

{

   "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
   "name": "MessageCluster1",
   "flavor": "medium",
   "size": "5",
   "volume_size": "200"

}

JSON 响应


{

   "cluster": {
       "cluster_id": "dd745f4a-9333-417e-bb89-9c989c84c068",
       "network_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
       "name": "Message Cluster 1",
       "status": "UPDATING",
       "flavor": "medium",
       "size": "5",
       "volume_size": "200",
       "created": "2014-11-11T01:02:03Z",
       "updated": "2014-11-11T01:02:03Z"
   }

}

测试

Cue API 测试将验证 Cue 用户界面的预期功能,并进行正向/反向测试。总体范围将涵盖从 HTTP REST 请求到所需的数据库交互以及为 RPC 工作程序提交工作流任务的测试。

单元测试

单元测试将验证每个 RESTful URI 和操作的函数调用结果。Python Mock 库将用于用占位符对象替换外部系统依赖项。

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

功能测试

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

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

集成测试

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