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