ライブラリの利用¶
Fabricの主なユースケースではfabfileと fab ツール経由で、このドキュメントのほとんどではそのことについて書かれています。とは言え、Fabricの中は fab
やfabfileをまったく使わなくても簡単に使えるように書かれています。このドキュメントではその方法を紹介します。
fabfileを書くことや実行時に fab
を使うことと比較した場合に、いくつか念頭に置いてほしいことが有ります。どのように接続されているのかとどのように切断されるかということです。
接続¶
Fabricが実際にどのようにホストに接続するかについては以前に文書化していますが、いまは execution docs 全体のどこかに埋もれてしまっています。特に 接続 セクションに行ってざっと読んでみるといいかもしれません(必須ではありませんが、一度はこのドキュメントの全体をざっと読んだほうがよいでしょう)。
このセクションでも言及しているように、重要なのは env.host_string に接続時に run
、sudo
その他の操作がひとつの場所を見に行っているだけだということです。ホストをセットするその他のすべてのメカニズムは実行時に fab
ツールによって解釈され、ライブラリとして実行される場合は問題にはなりません。
とは言え、与えられたタスク X
と与えられたホストのリスト Y
を結合したいという大抵のユースケースでは、Fabric 1.3の時点で、 execute(X, hosts=Y)
経由の execute
関数で扱うことができます。詳細は execute
のドキュメントをご覧ください。手動でのホスト文字列の操作はほとんど必要ないはずです。
接続解除¶
他に fab
が行うおもなことは、セッションの終わりにすべてのホストからの接続を解除することです。そうしないと、Pythonはそれらのネットワークリソースが解放されるまで居座り続けるでしょう。
Fabric 0.9.4以降ではこれを簡単に行うために利用できる関数、disconnect_all
が有ります。終了時(たいていは try: finally
ステートメントの外の finally
節で、何かの拍子に接続解除を妨げるエラーをださないよう)に、単にこれを自分のコードで呼び出すようにします。これでうまく動作するはずです。
Fabric 0.9.3以上なら、単にこれだけです(disconnect_all
はこのロジックにちょっと整った出力を加えているだけです):
from fabric.state import connections
for key in connections.keys():
connections[key].close()
del connections[key]
最後に¶
このドキュメントは初期の草稿段階で、 fab
の利用とライブラリの利用との違いをすべてカバーしてはいません。とは言え、上記はもっともつまずきやすい箇所にハイライトを当てています。疑問に思った時はFabricのソースコード内のメモに fab
によって実行される追加の動作の大半が含まれていますので参照してください。