misc.tech.notes

主に技術的な雑記的な

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

メリークリスマス!