添加 Show Datamodel API¶
https://blueprints.launchpad.net/watcher/+spec/show-datamodel-api
问题描述¶
数据模型对于 Watcher 生成资源优化方案非常重要。目前,只能通过查看日志文件找到它,这非常不方便。因此,有必要添加一个 API,以便用户可以快速查看数据模型。
用例¶
作为 Watcher 用户,我希望使用“显示数据模型 API”查看指定范围内实例的信息。
提议的变更¶
我们可以参考 “策略列表” 命令,在 python-watcherclient 中添加命令行界面。收到请求后,watcher-api 调用 watcher-decision-engine 来检索有关数据模型的信息,然后解析并返回。
watcherclient 中使用的命令行界面可以如下所示
watcher datamodel list [–audit <audit_id>]
在 watcherclient 中,我们可以添加 “datamodel.py,datamodel_shell.py” 来发送数据模型列表请求并接收结果。
在 watcher-api 中,我们可以添加 “datamodel.py” 来接收 python-watcherclient 的请求并调用 watcher-decision-engine 模块。
在 watcher-decision-engine 中,我们可以根据指定的范围获取数据模型数据,然后解析数据模型并返回给 watcher-api。
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
添加以下 datamodel REST
GET /v1/datamodels
正常的 http 响应代码(200)
预期的 HTTP 错误响应代码 (400,401)
请求
audit_uuid (可选): audit 的 UUID
响应
instance_uuid: 实例的 UUID
node_uuid: 计算节点的 UUID
instance_state: 实例的状态
node_state: 计算节点的状态
GET /v1/datamodels/detail
正常的 http 响应代码(200)
预期的 HTTP 错误响应代码 (400,401)
请求
audit_uuid (可选): audit 的 UUID
响应
instance_uuid: 实例的 UUID
instance_state: 实例的状态
instance_name: 实例的名称
instance_vcpus: 实例的 vcpu 数量
instance_memory: 实例的内存
instance_disk: 实例的磁盘
instance_disk_capacity: 实例的磁盘容量
node_uuid: 计算节点的 UUID
node_state: 计算节点的状态
node_name: 节点的名称
node_vcpus: 计算节点的 vcpu 数量
node_memory: 节点的内存
node_disk: 节点的磁盘
node_disk_capacity: 节点的磁盘容量
数据模型 JSON 示例
{
"compute": [
{
"node_uuid": "90d7da5c-d432-4eba-89b4-743c9f1e6cfa",
"node_name": "node_1",
"node_vcpus": 48,
"node_memory": "4096",
"node_disk": "40",
"node_disk_capacity": "60"
"servers": [
{
"instance_uuid": "9e7cbe91-b391-4394-a42c-68996a4fd555",
"instance_state": "active",
"instance_name": "vm_4",
"instance_vcpus": 16,
"instance_memory": "2048",
"instance_disk": "10",
"instance_disk_capacity": "35",
},
{
"instance_uuid": "8e7cbe91-b391-4394-a42c-68996a4fd555",
"instance_state": "active",
"instance_name": "vm_5",
"instance_vcpus": 16,
"instance_memory": "2048",
"instance_disk": "10",
"instance_disk_capacity": "35",
}
]
},
{
"node_uuid": "78d7da5c-d432-4eba-89b4-743c9f1e6cfa",
"node_name": "node_2",
"node_vcpus": 96,
"node_memory": "4096",
"node_disk": "60",
"node_disk_capacity": "60"
"servers": [
{
"instance_uuid": "6b7cbe91-b391-4394-a42c-68996a4fd55b",
"instance_state": "active",
"instance_name": "vm_1",
"instance_vcpus": 32,
"instance_memory": "2048",
"instance_disk": "10",
"instance_disk_capacity": "35",
},
{
"instance_uuid": "527cbe91-b391-4394-a42c-68996a4fd5e7",
"instance_state": "active",
"instance_name": "vm_2",
"instance_vcpus": 16,
"instance_memory": "2048",
"instance_disk": "10",
"instance_disk_capacity": "35",
}
]
}
]
}
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
用户可以通过以下命令在 python-watcherclient 中查看数据模型
watcher datamodel list
并添加 audit 参数以过滤指定范围内的数据模型
watcher datamodel list [–audit <audit_id>]
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
<chenker>
- 其他贡献者
<li-canwei2> , <yumeng-bao>
工作项¶
在 watcherclient 中添加 watcher datamodel list 命令行界面。
在 watcher-api 中添加对来自 watcherclient 的请求的验证和处理。
在 watcher-decision-engine 中添加数据模型的解析、封装和返回。
依赖项¶
无
测试¶
对 watcher-decision-engine、python-watcherclient、watcher-api 进行单元测试。
文档影响¶
一份解释如何使用 watcher datamodel list [–audit <audit_id>] 的文档
更新 API 参考
更新 REST API 版本历史记录
参考资料¶
无
历史¶
无