fabric情弱なおれがなんか教わったからてきとーにまとめておく

thx

@xxx ++
おれがかくことはてきとーなのでid:xxx てんてーに聞くように!!!!

fabricとは

Pythonでシェルをラップしてくれる便利的なもの。それだけだったら別にシェルスクリプトでよくね?ってなるけど、

  • リモートで複数設定で使える
  • Pythonでかける

というのがメリットになるんじゃないかな

インストール

基本的にはシェルをラップしているだけ。

pip install fabric

現在だと1.0.1がはいる。

基本

fabfile.py

def hello():
    print(hello hoge-)

定義して実行

fab hello
//hello hoge-

注意点!としては、fabfile.pyという名前で保存すること。でなければfabがみつけてくれなくてエラーになる

環境の定義

env.password = 'huga-'

とかなんかenvにいっぱいつめこめる。引数を取るときは

def hoge(name):
    print('hoge- %s' % name)
fab hoge:name=huga-

とかでできる

って書いたけど

$ fab hoge は設定ファイルを読んでるわけじゃなくて、hoge と同等の 関数を呼んでるだけ。環境設定をする関数を用意しとくと便利だね、という話。

つまりただの関数だった。だからenvって名前じゃなくてもいい。具体例はググれ。

local, run, sudo

シェルを動作させるときのレベル

  • local

ローカルで動く

  • run

リモートで動く

  • sudo

リモートでsudo権限をつけて動く
ローカルでsudoするなら普通にsudo fab hoge? かな?

設定とか

def relaod():
    sudo(/etc/intt.d/apaceh2 reload)
    sudo(mv /var/log/accsess.log ~/)

とかなんかを

env.username = ore
env.password = madoka

とかなんかいろいろ設定ができる。詳しいAPIはググれ
んで、実行時に

fab <env> hoge 

みたいに設定ファイルを付けることで複数環境に対応することができる。

fabricをつかってうれしいこと

もう一回書くけど

  • Pythonでかける
  • 複数のリモートに対して実行できる

なんて感じかな?

hoge-っとした追記

fabric 1.0.1の場合

fab hoge > log

みたいに出力使用とするとIOErrorになる。これは1.0.1のバグらしいよ
ちなみに local で実行する場合は CaptureってオプションがあるからそれをTrueにすればいい。

ってかいたけど

あと補足としては IOError になるのは hoge 内で run() か sudo() を呼んだ時のバグね。

localではなかった。まあどちらにしろリモートで使いたい話なのでこまるのだけど。
@yyyy ++

その他詳しいこと

解説サイトがあるし公式のチュートリアル(英語)があるからやればいいとおもうよ!!!!