前回は『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 2 3 4 |
$ sudo vim /usr/bin/my-nodes-handler.sh #!/bin/bash curl localhost:8500/v1/catalog/nodes > /tmp/nodes.log $ sudo chmod 755 /usr/bin/my-nodes-handler.sh |
別ターミナルからwatchを起動します。
1 |
$ consul watch -type nodes /usr/bin/my-nodes-handler.sh |
ログの最初の状態を確認してみます。
1 2 |
$ tail /tmp/nodes.log [{"Node":"agent-one","Address":"10.0.1.86"}] |
それでは2台目をjoinしてみましょう。
1 2 |
$ consul agent -data-dir /tmp/consul -node=agent-two $ consul join 10.0.1.86 |
watchが動作しているかログを確認してみます。
更新されているのが分かります。
1 2 |
$ tail /tmp/nodes.log [{"Node":"agent-one","Address":"10.0.1.86"},{"Node":"agent-two","Address":"10.0.1.87"}] |
2.keyとkeyprefix
次はkeyとkeyprefixを試してみます。
KV用のHandlerを作成します。
1 2 3 4 |
$ sudo vim /usr/bin/my-key-handler.sh #!/bin/bash curl http://localhost:8500/v1/kv/?recurse > /tmp/kv.log $ sudo chmod 755 /usr/bin/my-key-handler.sh |
keyでwatchを実行します。
1 |
$ consul watch -type key -key test/value /usr/bin/my-key-handler.sh |
空なのを確認します。
1 |
$ tail /tmp/kv.log |
KVをPutしてみます。
1 2 |
$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/value true |
確認してみます。
1 2 |
$ tail /tmp/kv.log [{"CreateIndex":24,"ModifyIndex":24,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}] |
削除してみます。
1 2 |
$ curl -X DELETE http://localhost:8500/v1/kv/test/value true |
更新されて空になるのが確認出来ます。
1 |
$ tail /tmp/kv.log |
keyprefixを試してみます。
keyprefix でwatchを起動します。
1 |
$ consul watch -type keyprefix -prefix test/ /usr/bin/my-key-handler.sh |
試してみます。
1 2 3 4 |
$ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/value true $ curl -X PUT -d 'test' http://localhost:8500/v1/kv/test/test true |
確認してみます。
1 2 |
$ tail /tmp/kv.log [{"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 2 3 4 5 |
$ curl -X DELETE http://localhost:8500/v1/kv/test/test true $ tail /tmp/kv.log [{"CreateIndex":31,"ModifyIndex":31,"LockIndex":0,"Key":"test/value","Flags":0,"Value":"dGVzdA=="}] |
3.event
最後にeventも試してみます。
event用のHandlerを作成します。
1 2 3 4 |
$ sudo vim /usr/bin/my-event-handler.sh #!/bin/bash date > /tmp/date.log $ sudo chmod 755 /usr/bin/my-event-handler.sh |
event でwatchを起動します。
1 |
$ consul watch -type event -name datetime /usr/bin/my-event-handler.sh |
確認します。
1 2 |
$ tail /tmp/date.log Thu Apr 2 04:57:18 UTC 2015 |
別ターミナルからeventを実行します。
1 2 |
$ consul event -name datetime Event ID: ed708247-abac-30ef-6c4b-16b902176e7b |
更新されているのが分かります。
1 2 |
$ tail /tmp/date.log Thu Apr 2 04:58:34 UTC 2015 |
いかがでしたでしょうか?
次回もお楽しみに!!!