Fabric は、SSH プロトコルに基づく Python ツールです。従来の ssh/scp 方式と比較して、Python 構文での管理コマンドの記述は、ローカル操作と同様に読みやすく、拡張も容易です。
公式サイトアドレス: http://fabfile.org
インストール
Pythonとpip管理ツールのインストールプロセスを省略します
pip install fabric
インストールが成功したかどうかを確認します
Python編集モードに入り、コードがない場合は入力します。エラーは、インストールが成功したことを意味します
from fabric.api import local
ファブリックのバージョン hello world
ファブリックのデフォルト ファイル 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で確認できます 実行されたタスクは現在hello関数です
動作結果
[localhost] local: echo "hello world!" hello world! Done.
従来のメンテナンス方法:
$ ssh x.x.x.x 'uname -a' -- 输出略
ファブリックの例:
$ cat fabfile.py
from fabric.api import run def uname(): run('uname -a')
$ fab -H x.x.x.x uname -- 输出略
直観的には、ssh 方式に比べて多くのコードを記述する必要があるように見えますが、ssh 方式に基づいて中間にある制御可能なリンクは比較的少ないです。サービスが起動されていますので、起動されていない場合は起動等を行ってください。 ssh 命令型アプローチは少し面倒です。 (もちろん、操作されているマシン上でスクリプトを作成し、このスクリプトを ssh 経由で呼び出すこともできます) Fabric のいくつかの利点についてお話しましょう:
ロール定義
コードが読みやすい
ローカル操作とリモート操作をカプセル化する(これも必須) system/popen/ssh の操作を自分でカプセル化しますか?)
柔軟なパラメータ (ホスト/ロールなどを動的に指定し、マルチプロセスに基づいて同時実行)
完全なログ出力
これらは日常の作業でも基本的に同様です。しかし、成熟したツールがあるので、それを使用しない手はありません。右。
一般的に使用される構成:
env.hostホスト IP、{'web': ['x', 'y'], 'db': ['z']}
fab -l - 利用可能なタスクを表示します (コマンド) )
fab -H - ホストを指定、サポートされています。複数ホストのカンマは区切られています。 Fab -R - 役割を指定します。複数の
Fab -P -複雑な番号をサポートします。デフォルトはシリアルです。
Fab -W -Warn_only、デフォルトは異常な異常に遭遇し、直接中断する
nginx start') -- リモート sudo を実行します。pty オプションに注意してください
例 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') # 远程解压
はい Donみんな地元の人に見えませんか?右。
例 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)
その他の Python の自動化導入ツール Fabric の簡単な入門ガイドに関連する記事については、PHP 中国語 Web サイトに注目してください。