1 actionchain基础
创建一个动作链
动作链被定义在包中,在 /opt/stackstorm/packs/<pack>/actions/ 目录下。
一个动作链需要两个文件: 一个YAML元数据文件,和用于简单动作相同的作用,
和一个ActionChain定义文件。元数据文件在 <pack>/actions 目录,
而ActionChain定义被放在 <pack>/actions/chains 目录下
脚本文件需要包含如下信息:
chain:是包含动作的数组属性,封装了动作调用
Tasks: 被命名为动作的的执行,并以列表形式指定。名字
是在动作链中指定的,并被用于执行一个task。
ref:该属性是一个注册到StackStorm的任务点,这可以在任何pack中。
on-success:是当动作成功执行的时候链接到的任务,如果没有提供,
动作链键会以success状态来终止。
on-failuer:是一个可选的链接,可用于当动作执行失败的时候链接到的任务。、
如果没有提供,动作链将会以error状态来终止。
default: 是一个可选的定义属性,该属性值点明了动作链的起始任务。如果default
没有被显示指定,ActionChain会从第一个动作开始指定。
2 编写actionchain的元数据文件
文件名:
echochain.meta.yaml
内容如下:
name: "echochain"
description: "action chain demo"
runner_type: "action-chain"
entry_point: "chains/echochain.yaml"
enabled: true
parameters:
skip_notify:
default:
- c2
notify:
on-complete:
message: "\"@channel: Action succeeded.\""
routes:
- "slack"
注意:
default:
- c2
-和c2之间有空格
3 编写actionchain的脚本文件
文件名:
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"
on-failure: "c4"
-
name: "c4"
ref: "core.local"
parameters:
cmd: "echo fail c4"
default: "c1"
4 创建actionchain
执行如下命令:
st2 action create echochain.meta.yaml
输出结果如下:
+---------------+----------------------------------------------------+
| Property | Value |
+---------------+----------------------------------------------------+
| Property | Value |
+---------------+----------------------------------------------------+
| id | 5c6547679dc6d60729fc00a7 |
| name | echochain |
| pack | default |
| description | action chain demo |
| enabled | True |
| entry_point | chains/echochain.yaml |
| metadata_file | |
| notify | { |
| | "on-complete": { |
| | "routes": [ |
| | "slack" |
| | ], |
| | "message": ""@channel: Action succeeded."" |
| | } |
| | } |
| output_schema | |
| parameters | { |
| | "skip_notify": { |
| | "default": [ |
| | "c2" |
| | ] |
| | } |
| | } |
| ref | default.echochain |
| runner_type | action-chain |
| tags | |
| uid | action:default:echochain |
+---------------+----------------------------------------------------+
查看动作链是否生成:
[root@localhost actionchain_demo]# st2 action list|grep echochain
| default.echochain | default | action chain demo
5 执行actionchain
执行如下命令:
st2 run default.echochain
输出结果:
..
id: 5c6547d79dc6d60729fc00a9
action.ref: default.echochain
parameters: None
status: succeeded
result_task: c3
result:
failed: false
return_code: 0
stderr: ''
stdout: c3
succeeded: true
start_timestamp: Thu, 14 Feb 2019 10:49:59 UTC
end_timestamp: Thu, 14 Feb 2019 10:50:03 UTC
+--------------------------+------------------------+------+------------+--------------------------+
| id | status | task | action | start_timestamp |
+--------------------------+------------------------+------+------------+--------------------------+
| 5c6547d79dc6d605622a7c50 | succeeded (1s elapsed) | c1 | core.local | Thu, 14 Feb 2019 |
| | | | | 10:49:59 UTC |
| 5c6547d99dc6d605622a7c52 | succeeded (1s elapsed) | c2 | core.local | Thu, 14 Feb 2019 |
| | | | | 10:50:00 UTC |
| 5c6547da9dc6d605622a7c54 | succeeded (0s elapsed) | c3 | core.local | Thu, 14 Feb 2019 |
| | | | | 10:50:02 UTC |
+--------------------------+------------------------+------+------------+--------------------------+
参考:
[1] https://docs.stackstorm.com/actionchain.html