• 4 stackstorm定时器基础 Sky


    4 定时器基础
    定时器从本质上来说就是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                                       |
    | action        | {                                                        |
    |               |     "ref": "default.write_content.sh",                   |
    |               |     "parameters": {                                      |
    |               |         "content": "chaos_first_rule"                    |
    |               |     }                                                    |
    |               | }                                                        |
    | context       | {                                                        |
    |               |     "user": "st2admin"                                   |
    |               | }                                                        |
    | criteria      |                                                          |
    | enabled       | True                                                     |
    | metadata_file |                                                          |
    | ref           | default.rule_write_content                               |
    | tags          |                                                          |
    | trigger       | {                                                        |
    |               |     "type": "core.st2.CronTimer",                        |
    |               |     "ref": "core.51b8a980-8c60-4898-baba-5c10c332e80c",  |
    |               |     "parameters": {                                      |
    |               |         "timezone": "Asia/Shanghai",                     |
    |               |         "second": 0,                                     |
    |               |         "minute": "",                                   ||               |         "hour": "",                                     |
    |               |         "day_of_week": "*"                               |
    |               |     }                                                    |
    |               | }                                                        |
    | type          | {                                                        |
    |               |     "ref": "standard",                                   |
    |               |     "parameters": {}                                     |
    |               | }                                                        |
    | uid           | rule:default:rule_write_content                          |
    +---------------+----------------------------------------------------------+
    
    4 创建规则中指定的动作
    4.1 先定义action的metadata文件
    具体是创建一个文件名字为:
    write_content_metadata.yaml
    具体内容如下:
    name: "write_content_action"
    description: "write content"
    runner_type: "python-script"
    enabled: true
    entry_point: "write_content.py"
    parameters:
        content:
            type: "string"
            description: "content parameter"
            required: true
            position: 0
    
    4.2 创建action对应的脚本文件
    文件名字如下: write_content.py
    具体内容如下:
    from datetime import datetime
    from st2common.runners.base_action import Action
    class CounterAction(Action):
    # append content into file
    def run(self, content):
        fileName = "/home/counter.txt"
        try:
            currTime = str(datetime.now())
            # note, a+ means append instead of w+
            with open(fileName, "a+") as fr:
                realContent = "content: "  + str(content) + ", time: " + currTime + "\n"
                fr.write(realContent)
            return (True, content)
        except Exception as ex:
            return (False, content)
    
    4.3 将action脚本文件write_content.py拷贝到目录
    /opt/stackstorm/packs/default/actions
    4.4 创建action
    执行如下命令: st2 action create write_content_metadata.yaml
    创建动作后的输出结果:
    +---------------+--------------------------------------------+
    | Property      | Value                                      |
    +---------------+--------------------------------------------+
    | id            | 5c655abf9dc6d60729fc00ae                   |
    | name          | write_content_action                       |
    | pack          | default                                    |
    | description   | write content                              |
    | enabled       | True                                       |
    | entry_point   | write_content.py                           |
    | metadata_file |                                            |
    | notify        |                                            |
    | output_schema |                                            |
    | parameters    | {                                          |
    |               |     "content": {                           |
    |               |         "position": 0,                     |
    |               |         "required": true,                  |
    |               |         "type": "string",                  |
    |               |         "description": "content parameter" |
    |               |     }                                      |
    |               | }                                          |
    | ref           | default.write_content_action               |
    | runner_type   | python-script                         |
    | tags          |                                            |
    | uid           | action:default:write_content_action        |
    +---------------+--------------------------------------------+
    5 检测定时器是否生效
    根据步骤4.2中会生成/home/counter.txt,如果看到该文件,并且文件内容类似如下:
    content: first_rule, time: 2018-02-04 22:26:22.712110
    说明定时器生效。
    6 总结
    编写规则的完整过程
    1 编写规则,主要包含两部分:
    触发器和动作。
    动作需要提供:动作元数据文件用于动作注册,还需要提供具体执行的动作脚本,将该动作执行脚本放到/opt/stackstorm/packs/<pack_name>/actions目录下。
    先注册动作,然后可以执行: st2 action <action_name> 来手动先验证一下动作本身是否正确
    然后注册规则。
    然后可以打开: /var/log/st2rulesengine.log,查看规则校验结果,如果校验成功,
    然后打开: /var/log/st2actionrunner.<xxx>.log 查看动作具体执行情况。
  • 相关阅读:
    Java学习个人备忘录之继承
    Java学习个人备忘录之文档注释
    Java学习个人备忘录之数组工具类
    Java学习个人备忘录之关键字static
    Java学习个人备忘录之构造函数&this
    Java学习个人备忘录之面向对象概念
    Java学习个人备忘录之数组
    Java学习个人备忘录之入门基础
    hdoj1162-Eddy's picture(kruskal)
    hdoj1102-Constructing Roads(Kruskal)
  • 原文地址:https://www.cnblogs.com/skyzy/p/16549251.html
Copyright © 2020-2023  润新知