expectとかsshにスクリプト流すとか最初はやってたのですが、
最終的にfabricに落ち着きつつあります。実際よく出来ています。
http://www.fabfile.org/
https://github.com/fabric/fabric
小生はfabricを「デプロイツール」だとは思っていません。厳密にはリモートサーバ管理フレームワークってところでしょう。実際readmeでもそう言ってる
https://github.com/fabric/fabric/blob/master/README.rst
Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.後者のsystem administration tasksの方が、実は使い出があります。
そのままでは何も動きません。
- fabricをどうにかしてインストールすると /usr/bin/fab が出来上がって、コイツを起動するわけですが、こいつは本体というよりはむしろ入り口です。
- 実態はカレントディレクトリのfabfile.pyです。コイツは自分で好きなように書きます。
- コマンドラインで指定した文字列をfabfile.pyから探して実行する。それだけです
- そこから先は完全にpythonです。
pythonならではの小細工が存分に生かせます
http://dekokun.github.io/posts/2013-04-07.html
ローカルでコマンドラインを使うかのように
sudo("/sbin/reboot -h now")とかやれば、リモートサーバを一回りしてrebootして戻ってきます。
もちろん複数台にも対応しています。しかも並列操作です。
pythonの「質」をうまく利用していて、@parallelデコレータを付けるだけです。
@parallelシェルスクリプトでも出来ますが、ssh & して waitしなければならないところです。もちろん前述のsudo は from fabric.api import sudo してるわけで、
def shutdown: sudo("/sbin/reboot -h now")
sudo関数の向こう側は似たようなことになってるわけですが、見事に隠蔽しています。
この辺りが、フレームワークと呼びたい所以ですね。