添加 v2 API 端点以推送 DataFrame 对象¶
https://storyboard.openstack.org/#!/story/2005890
CloudKitty 需要在其 v2 API 中添加一个端点来推送 DataFrame 对象。本规范旨在定义需要做什么以及原因。本文档中的所有内容均可讨论,同样适用于相关的 storyboard 和 gerrit。
问题描述¶
目前 CloudKitty 的状态是,将 DataFrame 导入 CloudKitty 存储的唯一方法是加载存储驱动程序并调用 push 方法,但无法通过 CloudKitty API 实现。
这种不便妨碍了 CloudKitty 拥有外部处理器能够轻松地将其数据推送到其存储中。例如,CloudKitty 无法预置 DataFrame fixtures,因此无法使用 OpenStack Tempest 进行功能测试。
需要一个新的管理 API 端点来实现这一点。
Tempest 测试也将能够实现更高效的工作流程,以验证即将发布的功能,从而从长远来看提高其整体质量和稳定性。更广泛地说,实现此功能也将为任何人提供扩展其 CloudKitty 使用的更方便和灵活的方式。
提议的变更¶
将向管理员用户提供一个可在 POST /v2/dataframes 上使用的新的端点。这将允许最终用户以 JSON 对象的形式推送 DataFrames。
备选方案¶
我们可以保留旧方法,但外部处理器需要用 Python 编写才能加载存储驱动程序模块,并且需要向其公开存储后端凭据。
或者,可以通过更 hackish 的方式配置 CloudKitty,例如直接操作存储后端和数据库元数据,但这是一种繁琐且容易出错的过程,应绝对避免。
数据模型影响¶
无。
REST API 影响¶
这将添加一个位于 /v2/dataframes 的端点,并支持 POST HTTP 方法。
该端点将支持以下 body 参数
dataframes:(必需) 描述 DataFrame 对象的一个 json 数组(有关详细信息,请参见下文)。
在请求的主体中,可以按如下方式指定 DataFrame json 对象集合
{
"dataframes": [
# first DataFrame
{
"period": {
"begin": "20190723T122810Z", # valid ISO 8601 datetime format
"end": "20190723T132810Z" # valid ISO 8601 datetime format
},
"usage": {
"metric_one": [ # list of DataPoint json objects
{
"vol": {
"unit": "GiB",
"qty": 1.2
},
"rating": {
"price": 0.04
},
"groupby": {
"group_one": "one",
"group_two": "two"
},
"metadata": {
"attr_one": "one",
"attr_two": "two"
}
}
# { second DataPoint for metric_one here }
],
"metric_two": []
}
}
# { second DataFrame here }
]
}
对于此端点的 POST 请求的预期 HTTP 成功响应代码是 204 No Content。做出此决定是为了减少此类操作的网络带宽消耗。用户可以通过将在未来提供的 GET /v2/dataframes 端点来咨询 DataFrames。
对于此端点的 POST 请求的预期 HTTP 错误响应代码是
400 错误请求:请求格式错误。401 Unauthorized:用户未经过身份验证。403 Forbidden:用户无权推送 DataFrame 对象。
此端点仅对管理员用户授权。
安全影响¶
任何访问此端点的用户都能够更改目标平台上的数据,这是一个具有严重副作用的操作。因此,应谨慎或根本不向非管理员用户授予对此端点的访问权限。
通知影响¶
无。
其他最终用户影响¶
客户端也将更新,包括一个函数和一个 CLI 命令,允许推送 DataFrame 对象。
性能影响¶
无。
其他部署者影响¶
现在将任何类型的 DataFrame 对象导入 CloudKitty 都会变得容易。如果需要,这将方便配置 CloudKitty。
开发人员影响¶
导入 DataFrame 对象将允许将 fixtures 推送到 CloudKitty 存储中,从而将场景添加到 Tempest 插件中。这将方便后续编写集成测试。
实现¶
负责人¶
- 主要负责人
<jferrieu>
- 其他贡献者
<peschk_l>
工作项¶
使用单元测试实现 API 端点。
添加 tempest 测试。
在客户端中支持此端点。
依赖项¶
此端点依赖于 DataFrame 和 DataPoint 对象的规范
测试¶
将添加此端点的单元测试和 Tempest 测试。
文档影响¶
该端点将被添加到 API 参考中。
参考资料¶
规范:添加 v2 API 端点以推送 dataframe 对象