Python自動化配置ツールFabricの簡単なマニュアル
FabricはSSHプロトコルに基づくPythonツールであり、従来のssh/scp方式に比べてPythonの構文で管理コマンドを書くと読みやすくなり、拡張しやすくなります。
公式サイトのアドレス:http://fabfile.org
インストール
python、pip管理ツールのインストールプロセスを省略します。
python編集モードに入り、コードを入力し、間違いなくインストール成功を表します。
fabricのデフォルトファイルfabfile.pyはもちろん、この名前を使いたくないなら、−fパラメータを追加する必要があります。
fabfile.pyファイルを作成します。
実行結果
いくつかのファブリックの長所を話しましょう。キャラクター定義 コードは読みやすいです。 はローカル、遠隔操作をカプセル化しました。 パラメータが柔軟である(Host/roleを動的に指定するなど、multiprocessingに基づく同時実行を行う) 完全ログ出力 これらを羅列して、実は日常の仕事の中で大体似たような包装があって、しかし既成の1つの熟しているツールがあって、何をして使いますか?でしょう。
よく使う設定: env.host -- ホストip、もちろん-Hパラメータ指定 も可能です。 env.password -- パスワード、通路を作ったら無視してください。 env.roledefs -- キャラクターグループは、例えば:''web':''x'、''y'、'db':''''z''s fab-l -- 利用可能なtask(コマンド)を表示します。 fab-H -- ホストを指定して、マルチホストカンマをサポートして に別れます。 fab-R -- roleを指定して、複数の をサポートします。 fab-P -- 併発数は、デフォルトはシリアル です。 fab-w -- warn_オンリー、デフォルトは異常に直接abortから を終了します。 fab-f -- エントランスファイルを指定します。fabのデフォルトのエントランスファイルはfabfile/fabfile.py です。
もっと参考してください。fab--help
一般的な関数: local('pwd') -- ローカルコマンドを実行する lcd('/tmp') -- ローカルディレクトリ を切り替えます。 cd('/tmp') -- リモートディレクトリ を切り替えます。 run('uname-a') -- リモートコマンドを実行する sudo('/etc/init.d/inx start') -- リモートsudoを実行します。ptyオプション に注意してください。
例1:リモートnginxサービスの管理
例4:複数のターゲットサーバ
同じパスワードまたは手動入力:
公式サイトのアドレス:http://fabfile.org
インストール
python、pip管理ツールのインストールプロセスを省略します。
pip install fabric
インストールが成功したか確認します。python編集モードに入り、コードを入力し、間違いなくインストール成功を表します。
from fabric.api import local
fabric版ハローワールドfabricのデフォルトファイルfabfile.pyはもちろん、この名前を使いたくないなら、−fパラメータを追加する必要があります。
fabfile.pyファイルを作成します。
vim fabrile.py
コードを編集
#coding:utf-8
from fabric.api import local#
def hello():
# local
local('echo "hello wolrd!"')
実行コード
fab hello
実行できるジョブはfab-lで確認できます。現在はハロー関数です。実行結果
[localhost] local: echo "hello world!"
hello world!
Done.
伝統的なメンテナンス方法:
$ ssh x.x.x.x 'uname -a' --
Fabricの例:
$ cat fabfile.py
from fabric.api import run
def uname():
run('uname -a')
$ fab -H x.x.x.x uname --
肉眼で直接見ると、コードはssh方式より多く書かれているようですが、ssh方式に基づいて中間制御可能な部分が少ないです。例えば、あるサービスが起動したかどうかを判断したいです。起動していない場合は起動するなどの操作が行われます。ssh命令式のやり方はやや面倒です。もちろん汚いです。操作された機械にスクリプトを書いて、このスクリプトを使います。いくつかのファブリックの長所を話しましょう。
よく使う設定:
もっと参考してください。fab--help
一般的な関数:
例1:リモートnginxサービスの管理
$ cat fabfile.py
from fabric.api import *
@task
def nginx_start():
''' nginx start '''
sudo('/etc/init.d/nginx start')
@task
def nginx_stop():
''' nginx stop '''
sudo('/etc/init.d/nginx stop')
$ fab --list --
Available commands:
nginx_start nginx start
nginx_stop nginx stop
$ fab -H x.x.x.x nginx_start -- nginx
例2:キャラクターベース
$ cat fabfile.py
from fabric.api import *
env.roledefs = {'nginx': ['x.x.x.x', 'y.y.y.y'], 'mysql': 'z.z.z.z'}
@task
def mysql_start()
''' mysql start '''
sudo('/etc/init.d/mysql start')
$ fab --list --
Available commands:
nginx_start nginx start
nginx_stop nginx stop
mysql_start mysql start
$ fab -R nginx nginx_start -- nginx
$ fab -R mysql mysql_start -- mysql
例3:ローカルとリモートの混在動作
$ cat fabfile
def hello():
''' test hello '''
with lcd('/tmp'): # /tmp
local('svn co http://xxx xxx') # check
local('tar czf xxx.tar.gz xxx/') #
put('xxx.tar.gz', '/tmp') # /tmp
with cd('/tmp'): # /tmp
run('tar zxf xxx.tar.gz') #
全部地元のように見えますか?でしょう。例4:複数のターゲットサーバ
同じパスワードまたは手動入力:
env.hosts = ['root@ip1:22',root@ip2:22]
パスワードが違います。あるいは手動で入力したくないです。
#coding:utf-8
from fabric.api import local,cd,put,lcd,env,run,execute,roles
env.roledefs = {
'role1':['root@ip1:22',],
'role2':['root@ip2:22',]
}
env.passwords={
'root@ip1:22':'pwd1',
'root@ip2:22':'pwd2'
}
@roles('role1')
def role1():
with cd('/tmp'):
run('ls -l')
@roles('role2')
def role2():
with cd('/tmp'):
run('ls')
def task():
execute(role1)
execute(role2)