增强 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’
实现回调函数
依赖项¶
无
测试¶
所有更改的单元测试
文档影响¶
无
参考资料¶
无
历史¶
无