Vitrage 获取拓扑 API

https://blueprints.launchpad.net/vitrage/+spec/vitrage-api-get-topology

Vitrage 需要提供一个 API 来列出完整的或部分资源和告警拓扑。

问题描述

我们希望能够检索 Vitrage 拓扑,其中将包括资源及其相应的告警

提议的变更

创建 API 以检索资源和告警拓扑

  1. 检索完整的拓扑。

  2. 使用过滤器列出部分拓扑

  1. 给定元素的完全连接组件

  2. 给定元素的连接组件,根据特定类型(例如标签和属性)的边进行过滤

备选方案

数据模型影响

REST API 影响

列出版本

列出 Vitrage API 支持的版本。

GET /

头部

  • X-Auth-Token (字符串, 必需) - Keystone 认证令牌

  • Accept (字符串) - application/json

路径参数

无。

查询参数

无。

请求体

无。

请求示例

GET / HTTP/1.1
Host: 135.248.19.18:8999
X-Auth-Token: 2b8882ba2ec44295bf300aecb2caa4f7
Accept: application/json
响应

状态码

  • 200 - 确定

响应体

返回一个 JSON 对象,其中包含一个 ‘links’ 数组,包含支持版本的链接。

响应示例

{
    "versions": [
        {
           "id": "v1.0",
          "links": [
                {
                 "href": "http://135.248.19.18:8999/v1/",
                "rel": "self"
               }
          ],
          "status": "CURRENT",
          "updated": "2015-11-29"
        }
    ]

}

获取拓扑

获取节点的拓扑。可以过滤边的顶点和图的深度

GET /v1.0/topology/

头部

  • X-Auth-Token (字符串, 必需) - Keystone 认证令牌

  • Accept (字符串) - application/json

路径参数

无。

查询参数

  • edges (字符串(255), 可选) - 要过滤的边的名称。

  • vertices (字符串, 可选) - 要过滤的顶点的名称。

  • depth (整数, 可选) - 所需的图深度。

  • graph type ([tree,graph], 可选) - 所需的图类型,默认为 graph

请求体

无。

请求示例

GET /v1/topology/?graph_type=tree&depth=4&edges=vm&edges=host&edges=zone
&vertices=contains
Host: 135.248.19.18:8999
Content-Type: application/json
X-Auth-Token: 2b8882ba2ec44295bf300aecb2caa4f7
响应

状态码

  • 200 - 确定

  • 400 - 请求错误

响应体

返回一个 JSON 对象,描述一个包含节点和链接的图。如果请求树形表示,则返回一个包含节点和子节点的 Json 树。

如果图不是树,将返回一个无法表示为树的错误。(400 - 请求错误)

响应示例

{
"children": [
    {
        "children": [
            {
                "children": [
                    {
                        "id": 16,
                        "name": "vm5",
                        "state": "ERROR"
                    },
                    {
                        "id": 23,
                        "name": "vm12",
                        "state": "SUBOPTIMAL"
                    }
                ],
                "id": 8,
                "name": "host4",
                "state": "SUBOPTIMAL"
            },
            {
                "children": [
                    {
                        "id": 26,
                        "name": "vm15",
                        "state": "SUBOPTIMAL"
                    },
                    {
                        "id": 19,
                        "name": "vm8",
                        "state": "ERROR"
                    },
                    {
                        "id": 12,
                        "name": "vm1",
                        "state": "RUNNING"
                    }
                ],
                "id": 5,
                "name": "host1",
                "state": "SUBOPTIMAL"
            }
        ],
        "id": 1,
        "name": "zone0",
        "state": "ERROR"
    },
    {
        "children": [
            {
                "children": [
                    {
                        "id": 21,
                        "name": "vm10",
                        "state": "RUNNING"
                    },
                    {
                        "id": 14,
                        "name": "vm3",
                        "state": "SUBOPTIMAL"
                    }
                ],
                "id": 10,
                "name": "host6",
                "state": "ERROR"
            },
            {
                "children": [
                    {
                        "id": 20,
                        "name": "vm9",
                        "state": "SUBOPTIMAL"
                    },
                    {
                        "id": 13,
                        "name": "vm2",
                        "state": "ERROR"
                    }
                ],
                "id": 4,
                "name": "host0",
                "state": "ERROR"
            },
            {
                "children": [
                    {
                        "id": 24,
                        "name": "vm13",
                        "state": "RUNNING"
                    },
                    {
                        "id": 17,
                        "name": "vm6",
                        "state": "SUBOPTIMAL"
                    }
                ],
                "id": 7,
                "name": "host3",
                "state": "ERROR"
            }
        ],
        "id": 2,
        "name": "zone1",
        "state": "SUBOPTIMAL"
    },
],
    "id": 0,
    "name": "node1",
    "state": "RUNNING"
}

安全影响

流水线影响

其他最终用户影响

性能/可扩展性影响

其他部署者影响

开发者影响

实现

负责人

主要负责人

dan-ofek <dan.ofek@alcatel-lucent.com>

工作项

未来生命周期

依赖项

取决于图和同步器的蓝图

测试

还需要添加 Tempest 测试来测试“获取完整拓扑”和“获取部分拓扑”API。

文档影响

新的 api 应该被记录

参考资料