添加 Show Datamodel API

https://blueprints.launchpad.net/watcher/+spec/show-datamodel-api

问题描述

数据模型对于 Watcher 生成资源优化方案非常重要。目前,只能通过查看日志文件找到它,这非常不方便。因此,有必要添加一个 API,以便用户能够快速查看内存中的当前数据模型。

用例

作为 Watcher 用户,我希望使用“显示数据模型 API”来查看指定范围内实例的信息。

提议的变更

我们可以参考 “策略列表” 命令,在 python-watcherclient 中添加命令行界面。收到请求后,watcher-api 调用 watcher-decision-engine 来检索有关数据模型的信息,然后解析并返回。

watcherclient 中使用的命令行界面可以如下所示

  • openstack optimize datamodel list [–audit <audit_uuid>]

  • [–type <type>] [–detail]

在 watcherclient 中,我们可以添加 “data_model.py,data_model_shell.py” 来发送数据模型列表请求并接收结果。

在 watcher-api 中,我们可以添加 “data_model.py” 来接收 python-watcherclient 的请求并调用 watcher-decision-engine 模块。

在 watcher-decision-engine 中,我们可以根据指定的范围和类型获取数据模型数据,然后解析数据模型并返回给 watcher-api。

备选方案

数据模型影响

REST API 影响

添加以下 数据模型 REST

  • GET /v1/data_model

    • 正常的 http 响应代码(200)

    • 预期的错误 http 响应代码 (400,401)

  • 请求

    • audit_uuid (可选):审计的 UUID

    • type (可选):用户想要列出的数据模型类型

  • 响应

    • server_uuid:服务器的 UUID

    • server_name:服务器名称

    • server_vcpus:服务器 vcpu 数量

    • server_memory:服务器内存

    • server_disk:服务器磁盘

    • server_state:服务器状态

    • node_uuid:节点的 UUID

    • node_hostname:节点名称

    • node_vcpus:节点 vcpu 数量

    • node_vcpu_ratio:节点的 vcpu 比率

    • node_memory:节点内存

    • node_memory_ratio:节点的内存比率

    • node_disk:节点磁盘

    • node_disk_ratio:节点的磁盘比率

    • node_state:节点状态

  • 计算数据模型的示例 JSON 表示

{
    "context": [
        {
            "server_uuid": "1bf91464-9b41-428d-a11e-af691e5563bb",
            "server_name": "chenke-test1",
            "server_vcpus": "1",
            "server_memory": "512",
            "server_disk": "1",
            "server_state": "active",
            "node_uuid": "253e5dd0-9384-41ab-af13-4f2c2ce26112",
            "node_hostname": "localhost.localdomain",
            "node_vcpus": "4",
            "node_vcpu_ratio": "16.0",
            "node_memory": "16383",
            "node_memory_ratio": "1.5",
            "node_disk": "37"
            "node_disk_ratio": "1.0",
            "node_state": "up",
        },
        {
            "server_uuid": "e2cb5f6f-fa1d-4ba2-be1e-0bf02fa86ba4",
            "server_name": "chenke-test2",
            "server_vcpus": "1",
            "server_memory": "512",
            "server_disk": "1",
            "server_state": "active",
            "node_uuid": "253e5dd0-9384-41ab-af13-4f2c2ce26112",
            "node_hostname": "localhost.localdomain",
            "node_vcpus": "4",
            "node_vcpu_ratio": "16.0",
            "node_memory": "16383",
            "node_memory_ratio": "1.5",
            "node_disk": "37"
            "node_disk_ratio": "1.0",
            "node_state": "up",
        }
    ]
}

安全影响

通知影响

其他最终用户影响

用户可以通过以下命令在 python-watcherclient 中查看数据模型

  • watcher datamodel list

并添加 audit 参数以过滤指定范围内的 datamodel

  • watcher datamodel list [–audit <audit_uuid>]

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

<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_uuid>] [–type <type>] [–detail] 的文档

  • 更新 API 参考

  • 更新 REST API 版本历史记录

参考资料

历史

修订版

发布名称

描述

Stein

引入

Train

更新