stackstorm workflows

workflows

StackStorm支持两种类型的工作流: ActionChain和Mistral。
1) ActionChain是StackStorm内部的不加修饰的工作流运行器。它提供了
一个简单的语法来定义了工作链,一个接一个地运行,将一个动作地输出传递
给另外一个,直到动作链成功或失败。
当你想要快速和简便地时候就使用ActionChain吧。
2) Mistral是一个专用地工作流服务,起源于Openstack,集成到了StackStorm中了。
正是Mistral地帮助,你可以通过嵌套工作流来定义复杂工作流的逻辑,
forks, joins,和用于处理,重试,延迟等策略。
当你想要强大的和灵活的工作流就使用Mistral吧。
3) Orquesta是一个新的工作流引擎,专门为StackStorm设计的。
它现在处于公众的beta版本。未来将会取代Action Chain和Mistral。

ActionChain
Workflow是Action集合,Workflow能够定义Action的执行顺序和条件,组合一系列Action完成复杂的任务。StackStorm支持2种类型的Workflow,其中ActionChain是StackStorm定义的Action链。
动作链被定义在包中,在 /opt/stackstorm/packs/<pack>/actions/ 目录下。
一个动作链需要两个文件: 一个YAML元数据文件,和用于简单动作相同的作用,
和一个ActionChain定义文件。元数据文件在 <pack>/actions 目录,
而ActionChain定义被放在 <pack>/actions/chains 目录下。

创建ActionChain需要提供元数据文件echochain.meta.yaml:
/opt/stackstorm/packs/default/actions/echochain.meta.yaml
---
# Action definition metadata
name: "echochain"
description: "Simple Action Chain workflow"

# `runner_type` has value `action-chain` to identify that action is an ActionChain.
runner_type: "action-chain"

# `entry_point` path to the ActionChain definition file, relative to the pack's action directory.
entry_point: "chains/echochain.yaml"

enabled: true
parameters:
  skip_notify:
    default:
      - c2
notify:
  on-complete:
    message: "\"@channel: Action succeeded.\""
    routes:
      - "slack"
ActionChain本质也是一种Action,这个ActionChain元数据文件上也是就Action的规格文件,其中runner_type指定为action-chain,entry_point指定的是ActionChain的规则文件echochain.yaml:
/opt/stackstorm/packs/default/actions/chains/echochain.yaml
---
chain:
    -
        name: "c1"
        ref: "core.local"
        parameters:
            cmd: "echo c1"
        on-success: "c2"
        on-failure: "c4"
    -
        name: "c2"
        ref: "core.local"
        parameters:
            cmd: "echo \"c2: parent exec is {{action_context.parent.execution_id}}.\""
        on-success: "c3"
        on-failure: "c4"
    -
        name: "c3"
        ref: "core.local"
        parameters:
            cmd: "echo c3&&exit 1"
        on-failure: "c4"
    -
        name: "c4"
        ref: "core.local"
        parameters:
            cmd: "echo fail c4"
default: "c1"
参数详解:
chain:是包含动作的数组属性,封装了动作调用
Tasks: 被命名为动作的的执行,并以列表形式指定。名字是在动作链中指定的,并被用于执行一个task。
ref:该属性是一个注册到StackStorm的任务点,这可以在任何pack中。
on-success:是当动作成功执行的时候链接到的任务,如果没有提供,动作链键会以success状态来终止。
on-failuer:是一个可选的链接,可用于当动作执行失败的时候链接到的任务。如果没有提供,动作链将会以error状态来终止。
default: 是一个可选的定义属性,该属性值点明了动作链的起始任务。如果default没有被显示指定,ActionChain会从第一个动作开始指定。

创建ActionChain:
cd /opt/stackstorm/packs/default/actions

st2 action create echochain.meta.yaml

执行ActionChain:

st2 run default.echochain

可以查询子任务的运行情况:

st2 execution get 62f8b0ac78884ba53a7c96b4   

可以重跑失败的子任务:

st2 execution re-run 62f8b0ac78884ba53a7c96b4

如果重命名或者添加参数,需要通过
st2 action update <action.ref> <action.metadata.file> 来更新动作。或者,
通过 st2ctl reload --register-all 将会所所有改变进行再一次加载。

 

posted @ 2022-08-15 00:19  Sky-wings  阅读(139)  评论(0编辑  收藏  举报