注: タイトルには釣り成分が含まれています

はてなの人達の開発合宿が羨ましかったので、昨日、社内の同志で集まって Immutable Infrastructure Hackathon at :D を開催しました。メンバーは自分(@sonots)と、最近 Node.js 日本ユーザグループ代表に就任した代表こと@yosuke_furukawa氏に、チーム Miami 仲間の@Spring_MT 氏、 @niku4i 氏、そして期待の若手 @takus 氏の5人でした。

ネタは各自バラバラで好きなものをやろうというスタンスで、自分は正月休みだし Serf 触ってみたの続きで、serf やろうかなぁと思っていたのですが、午前中には課題だと思っていた Serf の graceful restart の機能が すでにあることがわかったので、やることなくなっちゃった\(^o^)/ってかんじでした。

ということで、次に @mizzy さんが作っていた configspec という Immutable Infrastructure 用 Configuration Management Tool を触ってみることにしました。@mizzy さんの言を借りると、configspec は以下のような要件を満たすツールですね。

  • 冪等性とかどうでもいい
    • まっさらな状態からのセットアップでしか使わない
  • 依存関係とかどうでもいい
    • ファイル名順、上から書いた順で実行してく
  • 対象サーバに余分なものをインストールしたくない
    • 対象サーバに SSH さえできれば OK
  • シェルスクリプトよりは抽象度を高めたい
    • 今さらシェルスクリプトでのセットアップには戻りたくない… 

 で、自分としては一番試してみたかったのは、

機能で、これを使えば

  1. configspec で仮想サーバをセットアップする
  2. セットアップできたのを確認したら Dockerfile を吐き出す

というような手順を踏むことで、ひょっとして良い感じに動作保証された Dockerfile を作れたりするんじゃないか??と思ったので検証してみようと思った次第でした。結構 Dockerfile の動作検証辛いっすよね?


ということで、ふむふむ、なるほどー、と思いつつ README と コードを眺めてたのですが、

とのことだったので、まだそういう段階か、残念だなー、とか思っていたら、


という感じでいつのまにか、serverspec, configspec のコミッタになっていた。

あ...ありのまま今起こったことを話すぜ。何を言っているかわからねーと思うが(ry




そんなこんなありまして、とりあえず ruby を rbenv で入れる時にいつもやっている以下の2行の内容を ~/.bash_profile に足す、もしくは /etc/profile.d/rbenv.sh に作る作業を configspec でできるようにしたいなぁと思って
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"
しこしこコーディングして
プルリクしました!! 

これにより、

describe package('httpd') do
  it { should be_installed }
end

というパッケージインストールに加えて第二のコマンド、

describe file('remote_path') do
  it { should be_sourced_from('local_path') }
end

が実行できるようになりました!!chef でいうところの remote_file みたいなもので、ローカルのファイルをリモートにコピーするコマンドですね。まだパーミッションオプションとか足してないけど ^^; 裏側では Net::SCP でファイルがコピーされますね(`・ω・´)

ということで configspec はまだこれからのプロダクトなので、皆でプルリク送っていけばいいんじゃないかな!!コミッタになれる敷居は低い!!w

以上、@sonots でした。