kitchen-docker_cliというTest-Kitchen Driver Pluginを作った
この記事は Chef Casual Advent Calendar 2014
の25日目の記事です。
Chef Advent Calendar 2014 - Qiita
お詫び
元々はCookbookの書き方、あるいはNginxの設定ファイルの書き方
というタイトルでエントリーしておりましたが、自分の中で優先順位の変化がありましたので別のテーマで書かせていただきます。
Cookbookの書き方、あるいはNginxの設定ファイルの書き方
は自分の書き方、考え方が合っているかの確認も込めて書こうと思っていましたのでまた今度書きます。
これは何?
Docker
コンテナ上でtest-kitchen
によるテストを行うためのDriver Plugin
です。
インストール方法や使用方法は下記のREADMEをご確認ください。
marcy-terui/kitchen-docker_cli · GitHub
kitchen-dockerと何が違うの?
ssh
等は使わず、基本的にdocker
コマンドが標準で用意している機能のみで実装しています。
【翻訳】Dockerコンテナ内でSSHDを実行してはいけない理由 | POSTD
また、kitchen-docker
ではサポートされていない、コンテナ間を接続するためのオプション群をサポートしています。
Linking containers together - Docker Documentation
加えて、test-kitchen
の新サブコマンドexec
に対応しています。
未リリース(2014.12.25現在)ですが、masterのHEAD等を指定してインストールすれば利用可能です。
test-kitchenの新しいサブコマンドexec - Qiita
※まだ最低限動いたレベルのalpha版です。上記のうち、まともに動かないものもあるかもしれません。2014.12.29現在、普通に使えているのでbetaとしました。
普通に仕事で使ってて安定してるし、もうそろそろkithcen-docker
よりだいぶ便利になってる感あるので移ってきてもええんやで…
何故、別のgemにしたの?
そもそもの発端としては、kithcen-docker
でMaster/Slaveやクラスタ構成のテストがしたかったので、コンテナ間の接続のためのpull requestを投げたことから始まります。
しかし、待てど暮らせど作者(or Collaborator)の反応が無い…
それだけならまだしも、作者に何の配慮もせずに「こっちにフォーク作ったからおいで」とか言い出す公共の場で言い出す輩が出てきて、それらに対する他のIssueとかでの作者を置き去りにした反応等を見て、若干オワコン感を感じてしまいました(あくまで個人的見解です)
Forkしても良かったのですが、ssh
使ってるとか、kitchen exec
のサポート入れたいとか、できれば変えたい所が色々あって、特にsshを無くそう
と思ったら大部分を書き換えないといけない感じだったので、著作権云々を考えるのがめんどくさいのもあり、フルスクラッチで新しく作りました。
Forkしてもupstreamで今後の進展があまり期待できないとなると自分でメンテし続けるしか無くなるので、それなら自分で書いたコードの方が良いかなーというのもあります。
今後リリースされる見込みが無い(と思われる)ものをいちいちgithub: 'marcy-terui/kitchen-docker'
とか書きつづけるのもダルイですし。
2014.12.25追記:
Forkに誘導する行為自体を否定しているわけではありません。
まずは周りの理解を得るのが先で、「お前(作者)がやらないから俺がやってやるよ」的なニュアンス(主観です)でまずForkありきで公共の場で誘導するのはどうなのってことです。
2015.01.06追記:
kithcen-docker
でもコンテナ間接続のPRがマージされ、新しいバージョンがリリースされました。
既に業務で使っているのでメンテは続けますが、同時に統合の方向も模索しようと思います。
2015.03.02追記:
結局更新遅いし、PR、Issueも放置気味なので統合は諦めました。
というか最早拙作のやつの方が使い勝手が良くなってきたので戻ることは無いでしょう。
ということで
コンテナ間を接続してテストしたい方、kitchen exec
を使いたい方等、お試しいただき、フィードバックやpull request等いただけましたら幸いです。
ちなみにフルスクラッチなので同じようなオプションもありますが、無いものも多いですし、オプション名も異なることがあります。
kitchen-docker
からの乗換えを検討される際にはご注意ください。
あと余談ですが、テストは一応ちゃんと書いたんですが、test-kitchen
本体から提供されるメソッドが前提条件多いやら、実際にコマンド叩くとテストにならない(特にtravis-ci
上)やらが多く、モックやら前提条件揃えるコードやらでとっ散らかってて困ってます。
サンタさん!どうやったらこういうのが綺麗に書けるか教えてください!w
メリークリスマス!