为模板添加增删改查支持

https://blueprints.launchpad.net/vitrage/+spec/crud-templates

添加增删改查支持意味着模板可以在 Vitrage 运行时实时添加/删除。

通过 API 添加/删除的模板将存储在数据库中,以便在重启 Vitrage 后仍然存在。将使用 sqlalchemy 进行数据库管理。

问题描述

目前,Vitrage 模板在 Vitrage 启动期间从特定文件夹加载。在 Vitrage 服务运行时添加/删除模板需要重启 vitrage-graph 服务。

提议的变更

模板应该存储在数据库中,而不是文件系统中的特定文件夹,这样它们可以在 Vitrage 运行时被修改(添加/删除)。

评估器将根据添加/删除的模板中指定的动作,对实体图进行实时更新。

模板添加

  • 验证模板。

  • 将模板存储在数据库中。

  • 通知评估器。

  • 使用新的动作评估实体图。

删除

  • 从数据库中删除模板。

  • 通知评估器。

  • 评估实体图以撤销模板的动作。

更新 - 此时不支持。为了更新模板,请使用添加和删除模板。

为了实现增删改查支持,需要进行一些更改

  • 支持 vitrageclient(Vitrage API)中的模板添加/删除命令

  • API 处理程序:将模板存储到数据库和从数据库中删除。

  • 图克隆逻辑应该提取到基类。

  • 添加名为 templates 的新数据库表

模板数据库表

+----------------+--------------+------+-----+---------+-------+
| Field          | Type         | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+-------+
| created_at     | datetime     | YES  |     | NULL    |       |
| updated_at     | datetime     | YES  |     | NULL    |       |
| id             | varchar(64)  | NO   | PRI | NULL    |       |
| status         | varchar(16)  | YES  |     | NULL    |       |
| status_details | varchar(128) | YES  |     | NULL    |       |
| name           | varchar(128) | NO   |     | NULL    |       |
| file_content   | text         | NO   |     | NULL    |       |
| type           | varchar(64)  | YES  |     | NULL    |       |
+----------------+--------------+------+-----+---------+-------+

备选方案

数据模型影响

一个新的数据库表。

REST API 影响

将添加 PUT 和 DELETE 方法。

版本影响

其他最终用户影响

添加新的 CLI 命令

Vitrage 模板添加

Vitrage 模板删除

部署者影响

开发者影响

Horizon 影响

实现

负责人

主要负责人

ikinory

其他贡献者

工作项

  • 支持添加/删除模板的 API

  • 通过 SQLAlchemy 实现数据库表。

  • 实现数据库查询。

  • 如“测试”中所述进行测试。

依赖项

测试

API
  • 模板添加
    • 添加所有类型的模板:标准、等价、定义。

    • 添加损坏的模板并检查添加失败的情况。

    • 添加一个包含模板的文件夹。

  • 模板删除
    • 检查所有类型的模板:标准、等价、定义。

  • 模板列表。

  • 模板显示
    • 将 CLI 模板内容与原始文件内容进行比较

端到端测试
在整个图上评估添加/删除的模板。
  • 测试评估器重新加载模板

示例

1. 触发告警(模板尚未加载)。

2. 添加相关的模板。

3. 检查是否执行了动作。

这检查了评估器是否被重新加载并在所有现有顶点上运行。

文档影响

应该添加模板添加和删除功能。修改模板验证和列表功能。

应该将更改添加到

API 描述:vitrage/doc/source/contributor/vitrage-api.rst

CLI 描述:doc/source/contributor/cli.rst

参考资料