StackStormでは、WebHookからトリガーを受け付けることでPackがないツールとも連携が可能になっている。
確かに、ここにあるPackだけだといろいろと少なかったりするので、この機能はあるとうれしい。

早速テストしてみよう。
といっても、以下のようなテスト用のルールを作成するだけだ。

test_webhook.yml
--- name: "webhook_test" pack: "default" description: "WebHook Test Rule." enabled: true trigger: type: "core.st2.webhook" parameters: url: "test" criteria: trigger.body.name: pattern: "abcd" type: "matchregex" action: ref: "core.local" parameters: cmd: "echo \"{{trigger.body}}\" >> /work/st2.webhook_sample.out"

yamlファイル作成後、以下のコマンドでRuleを作成する。

st2 rule create test_webhook.yml

…で、Ruleを作成したらそれで終わりというわけではなく、外部からWebHookにアクセスするためのAPIキーを作成する。
すでにAPI Tokenが払い出されているコンソールで以下のコマンドを実行する。

st2 apikey create -k -m '{"used_by": "WebHook Test"}'

[root@BS-PUB-STACKSTORM ~]# st2 apikey create -k -m '{"used_by": "WebHook Test"}'
YWI3Y2QwNzNiZjFlZDIzZWMxYjQ1NzU1MjI5Mzk3MzA0MDQyM2U5M2Y5YTQ5OGM0M2FkZDg3Y2I4YjU2M2ZmMw

あとは、払い出されたAPIキーをもって外部ノードから以下のようにcurlを実行すればよい。

curl --insecure -k https://IPアドレスorホスト名/api/v1/webhooks/test -d '{"foo": "ttt", "name": "abcdefgh"}' -H 'Content-Type: application/json' -H 'St2-Api-Key:APIキー'
blacknon@BS-PUB-GRAYLOG:~$ curl --insecure -k https://XXX.XXX.XXX.XXX/api/v1/webhooks/test -d '{"foo": "ttt", "name": "abcdefgh"}' -H 'Content-Type: application/json' - 'St2-Api-key:NzEyYTNhY2ZiNTNlMzFjNjFkOWFkZTgzZjdmOWNmMTZjNDQ0YTcyMDY4ZjVjMTMzMjBiYTk4MjU4YzIwOWFlYg'
{
    "foo": "ttt",
    "name": "abcdefgh"
}

これで、WebHook経由でのやり取りができるようになった。