StackStorm分析(九)Webhook说明

StackStorm介绍

       StackStorm是一个强大的自动化平台,结合DevOpsChatOps,提供可扩展、灵活和健壮的工具链用于应用、服务和工作流的自动化能力。

 


 

Webhook

       StackStorm提供了Webhook来触发Trigger。 Sensor是属于pull的机制,即Sensor去探测外部系统,当事件发生时区触发Trigger。而Webhook是的push的机制,由外部系统来调用Webhook来主动触发Trigger。

自定义Webhook

       StackStorm提了一个Triggercore.st2.webhook用于注册Webhook:

$ st2 trigger get core.st2.webhook

+-------------------+--------------------------------------------------------------+

| Property          | Value                                                        |

+-------------------+--------------------------------------------------------------+

| id                | 5afa49092b2556015687cca4                                     |

| ref               | core.st2.webhook                                             |

| pack              | core                                                         |

| name              | st2.webhook                                                  |

| description       | Trigger type for registering webhooks that can consume       |

|                   | arbitrary payload.                                           |

| parameters_schema | {                                                            |

|                   |     "additionalProperties": false,                           |

|                   |     "type": "object",                                        |

|                   |     "properties": {                                          |

|                   |         "url": {                                             |

|                   |             "required": true,                                |

|                   |             "type": "string"                                 |

|                   |         }                                                    |

|                   |     }                                                        |

|                   | }                                                            |

| payload_schema    | {                                                            |

|                   |     "type": "object"                                         |

|                   | }                                                            |

| tags              |                                                              |

| uid               | trigger_type:core:st2.webhook                                |

+-------------------+--------------------------------------------------------------+

 

注册Webhook实际上就是创建一个RuleRuleTriggercore.st2.webhook

/opt/stackstorm/packs/examples/rules/sample_rule_with_webhook.yaml

---

    name: "sample_rule_with_webhook"

    pack: "examples"

    description: "Sample rule dumping webhook payload to a file."

    enabled: true

 

    trigger:

        type: "core.st2.webhook"

        parameters:

            url: "sample"

 

    criteria:

        trigger.body.name:

            pattern: "st2"

            type: "equals"

 

    action:

        ref: "core.local"

        parameters:

            cmd: "echo \"{{trigger.body}}\" >> ~/st2.webhook_sample.out ; sync"

 

core.st2.webhook需要提供一个参数url,这就是Webhook的调用URL,比如url: "sample"那么Webhook的调用URL就是http://{$ST2_IP}/api/v1/webhooks/sample

 

创建完Action相应的Webhook也就注册成功,可以通过命令行查询到:

$ st2 webhook list

+---------+------------------+-------------+

| url     | type             | description |

+---------+------------------+-------------+

| sample  | core.st2.webhook |             |

+---------+------------------+-------------+

    Webhook是调用StackStorm的API,API地址可以通过配置文件/etc/st2/st2.conf查看:

# Base URL to the API endpoint excluding the version

api_url =http://127.0.0.1:9101

另外调用StackStorm API需要提供Authentication,创建一个api-key

$ st2 apikey create -k -m '{"used_by": "my integration"}'

YTkyNWYyOGE0YjEyMjQyYjgxYTdlNTRjYWFjZjA1OWM2ZDZkNWJiODEyZDczMjU1YWE5MmE2NjIwNTRjOWRiOA

 

备注:Authentication参考

https://github.com/StackStorm/st2docs/blob/master/docs/source/authentication.rst

然后就可以调用Webhook:

$ curl -X POST  http://127.0.0.1:9101/v1/webhooks/sample \

-H  'St2-Api-Key: YTkyNWYyOGE0YjEyMjQyYjgxYTdlNTRjYWFjZjA1OWM2ZDZkNWJiODEyZDczMjU1YWE5MmE2NjIwNTRjOWRiOA' \

-H "Content-Type: application/json" \

--data '{"name": "st2"}'

Webook调用成功后,并且匹配Rule的规则,Webhook的请求消息体name==st2,这样就会执行Action,输出日志到  ~/st2.webhook_sample.out


通用Webhook

         除了创建Rule的注册Webhook之外,可以直接调用StackStrom提供的通用Webhook名称叫st2,URL是http://{$ST2_IP}/api/v1/webhooks/st2。通过调用通用Webhook就可以直接利用已有的Rule,不需要再单独创建Rule

比如已经有个Rule:

...
trigger:
    type: "mypack.mytrigger"
 
criteria:
    trigger.attribute1:
        type: "equals"
        pattern: "value1"
 
action:
    ref: "mypack.myaction"
    parameters:
...

 

然后调用通用Webhook:

$ curl -X POST  http://127.0.0.1:9101/v1/webhooks/st2 \

-H  'St2-Api-Key: YTkyNWYyOGE0YjEyMjQyYjgxYTdlNTRjYWFjZjA1OWM2ZDZkNWJiODEyZDczMjU1YWE5MmE2NjIwNTRjOWRiOA' \

-H "Content-Type: application/json" \

--data '{"trigger": "mypack.mytrigger", "payload": {"attribute1": "value1"}}'


 

参考

  • lhttps://docs.stackstorm.com/index.html


作者简介

吴龙辉,现任网宿科技云计算架构师,致力于云计算PaaS的研究和实践,《Kubernetes实战》作者,活跃于CloudFoundry,Docker,Kubernetes等开源社区,贡献代码和撰写技术文档。 
邮箱: [email protected]


猜你喜欢

转载自blog.csdn.net/wlhdo71920145/article/details/80354855