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

There's an echo in my head

日々のメモ。

knife-soloを手軽に並列に走らせるためのpaknife gemをとりあえずリリースした

とりあえず動くようになったのでv0.0.7と中途半端だけどリリースした。rubygems.orgもしくはGitHubを参照。

概要

次のようにノードを複数指定するとそれらに対して並列にknife soloコマンドを実行する。

$ paknife solo cook node1 node2 node3

同時実行数

デフォルトだと同時に2つまでに制限しているんだけど、これは--threadsもしくは-tオプションで指定できる。

$ paknife --threads 3 solo cook node1 node2 node3 node4 node5 node6

もしくは同時実行数の代わりにmaxを渡すと、指定したノード数だけ同時に実行する。

$ paknife --threads max solo cook node1 node2 node3 node4 node5

このオプションは環境変数PAKNIFE_THREADSでも指定できる。

裏で走らせるコマンド

デフォルトだと$ paknife solo ...としたときには$ bundle exec knife solo ...を実行している。

これは大体のgemはbundlerを使ってプロジェクトごとに入れてるだろうって想定からそうしているんだけど、場合によってはグローバルでknife-soloを入れているかもしれない。そういうときには--knifeもしくは-kオプションでそのknifeを実行するためのパスを記述する。

$ paknife --knife="knife" solo cook node1 node2

このオプションは環境変数PAKNIFE_KNIFEでも指定できる。

knife-soloオリジナルのオプション

knife-soloオリジナルのオプションは末尾に付けることで、個々のknife soloコマンドに渡される。

$ paknife solo cook node1 node2 -W

knife-zero

最近にわかに注目を浴びているchef-zeroを使ったknife-zeroも多分動く。knife-soloとサブコマンドの渡し方が同じ限り。

まだあまり使ってないので自信はない。

作った経緯

naoyaさんのスライドでKAIZEN社内でparaknifeという並列に走らせるコマンドがあると知り、OSSになる雰囲気がなかったので自分で作ってみた。

大きな変更を数台のサーバに行うぐらいだと、普通にknife soloで個別にログを見ながらやるのがいいけど、10台程度に対してちょっと設定を変えるぐらいだと並列に処理できたほうが圧倒的に楽だ。

名前についてはparaknifeの語感がよかったので使いたかったけど、でもすでにどこかにあるものの名前をつけるのもなんかアレだなってことで、paknifeにした。

自分の中では「ぱない(ふ)」ぐらいの、「ふ」を弱めに発音して「パない」になりつつある。もしご利用になられる場合にはお好きな様に読んで(呼んで)いただけたらと思う。

不具合等

https://github.com/a2ikm/paknife/issuesTwitterにてお待ちしております。

このブログに出てくるコードスニペッツは、引用あるいは断りがない限りMITライセンスです。