前回は『 OSS編~オーケストレーションツール Consul 07 ACLs編~ 』と題して、オーケストレーションのConsulでACLsを試してみました。
今回は『OSS編~オーケストレーションツール Consul 08 Watches編~』と題して、オーケストレーションのConsulでWatchesを試してみたいと思います。
Watchesとは
Watches は Consul が参照しているデータで変更を検出したときにハンドラを実行する機能です。
利用出来るデータは以下になります。
・key – KVのキー
・keyprefix – KVストアのPrefix
・services – サービスのリスト
・nodes – ノードリスト
・service- インスタンスのサービス
・checks – ヘルスチェックのバリュー
・event – カスタムユーザーイベント
試してみる
1.nodes
先ずはnodesを試してみます。
Consulサーバを立ち上げておきます。
1$ consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=agent-one次にHandlerを記述しておきます。
nodes情報を取得してログを残します。
1$ sudo vim /usr/bin/my-nodes-handler.sh2#!/bin/bash3curl localhost:8500/v1/catalog/nodes > /tmp/nodes.log4$ sudo chmod 755 /usr/bin/my-nodes-handler.sh別ターミナルからwatchを起動します。
1$ consul watch -type nodes /usr/bin/my-nodes-handler.shログの最初の状態を確認してみます。
1$ tail /tmp/nodes.log2[{"Node":"agent-one","Address":"10.0.1.86"}]それでは2台目をjoinしてみましょう。
1$ consul agent -data-dir /tmp/consul -node=agent-two2$ consul join 10.0.1.86watchが動作しているかログを確認してみます。
更新されているのが分かります。
1$ tail /tmp/nodes.log2[{"Node":"agent-one","Address":"10.0.1.86"},{"Node":"agent-two","Address":"10.0.1.87"}]2.keyとkeyprefix
次はkeyとkeyprefixを試してみます。
KV用のHandlerを作成します。
1$ sudo vim /usr/bin/my-key-handler.sh2#!/bin/bash3curl http://localhost:8500/v1/kv/?recurse > /tmp/kv.log4$ sudo chmod 755 /usr/bin/my-key-handler.shkeyでwatchを実行します。
1$ consul watch -type key -key test/value /usr/bin/my-key-handler.sh空なのを確認します。
1$ tail /tmp/kv.logKVをPutしてみます。
1$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/value2true確認してみます。
1$ tail /tmp/kv.log23[{"CreateIndex":24,"ModifyIndex":24,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}]削除してみます。
1$ curl -X DELETE http://localhost:8500/v1/kv/test/value2true更新されて空になるのが確認出来ます。
1$ tail /tmp/kv.logkeyprefixを試してみます。
keyprefix でwatchを起動します。
1$ consul watch -type keyprefix -prefix test/ /usr/bin/my-key-handler.sh試してみます。
1$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/value2true3$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/test4true確認してみます。
1$ tail /tmp/kv.log23[{"CreateIndex":32,"ModifyIndex":32,"LockIndex":0,"Key":"test/test","Flags":0,"Value":"dGVzdA=="},{"CreateIndex":31,"ModifyIndex":31,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}]削除でも確認してみます。
1$ curl -X DELETE http://localhost:8500/v1/kv/test/test2true34$ tail /tmp/kv.log56[{"CreateIndex":31,"ModifyIndex":31,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}]3.event
最後にeventも試してみます。
event用のHandlerを作成します。
1$ sudo vim /usr/bin/my-event-handler.sh2#!/bin/bash3date > /tmp/date.log4$ sudo chmod 755 /usr/bin/my-event-handler.shevent でwatchを起動します。
1$ consul watch -type event -name datetime /usr/bin/my-event-handler.sh確認します。
1$ tail /tmp/date.log2Thu Apr 2 04:57:18 UTC 2015別ターミナルからeventを実行します。
1$ consul event -name datetime2Event ID: ed708247-abac-30ef-6c4b-16b902176e7b更新されているのが分かります。
1$ tail /tmp/date.log2Thu Apr 2 04:58:34 UTC 2015いかがでしたでしょうか?
次回もお楽しみに!!!