2013年9月9日月曜日

Fabricの豆知識

Python製のCapistrano的なツールであるFabric を少しだけ使ってみた。けっこう機能が多いので自分が使いそうなところをまとめておく。バージョンは1.7.0。

Fabricの基本的な機能

下記で任意のコマンドが実行可能
$ fab -H localhost -- uptime
またはfabfile.pyにタスクを書く
from fabric.api import run
def uptime():
    run('uptime')
$ fab -H host1,host2 uptime
$ fab --list

でfabfile.pyに定義されているタスク一覧を表示する。

ホストの定義はenv.hosts または env.roledefsで。
env.hosts = [ 'host1', 'host2' ]
# or
env.roledefs = { 'web': ['host1', 'host2'] }
並列実行
fab -P  -H host1,host2,host3 -- uptime
たくさんのホストにコマンドを実行する時にpasswordをきかれまくる場合

最初にパスワードを入力する

$ fab -I -H host1,host2,host3 -- uptime

引数にパスワードを渡しちゃう(セキュリティ的にオススメできない)

$ fab -p <password> -I -H host1,host2,host3 -- uptime
taskに引数を渡す
$ fab create_user:username=oinume
途中でエラーが発生しても処理を継続させる

-wで失敗しても処理を継続。デフォルトは失敗したらその時点でAbortする
fabfile.py の中で

with warn_only():
    pass

でも可

よくあるユースケース

リモートのサーバにコマンドを発行する
$ fab -H host1,host2,host3 -- mpstat -P ALL 1 1
サーバにファイルをアップロードする
from fabric.api import put

put('authorized_keys', '.ssh/authorized_keys')
rsyncでサーバにファイルをアップロードしたい
from fabric.contrib import project

project.rsync_project(local_dir='authorized_keys', remote_dir='.ssh/authorized_keys')

rsyncはローカルマシンから rsync コマンドを実行するだけのようだ。

rsyncでサーバからファイルをダウンロードする
  • rsync_project()の引数にupload=Falseを指定する
  • サーバが複数ある場合はダウンロード先の /tmp/my.cnf が上書きされちゃうので、ホスト名をサフィックスにつけている。env.host 現在実行しているホスト名が取れる。
from fabric.api import env
from fabric.contrib import project

project.rsync_project(remote_dir='/etc/my.cnf', local_dir='/tmp/my.cnf.' + env.host, upload=False)

Fabricのその他の豆知識

  • colorize-errors: エラーが発生したら赤字になる
  • hide=LEVELS: 出力する情報を制限できる。例えばhide=stdout,stderr,running と指定すると一切の情報が出なくなる
    • stdout: コマンド実行時の標準出力
    • stderr: コマンド実行時のエラー出力
    • running: 実行時の出力
  • -x HOSTS: 対象外にしたいホスト名を指定
  • -i PATH: SSHの秘密鍵を指定できる

Pythonサポーターズ

技術評論社

売り上げランキング: 12,569

1 件のコメント:

Aliza Jamess さんのコメント...

The information you have posted is very useful. The sites you have referred was good. Thanks for sharing
RegardS:chiffon fabrics