1 定时器基础
定时器从本质上来说就是stackstorm中的rule。
规则对trigger触发器到action(或工作流)做了映射。应用匹配的criteria并且
映射trigger payloads到动作的输入。
说白了rules包含trigger,action,criteria(可以不需要)3个部分,来将事件
的触发映射到动作的执行。
trigger是前置条件,如果触发,则继续查看criteria(如果存在的化)条件是否匹配,
如果匹配,则触action。
rule的主要格式如下:
name: 规则名称
pack: 规则的属于方,如果没有指定pack则为default
description: 规则的描述
enabled: 规则是否开启(true或者false)
trigger:emitted from sensors to monitor, and optionally parameters associated with that trigger.
criteria:可选择的集合,包含
一个trigger的payload的属性
criteria比较的类型
pattern: to match against.
action:当一个规则被满足时,执行的动作,包含:
ref:动作或工作流的名称
parameters: 执行动作的参数(可选)
管理规则
通过命令
st2 rule create ${PATH_TO_RULE}
来部署规则
例如:
st2 rule create /usr/share/doc/st2/examples/rules/sample_rule_with_webhook.yaml
加载所有规则,使用:
st2ctl reload --register-rules
自定义规则被放在:
/opt/stackstorm/packs/<pack_name>/rules
目录。
例如:
/opt/stackstorm/packs/examples/rules
2 编写一个规则文件
print_rule.yaml
内容如下:
---
name: "print_rule"
pack: "default"
description: "print rule"
enabled: true
trigger:
type: "core.st2.CronTimer"
parameters:
timezone: "Asia/Shanghai"
day_of_week: "*"
hour: "*"
minute: "*"
second: 0
action:
ref: "default.write_content_action"
parameters:
content: "first_rule"
注意:
这里action下面的ref一定是实际的action名称,
不要写错成action执行的脚本文件名
将规则文件放在对应目录下面
关键是规则存放在哪里,
最终存放在:
/opt/stackstorm/packs/default/rules
3 创建规则
st2 rule create /opt/stackstorm/packs/default/rules/write_rule.yaml
输出结果:
+---------------+----------------------------------------------------------+
| Property | Value |
+---------------+----------------------------------------------------------+
| id | 5c6559a59dc6d60729fc00ad |
| name | rule_write_content |
| pack | default |
| description | write content rule |
| ac