使默认 Planner 具有通用性¶
https://blueprints.launchpad.net/watcher/+spec/configurable-weights-default-planner
问题描述¶
Watcher 提供了一种非常模块化的架构,目前允许任何人提供自定义插件
策略
Planner
操作
工作流引擎
在上述大部分组件中,它们的实现都足够通用,可以开箱即用地与任何第三方插件一起工作。然而,目前defaultplanner并非如此,它为每种操作类型定义了一组硬编码的优先级。
因此,这意味着通过操作插件添加新的Action并在策略中引用它会导致错误,唯一的解决方案是创建一个 planner 插件来适应这个新的 action。
这对于 Watcher 用户来说不太友好,因为这意味着每次有人添加新的 action 时,都需要修改 planner 的源代码。
用例¶
作为管理员,我希望能够添加一个新的Action,而无需修改defaultplanner的源代码。
项目优先级¶
中等
提议的变更¶
本规范建议修改 DefaultPlanner 类 watcher/decision_engine/planner/default.py,以避免每次添加新的 action 插件时都必须实现一个新的 planner。一个简单的解决方案是利用plugins-parameters蓝图,以便我们可以通过配置文件配置权重。
目前在 watcher 中,权重定义如下
priorities = {
'nop': 0,
'sleep': 1,
'change_nova_service_state': 2,
'migrate': 3
}
我们需要将其替换为以下代码
self.weights_dict = {'nop': 0,
'sleep': 1,
'change_nova_service_state': 2,
'migrate':3}
def get_config_opts(self):
return [
cfg.DictOpt('weights', help="These weights are used to schedule
the Actions.",
default=self.weights_dict),
]
备选方案¶
无
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
用户需要修改可配置的文件并重启决策引擎。
性能影响¶
无
其他部署者影响¶
我们正在配置文件中添加一个新的字段。因此,我们应该重新审视 puppet 脚本。
开发人员影响¶
无
实现¶
负责人¶
主要负责人:倪金泉 <ni.jinquan@zte.com.cn>
工作项¶
替换默认 planner 中权重的存储方式
更新文档
添加单元测试
依赖项¶
无
测试¶
将添加单元测试以验证这些修改。
文档影响¶
更新defaultplanner文档,以说明 planner 的权重现在可以在配置文件中指定。
参考资料¶
历史¶
无