読者です 読者をやめる 読者になる 読者になる

ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

ペパボテックカンファレンスでConsulの話をした && Consulで遊びまくるDSL、“Populus”を作っている

pepabo.connpass.com

話した。

そして、先日のエントリでもちょこっと触れたんですが、Consulのクラスタで遊びまくるためのミドルウェアpopulus をいうものを作ってる。

udzura.hatenablog.jp

github.com

今の実装(v0.0.4)でも、以下のようなDSLというかRubyのコード片を書いて、 sample.popl みたいなファイル名で保存して、

Populus.config do
  set :slack_webhook, "https://hooks.slack.com/services/XXXXXX"
end

Populus.watch :event, name: "echo" do
  cond {|data| data.any?{|d| d.has_key?('Payload')} }
  runs do |data|
    event = data.find{|d| d.has_key?('Payload')}
    Populus.logger.info "From populus!!!"
    Populus.logger.info Base64.decode64(event['Payload'])
  end
end

Populus.watch :event, name: "slack" do
  cond {|data| data.any?{|d| d.has_key?('Payload')} }
  runs do |data|
    event = data.first

    notify_to_slack("Hello!!!\nConsul event payload:\n>>> `#{event.inspect}`", channel: '#test', username: "Populus")
  end
end
$ bundle exec populus watch sample.popl

といった感じでデーモンを立ち上げれば、ローカルにいるConsulに接続してイベントを監視してくれる。

いまのとこノードの変更やヘルスチェックの変更にキックするところまではできていない(一応すぐ対応できるはずなんだけど...)。

あとテストとかすら何もないので、試すにあたっては自己責任な感じで。

デモはこちら。

この日の発表のために間に合わせて作った感があって、早速コミットのstrokeが止まっているが、回復したらまたぼちぼちと開発を再開する予定。。しかし、逆に考えるとテックカンファレンスがなかったらいつまでたってもプロトタイプすらできていなかった可能性がある。テックカンファレンスがあって良かった。

発表後力尽きて、同僚の皆さんの発表をあまり集中して見られず申し訳なかったんだけれど、みんな衝撃的かつ高度な発表ばかりだったので、なんか僕もちゃんと頑張って良かったなと思いました。

ご参加の皆様ありがとうございました!