添加 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 版本历史记录

参考资料

历史