增强 Watcher 应用器引擎

https://blueprints.launchpad.net/watcher/+spec/enhance-watcher-applier-engine

Taskflow 是 Watcher 应用器的默认工作流引擎。在 Watcher 中,关联动作的流程模式是图流程。对于父动作 A 和子动作 B,这意味着 B 依赖于 A,并且 B 的执行必须等待 A 完成。Taskflow 具有一个回调函数,用于在运行时决定是否允许执行 B。回调函数返回布尔值 True 以允许 B 执行,或 False 以禁止执行。目前,Watcher 应用器中的回调函数始终返回 True。

问题描述

例如,我们想要实时迁移一个虚拟机,如果存在两个满足要求的潜在目标节点。但是,我们不知道哪个节点能够成功迁移。现有的策略将选择一个来创建迁移动作,如果目标节点中资源不足,该动作可能会失败。一种解决方案是为这两个潜在目标创建两个关联动作。如果第一个动作成功,则忽略第二个动作。否则,继续执行第二个动作。为此,我们需要回调函数根据先前动作 A 的执行结果返回 True 或 False。除非动作 A 失败,否则应执行动作 B。如果动作 A 执行成功,则应忽略动作 B 的执行。

用例

作为 Watcher 用户,我希望根据先前动作的结果来决定是否执行某个动作。

提议的变更

现在回调函数,名为 decider,始终返回 True。我们建议添加一个新的配置选项 ‘action_execution_rule’,它是一种字典类型。其键字段是策略名称,值可以是 ‘ALWAYS’ 或 ‘ANY’。‘ALWAYS’ 表示回调函数像往常一样返回 True。‘ANY’ 表示返回值取决于先前动作的执行结果。如果先前动作失败,则回调返回 True,引擎继续运行下一个动作。如果先前动作执行成功,则回调返回 False,然后忽略下一个动作。对于不在 ‘action_execution_rule’ 中的策略,回调始终返回 True。

如果在动作执行期间抛出异常,taskflow 将触发回滚。为了继续执行下一个动作,我们返回 False 而不是抛出异常。

备选方案

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

性能影响

其他部署者影响

‘action_execution_rule’ 的默认值不会改变 Applier 的行为。

开发人员影响

实现

负责人

主要负责人

licanwei

工作项

  • 添加一个新的配置选项 ‘action_execution_rule’

  • 实现回调函数

依赖项

测试

所有更改的单元测试

文档影响

参考资料

历史