Consulでnodeの増減時に特定のスクリプトを実行させる

TL;DR

ConsulでSerfのEvent Handlerのようなものを試したメモ

main

Consulの0.4からWatchesという機能が追加されて
Serfのevent handlerのようなことができるようになった。

昨日つくったconsul-test

  • node01/config.json
{
  "node_name": "node01",
  "data_dir": "./node01/",
  "bind_addr": "127.0.0.1",
  "client_addr": "127.0.0.1",
  "ui_dir": "./dist/",
  "watches": [
    {
      "type": "nodes",
      "handler": "./node01/hosts_update.rb"
    }
  ]
}

watchesの設定を追加してみた。

hosts_update.rbでやっていることはシンプルで
nodesに変化があった場合に、標準入力でnodesの情報を取得し、
ディレクトリに_hostsファイルを生成して、
nodeの名前とそのAddressを
hostsファイルに似せて出力するようにしている。

ConsulにはSERF_EVENTのような
管理しているnodeの変化の状態をSTDINで受け取る方法はないのだろうか

雑談

このような簡単なスクリプトはGoで書いてもいいかもしれないけど
バイナリだけ置いてあるような状態の時に
作成者を全面的に信用するみたいな部活っぽい対応になりそう。
簡易スクリプトをGoで書いたらバイナリとそのソースファイルを
ディレクトリに置いておくとかが良いんだろうか。