Posted at

Serf のイベントハンドラとして Ruby を使用する

More than 5 years have passed since last update.

下記の記事ではイベントハンドラとしてシェルスクリプトの例をご紹介しました。

http://qiita.com/foostan/items/5d61595b1b331a73b8c9#3-5

Serfのイベントハンドラは任意の言語のスクリプトが利用できるため、今回は Ruby で試してみます。

#!/usr/bin/env ruby

p ENV
while line = STDIN.gets
p line.split(/\s/)
end

各種環境変数は ENV から普通に取り出せて、ホスト名やIPアドレスなどは、標準入力として渡されるので、STDIN.gets で受け取れます。

例えば member-joinの際は以下のような実行結果が得られます。



2014/05/31 17:00:42 [DEBUG] agent: Event 'member-join' script output:

{"HOSTNAME"=>"agent1", "SHLVL"=>"1", "HOME"=>"/", "SERF_EVENT"=>"member-join", "SERF_SELF_ROLE"=>"", "_"=>"/usr/local/bin/serf", "TERM"=>"xterm", "PATH"=>"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "SERF_SELF_NAME"=>"agent1", "PWD"=>"/"}

["agent1", "172.17.0.8"]

Ruby でも簡単にイベントを受け取ることができました。

シェルスクリプトよりも扱いやすそうで良さげです。