Octopress Blog

自分のためのまとめブログ

Fabric

Fabricインストール

CentOS6.4の場合

1
2
3
4
5
6
7
su -
bash
yum update
yum -y install python python-devel gcc
curl http://python-distribute.org/distribute_setup.py | python
curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
pip install fabric fexpect

pycryptoのバージョンによっては、実行時に以下のエラーが出る

1
AttributeError: 'module' object has no attribute 'HAVE_DECL_MPZ_POWM_SEC'

pycryptoのバージョンを変更すればよい

1
2
pip uninstall pycrypto
pip install PyCrypto==2.3

テスト

fabric_test.py
1
2
3
4
from fabric.api import *

def host_type() :
    run('uname -s')
1
2
3
4
5
6
7
8
9
10
11
[ftakao2007 script]$ fab -f fabric_test.py -H localhost host_type
[localhost] Executing task 'host_type'
[localhost] run: uname -s
[localhost] Login password for 'ftakao2007':
[localhost] out: Linux
[localhost] out:


Done.
Disconnecting from localhost... done.
[ftakao2007 script]$

EC2で利用する

インスタンスを作成してsshでアクセスできるところまでは設定済みの想定

実行方法

ec2上のユーザ:ec2-user
ec2のアドレス:10.160.26.123 (仮)
秘密鍵:hoge.pem

1
2
3
4
5
6
7
8
9
[ftakao2007 script]$ fab -f fablic_test.py -i hoge.pem -H ec2-user@10.160.26.123 host_type

[10.160.26.123] Executing task 'host_type'
[10.160.26.123] run: uname -s
[10.160.26.123] out: Linux
[10.160.26.123] out:

Done.
Disconnecting from localhost... done.

テクニック

キーボードから入力した値をfabricで利用する

fabricというよりpythonの使い方かな。。

1
2
3
4
5
6
name = raw_input('Enter name: ')
#name = "aaa" 
#print name

def var_test(var=name):
        run("echo {in_var}".format(in_var=var))

※ 「raw_input」のところでnameに入力した値が入る
※ nameの中身がvar_test関数の中の変数varに代入される
※ varの中身がin_varに入り、runの中で変数が展開される

1
2
3
4
5
6
7
8
9
10
[ftakao2007 script]$ fab -f fabric_test.py -H localhost var_test
Enter name: hogehoge
[localhost] Executing task 'var_test'
[localhost] run: echo hogehoge
[localhost] Login password for 'ftakao2007':
[localhost] out: hogehoge
[localhost] out:

Done.
Disconnecting from localhost... done.

2変数を使う場合

1
2
3
4
5
6
7
sei_name = raw_input('Enter family sei_name: ')
na_name = raw_input('Enter first na_name: ')

def var_test(var1=sei_name,var2=na_name):
        run(""" 
        echo {in_var1} {in_var2}
        """.format(in_var1=var1,in_var2=var2))
1
2
3
4
5
6
7
8
9
10
11
12
13
[ftakao2007 script]$ fab -f fabric_test.py -H localhost var_test
Enter family sei_name: yamada
Enter first na_name: taro
[localhost] Executing task 'var_test'
[localhost] run:
    echo yamada taro

[localhost] Login password for 'ftakao2007':
[localhost] out: yamada taro
[localhost] out:

Done.
Disconnecting from localhost... done.

リンク