ファブリックのインストール
ファブリックは、pip、easy_install、またはソースコードのインストールをサポートしており、パッケージの依存関係の問題を解決するのに非常に便利です(ユーザー環境に応じて、pipまたはease_installを自分で選択してください)
pip install Fabric
easy_installファブリック
ソースコードのインストールは導入されません。
モジュールのインポート時に例外がなければ、インストールは成功しています:
root@Python_S6:~# python
Python 2.7.5+ (デフォルト、2013 年 9 月 19 日、13:48:49)
linux2 の [GCC 4.8 .1]
詳細については、「ヘルプ」、「著作権」、「クレジット」、または「ライセンス」と入力してください。
>>> ファブリックをインポートします
>>>
公式 Web サイト簡単な入門例を示します。
root@Python_S6:/home/chart7/test/fabric# cat farbic.py #!/usr/bin/env python # -*- coding: utf-8 -*- from fabric.api import run def host_type(): #定义一个任务函数,通过run方法实现远程执行'uname -s'命令 run('uname -s')
実行結果が下の図に示されている場合、
コマンドは、デフォルト以外のファイル名が使用されている場合、デフォルトのファイル名 fabfile.py を参照します。 fab -H 192.168.1.23,192.168.1.24 -f host_type.py host_type のように、「-f」で指定する必要があります。管理マシンとターゲット ホストがキー認証信頼で構成されていない場合は、ターゲット ホストの対応するアカウントのログイン パスワードを入力するよう求められます。
1. fab の一般的に使用されるパラメータ
fab は、Fabric プログラムのコマンド入口として、豊富なパラメータ呼び出しを提供します。 コマンド形式は次のとおりです:
fab [options]
一般的に使用されるいくつかのパラメーターを以下に示します。fab -help.
-l を使用すると、定義されたタスク関数名が表示されます。
-f、fab エントリ ファイルを指定します。デフォルトのエントリ ファイル名は fabfile.py です。
-g、要塞ホスト環境などのゲートウェイ デバイスを指定します。
-H、ターゲットを指定します。ホスト、複数のホストは「,」で区切られます。
-P、非同期並列モードで複数のホスト タスクを実行します。デフォルトはシリアル操作です。
-R、ロール (役割) を指定し、異なるビジネス グループ デバイスを区別します。
-t、デバイス接続タイムアウトを設定します。
-T、リモートホストコマンド実行タイムアウトを設定します。
-w、コマンドの実行が失敗した場合、デフォルトでタスクを終了する代わりに警告が発行されます。
2. fabfile の書き込み
fab コマンドは、私たちが作成した fabfile.py と組み合わせて使用します (その他のファイル名は -f ファイル名参照で追加する必要があります)。一部のコマンド ライン パラメーターは、より柔軟にするために、対応するメソッドに置き換えることができます。 H 192.168.1.23,192.168.1.24" の場合、"env.hosts=[192.168.1.23,192.168.1.24]" のように環境ホストを定義できます。 fabfile の本体は複数のカスタマイズされたタスク関数で構成されます。異なるタスク関数はさまざまな操作ロジックを実装します。以下に詳細を示します
3. グローバル属性設定
env オブジェクトは、ターゲット ホスト、ユーザー、パスワード ロールを含む複数の属性を定義するために使用されます。各属性の意味は次のとおりです。
env.host,定义目标主机,可以用IP或主机名表示,以Python的列表形式定义,如env.hosts=['192.168.1.23,192.168.1.24']. env.exculde_hosts,排除指定主机,如env.exclude_hosts=['192.168.1.23'] env.user,定义用户名,如env.user="root" env.port,定义目标主机端口,如env.port = '22' env.password,定义密码,如env.password='123456' env.passwords,与password功能一样,区别在于不同主机不同密码的应用场景,需要注意的是,配置passwords时需要配置用户,主机,端口等信息,如:env.passwords = {'root@192.168.1.21:22':'123456', 'root@192.168.1.23:22':'3234234', 'root@192.168.1.24:23':'09887', } env.gateway,定义网关(中转,堡垒机)IP,如env.gateway = '192.168.1.1' env.roledefs,定义角色分组,比如web组与db组主机区分开来,定义如下: env.roledefs = { 'webservers':['192.168.1.21','192.168.1.22','192.168.1.23'], 'dbservers':['192.168.1.24','192.168.1.25'], }
引用する場合は Python 修飾子を使用します。 role 修飾子の下にあるタスク関数にはそのスコープがあります。 例を見てみましょう:
@roles('webservers') def webtask(): run('/etc/init.d/nginx start') @roles('dbservers'): def dbtask(): run('/etc/init.d/mysql start') @roles('webservers','dbservers') def publictask(): run('uptime') def deploy(): execute(webtask) execute(dbtask) execute(publictask)
コマンドが fabdeploy を実行すると、異なるロールが適用されます。さまざまなタスク機能を実行できます。
一般的に使用される API
Fabric は、シンプルかつ強力な Fabric.api コマンド セットを提供します。この API を呼び出すだけで、次のような一般的なメソッドと手順を完了できます。
local,执行本地命令,如local:('uname -s'); lcd,切换本地目录,如lcd:('/home'); cd,切换远程目录,如cd:('/data/logs/'); run,执行远程命令,如:run('free -m') sudo,sudo方式执行远程命令,如:sudo('/etc/init.d/httpd start'); put,上传本地文件到远程主机,如:put('/home/user.info','/data/user.info'); get,从远程主机下载文件到本地,如:get('/home/user.info','/data/user.info'); prompt,获得用户输入信息,如:prompt('please input user password:'); confirm,获得提示信息确认,如:confirm('Test failed,Continue[Y/N]'); reboot,重启远程主机,如reboot(); @task,函数修饰符,标识符的函数为fab可调用,非标记对fab不可见,纯业务逻辑; @runs_once,函数修饰符,标识符的函数只会执行一次,不受多台主机影响;
例 1 : ローカルおよびリモート ホスト情報
この例では、local() メソッドを呼び出してローカル コマンドを実行し、タスク関数が 1 回だけ実行されるように「@runs_once」変更を追加します。 run() メソッドを呼び出してリモートコマンドを実行します
#!/usr/bin/env python # -*- coding: utf-8 -*- from fabric.api import * env.user = 'root' env.hosts = ['192.168.1.43','192.168.1.23','192.168.1.24'] env.port = '22' env.password = '123456' @runs_once #查看本地系统信息,当有多台主机时只运行一次 def local_task(): #本地任务函数 local('uname -a') def remote_task(): with cd('/data'): #with的作用是让后面的表达式语句继承当前状态,实现cd /var && ls -l的效果 run('ls -l')
それぞれ fab コマンドを通じて local_task タスク関数を呼び出します。実行結果は次の図のようになります
結果は [192.168.1.23] となります。タスク「local_task」を実行していますが、実際には上記はホスト 192.168.1.23 でタスクを実行するのではなく、ファブリック ホストに対してローカルな「uname -a」の実行結果を返します。 remtoe_task タスク関数を呼び出した実行結果は次のとおりです。例 2; リモート ディレクトリ リストを動的に取得する
この例では、「@task」修飾子を使用してエントリ関数 go() を外部アクセス可能としてマークし、「@runs_once」シンボルと連携してユーザー入力を待ちます。最後に、worktask() タスク関数が呼び出されて、リモート コマンド実行が実装されます。#!/usr/bin/env python # -*- coding: utf-8 -*- from fabric.api import * env.user = 'root' env.hosts = ['192.168.1.23','192.168.1.24'] env.password = '123456' @runs_once #在主机遍历过程中,只有一台出发此函数 def input_raw(): return prompt("please input direcotry name:",default="/home") def worktask(dirname): run("ls -l %s" %dirname) @task def go(): getdirname = input_raw() worktask(getdirname)
この例では、入力が必要なのは一度だけなので、リモート ディレクトリの名前を動的に入力してディレクトリ リストを取得する関数を実装しています。全ホストのディレクトリの一覧情報を表示するには、 @runs_once 修飾子を付けてサブ関数 input_raw (同時に設定) を呼び出します。実行結果は以下のようになります
ファイルをアップロードし、処刑
りぃ運用保守マネージャー Fabric の使用方法に関するその他の記事については、PHP 中国語 Web サイトに注目してください。