とりあえず動くようになったので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/issuesやTwitterにてお待ちしております。