审计参数应在 Db 中持久化

https://blueprints.launchpad.net/watcher/+spec/persistent-audit-parameters

问题描述

当您启动审计时,会在 Db 中创建一个新的 Audit 对象,其中包含对 Audit Template 对象的引用。

在处理审计请求时,Watcher 决策引擎考虑的参数来自 Audit 对象本身,也来自 Audit Template 对象(目标名称,…)。

问题

如果更新了 Audit Template 参数,或者删除了 Audit Template,我们将丢失关于 Audit 本身的重要信息。

对于软删除的审计对象(对历史记录有用)的数据完整性如何?

如果为目标引入参数(如阈值,…),我们应该能够更新它们。那么如何保持所有完成以满足此类可配置目标审计的持久化数据?

当更新审计模板时,如何处理周期性审计?

如果创建一个没有策略但带有 GoalAudit Template,则会有一个策略选择器自动选择最适合我们指定的目标的策略(watcher-strategy-selector),并且由于 Audit 没有记录选择了哪个策略,因此我们失去了记录实际策略名称和全局效用的信息。此外,由于选择标准随时间变化,Audit 的策略也可能不同(参考 blueprint efficacy indicatorwatcher-strategy-selector)。我们如何持久化这些情况下的审计策略?

其他影响 Audit 的场景在不同的蓝图中处理 -

1. 删除 GoalAudit TemplateAudit 的影响 - 在蓝图 soft-delete-goals 中解决

2. 删除 StrategyAudit TemplateAudit 的影响 - 在蓝图 get-goal-from-strategy 中解决

用例

作为 Administrator,我需要确保在更新或删除 Audit Template 时,Audit 的数据完整性和一致性。

作为 Administrator,我应该能够清除 `Audit Template`_,而不会影响 Audit

项目优先级

Newton-2 的必要功能

提议的变更

  • 修改 audit 模式以包含 strategy_id、goal_id 和 host_aggregate

备选方案

Audit Template 如果有任何引用它的活动 Audit,则应为不可变的。对 Audit Template 的任何修改都应创建一个新记录,以便不会影响现有的审计。

数据模型影响

当更新审计模板时,审计对象不应丢失相关数据。我们需要在审计对象中存储 goal_id 和 strategy_id。这确保了 optimization-threshold 参数和策略选择的数据完整性(参考 blueprint efficacy indicatorwatcher-strategy-selector

当前的审计结构

+-------------------+-------------+------+-----+---------+----------------+
| Field             | Type        | Null | Key | Default | Extra          |
+-------------------+-------------+------+-----+---------+----------------+
| created_at        | datetime    | YES  |     | NULL    |                |
| updated_at        | datetime    | YES  |     | NULL    |                |
| deleted_at        | datetime    | YES  |     | NULL    |                |
| deleted           | int(11)     | YES  |     | NULL    |                |
| id                | int(11)     | NO   | PRI | NULL    | auto_increment |
| uuid              | varchar(36) | YES  | UNI | NULL    |                |
| type              | varchar(20) | YES  |     | NULL    |                |
| state             | varchar(20) | YES  |     | NULL    |                |
| deadline          | datetime    | YES  |     | NULL    |                |
| audit_template_id | int(11)     | NO   | MUL | NULL    |                |
+-------------------+-------------+------+-----+---------+----------------+

+---------------------+--------------------------------------+
| Property            | Value                                |
+---------------------+--------------------------------------+
| deadline            | None                                 |
| type                | ONESHOT                              |
| uuid                | ab49ee15-fa2b-4d3d-962f-01fe28b7fd92 |
| audit_template_uuid | 7f1e48ba-2639-498e-8fff-9508cf706665 |
+---------------------+--------------------------------------+

提议的审计结构

+-------------------+-------------+------+-----+---------+----------------+
| Field             | Type        | Null | Key | Default | Extra          |
+-------------------+-------------+------+-----+---------+----------------+
| created_at        | datetime    | YES  |     | NULL    |                |
| updated_at        | datetime    | YES  |     | NULL    |                |
| deleted_at        | datetime    | YES  |     | NULL    |                |
| deleted           | int(11)     | YES  |     | NULL    |                |
| id                | int(11)     | NO   | PRI | NULL    | auto_increment |
| uuid              | varchar(36) | YES  | UNI | NULL    |                |
| type              | varchar(20) | YES  |     | NULL    |                |
| state             | varchar(20) | YES  |     | NULL    |                |
| deadline          | datetime    | YES  |     | NULL    |                |
| goal_id           | int(11)     | NO   | MUL | NULL    |                |
| strategy_id       | int(11)     | YES  | MUL | NULL    |                |
| host_aggregate    | int(11)     | YES  |     | NULL    |                |
+-------------------+-------------+------+-----+---------+----------------+

+---------------------+--------------------------------------+
| Property            | Value                                |
+---------------------+--------------------------------------+
| deadline            | None                                 |
| type                | ONESHOT                              |
| uuid                | ab49ee15-fa2b-4d3d-962f-01fe28b7fd92 |
| goal_uuid           | None                                 |
| strategy_uuid       | None                                 |
+---------------------+--------------------------------------+

REST API 影响

影响以下 audit REST -

  • GET /v1/audits

  • GET /v1/audits/(audit_uuid)

  • POST /v1/audits

  • PATCH /v1/audits

  • GET /v1/audits/detail

安全影响

通知影响

其他最终用户影响

影响 openstack watcher 命令行

python-watcherclient audit-create 在创建审计时应具有 strategy-uuid、goal-uuid 和 host_aggregate 选项

python-watcherclient audit-update 应包括更新审计的 strategy-uuid、goal-uuid 和 host_aggregate 选项

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

其他贡献者:hvprash michaelgugino

工作项

  • 更新 Audit 对象在 /watcher/db/sqlalchemy/models.py 中以包含 strategy_id、goal_id 和 host_aggregate

  • 同步 audit_template 和 audit。重构代码,以便在 CRUD 操作期间在 audit template 和 audit 中更新 strategy_id、goal_id 和 host_aggregate。以下 python 文件将受到影响:- /watcher/objects/audit_template.py - /watcher/objects/audit.py - /watcher/tests/api/v1/test_audit_templates.py - /watcher/tests/api/v1/test_audits.py - /watcher/tests/db/test_audit.py - /watcher/tests/db/test_audit_template.py

  • 在软删除审计模板和清除时进行额外的验证。取消引用任何引用审计模板的 活动审计:- /watcher/objects/audit_template.py - /watcher/objects/audit.py - /watcher/db/purge.py

  • 更新单元测试和集成测试(Tempest 场景)

  • 数据库迁移脚本的更改

依赖项

测试

文档影响

参考资料

IRC 讨论

历史