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.
 | 
リンク