审计参数应在 Db 中持久化¶
https://blueprints.launchpad.net/watcher/+spec/persistent-audit-parameters
问题描述¶
当您启动审计时,会在 Db 中创建一个新的 Audit 对象,其中包含对 Audit Template 对象的引用。
在处理审计请求时,Watcher 决策引擎考虑的参数来自 Audit 对象本身,也来自 Audit Template 对象(目标名称,…)。
问题
如果更新了 Audit Template 参数,或者删除了 Audit Template,我们将丢失关于 Audit 本身的重要信息。
对于软删除的审计对象(对历史记录有用)的数据完整性如何?
如果为目标引入参数(如阈值,…),我们应该能够更新它们。那么如何保持所有完成以满足此类可配置目标审计的持久化数据?
当更新审计模板时,如何处理周期性审计?
如果创建一个没有策略但带有 Goal 的 Audit Template,则会有一个策略选择器自动选择最适合我们指定的目标的策略(watcher-strategy-selector),并且由于 Audit 没有记录选择了哪个策略,因此我们失去了记录实际策略名称和全局效用的信息。此外,由于选择标准随时间变化,Audit 的策略也可能不同(参考 blueprint efficacy indicator 和 watcher-strategy-selector)。我们如何持久化这些情况下的审计策略?
其他影响 Audit 的场景在不同的蓝图中处理 -
1. 删除 Goal 对 Audit Template 和 Audit 的影响 - 在蓝图 soft-delete-goals 中解决
2. 删除 Strategy 对 Audit Template 和 Audit 的影响 - 在蓝图 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 indicator 和 watcher-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 讨论
历史¶
无