ホームページ  >  記事  >  バックエンド開発  >  運用保守マネージャー Fabric の使い方

運用保守マネージャー Fabric の使い方

高洛峰
高洛峰オリジナル
2017-01-16 17:47:341201ブラウズ

ファブリックのインストール

ファブリックは、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')

実行結果が下の図に示されている場合、

運用保守マネージャー Fabric の使い方

コマンドは、デフォルト以外のファイル名が使用されている場合、デフォルトのファイル名 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] [:arg1,arg2] =val2,host=foo, hosts='h1;h2',....]
一般的に使用されるいくつかのパラメーターを以下に示します。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 タスク関数を呼び出します。実行結果は次の図のようになります

運用保守マネージャー Fabric の使い方

結果は [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)

運用保守マネージャー Fabric の使い方 この例では、入力が必要なのは一度だけなので、リモート ディレクトリの名前を動的に入力してディレクトリ リストを取得する関数を実装しています。全ホストのディレクトリの一覧情報を表示するには、 @runs_once 修飾子を付けてサブ関数 input_raw (同時に設定) を呼び出します。実行結果は以下のようになります


ファイルをアップロードし、処刑

りぃ

運用保守マネージャー Fabric の使用方法に関するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。