ライブラリの利用

Fabricの主なユースケースではfabfileと fab ツール経由で、このドキュメントのほとんどではそのことについて書かれています。とは言え、Fabricの中は fab やfabfileをまったく使わなくても簡単に使えるように書かれています。このドキュメントではその方法を紹介します。

fabfileを書くことや実行時に fab を使うことと比較した場合に、いくつか念頭に置いてほしいことが有ります。どのように接続されているのかとどのように切断されるかということです。

接続

Fabricが実際にどのようにホストに接続するかについては以前に文書化していますが、いまは execution docs 全体のどこかに埋もれてしまっています。特に 接続 セクションに行ってざっと読んでみるといいかもしれません(必須ではありませんが、一度はこのドキュメントの全体をざっと読んだほうがよいでしょう)。

このセクションでも言及しているように、重要なのは env.host_string に接続時に runsudo その他の操作がひとつの場所を見に行っているだけだということです。ホストをセットするその他のすべてのメカニズムは実行時に 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 によって実行される追加の動作の大半が含まれていますので参照してください。