优化阈值¶
https://blueprints.launchpad.net/watcher/+spec/optimization-threshold
允许决策引擎将策略参数(如优化阈值)传递给选定的策略,同时策略也应向最终用户提供参数信息。
问题描述¶
目前策略中使用的所有参数都是硬编码的,最终用户除非修改源代码,否则无法修改它们。例如,策略 outlet_temp_control 的 THRESHOLD 至关重要且固定为 35.0,因此我们无法在不修改源代码的情况下针对特定用例进行调整。
用例¶
作为管理员,我可以选择一个目标来优化我的集群,Watcher 会向我显示所选策略的自定义参数列表。
作为操作员,我希望能够以一种简单的方式调整云端的策略参数。我希望能够通过 watcher 命令行来更改它,以达到最佳解决方案。
项目优先级¶
不相关,因为 Watcher 目前不在大型帐篷内。
提议的变更¶
需要以下内容来启用策略参数
在 audit-template 中添加更多信息,以便 ‘watcher audit-template-show’ 向最终用户显示所选策略及其参数。 此外,将这些信息附加到 ‘watcher audit-template-create’ 的输出中。
为策略参数配置添加新的 cmd 选项 ‘-p’ 到 ‘watcher audit-create’。 最终用户可以指定所有策略参数,例如 “-p threshold=45.0 -p repeat=10”。
当 ‘watcher audit-create’ 时,决策引擎将在执行策略之前使用这些参数配置所选策略。
备选方案¶
无
数据模型影响¶
对于 audit template,需要添加所选策略及其参数的信息。 对于 audit,需要通过哈希表存储用户指定的策略参数。
audit template 的结构如下
+----------------+-------------------------------------------+
| Property | Value |
+----------------+-------------------------------------------+
| goal | DUMMY |
| strategy | outlet_temp_control |
| parameter_info | {'threshold': (float, 'Temperature ...')} |
| description | None |
| name | 1th_template |
| host_aggregate | None |
| uuid | 0c49a52c-4a0f-4dea-9e19-471360823aef |
+----------------+-------------------------------------------+
audit 的结构如下
+---------------------+--------------------------------------+
| Property | Value |
+---------------------+--------------------------------------+
| uuid | b564665b-e77b-444c-a43f-3ae654b9a551 |
| audit_template_name | 1st_template |
| parameters | {'threshold': 35.0} |
| created_at | 2016-01-31T08:51:03+00:00 |
| updated_at | 2016-01-31T08:51:58+00:00 |
| audit_template_uuid | 06cdba2a-069b-4618-8948-540854d8d911 |
| state | SUCCEEDED |
| deadline | None |
| deleted_at | None |
| type | ONESHOT |
+---------------------+--------------------------------------+
REST API 影响¶
Audit 创建 API: POST /v1/audit 已更改,以便在请求体中接受额外的策略参数哈希表。
例如,要基于 outlet_temperature 模板创建具有所需参数的 audit,我们可以 POST 以下内容
{
"type": "ONESHOT",
"audit_template_uuid": "outlet_temperature_template",
"parameters": {
"threshold": 35.0,
"repeat": 10
}
}
安全影响¶
策略参数控制执行过程,不正确的参数可能会导致意外行为。 此 BP 实现了参数的轻松更改,因此需要检查输入参数以确保其在合理范围内。
通知影响¶
无
其他最终用户影响¶
python-watcherclient 需要添加额外的命令行选项用于参数输入。 最终用户需要了解这一点才能调整策略参数。
性能影响¶
无
其他部署者影响¶
无
开发人员影响¶
无
实现¶
负责人¶
- 主要负责人
edwin-zhai
工作项¶
重构代码,将策略选择从 audit 创建移动到 audit-template 创建。 因为我们只有在实例化策略后才能获得策略参数信息。
扩展 audit-template 以显示所选策略及其相关参数的信息
在 python-watcherclient 中添加额外的命令行选项,以便可以使用 ‘watcher audit-create -p xxx=XXX -p yyy=YYY …’ 指定策略参数。
当 ‘watcher audit-create’ 时,应在验证后使用参数来配置所选策略,可以使用 voluptuous 就像操作参数检查一样。
更新 Horizon 插件以确保其仍然适用于这些更改。
每个具有参数的策略类都需要定义一个新函数 ‘input_parameters’ 来设置所有参数,例如 threshold。
每个具有参数的策略类都需要定义一个新函数 ‘parameters_info’ 来返回参数信息,例如 ‘name’、‘type’ 和 ‘description’。
依赖项¶
无
测试¶
添加策略参数的单元和功能测试。
文档影响¶
需要更新 watcher API 文档和用户指南。 在关于策略实现的开发文档中,需要解释如何为策略添加输入参数。
参考资料¶
无
历史¶
无