使默认 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 的权重现在可以在配置文件中指定。

参考资料

历史