シェル・コマンドを実行する†$ fab -H ホスト名 -u ユーザー名 -- シェルコマンド $ fab -H 192.168.100.100 -u vagrant -- uname -a [192.168.100.100] Executing task '<remainder>' [192.168.100.100] run: uname -a [192.168.100.100] Login password for 'vagrant': [192.168.100.100] out: Linux vagrant.vm1 2.6.32-573.18.1.el6.x86_64 #1 SMP Tue Feb 9 22:46:17 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux [192.168.100.100] out: Done. Disconnecting from 192.168.100.100... done. fabfileを使ってコマンド実行する†$ vim どこか適当なローカルのディレクトリ/fabfile.py from fabric.api import * def ipcheck(): run("sudo cat /var/log/httpd/access.log") $ fab -H ホスト名 -u ユーザー名 ipcheck sudoが必要なコマンドを列挙する場合†run("sudo ほげ")だと都度sudoパスワードを確認されるため下記のように記述する sudo("hoge") タスクをまとめる†def hoge() #task1 def fuga() #task2 def HOGE() #task3 def all() hoge() fuga() HOGE() $ fab all -f fabfile.py 接続情報を記述する†env.hosts = [ '192.168.X.X', '192.168.X.X', ] env.key_filename = ['~/.ssh/id_rsa'] env.user = 'vagrant' env.password = 'vagrant' 踏み台経由で接続する†env.gateway = '192.168.X.X' ローカルのssh/configを参照する†env.use_ssh_config = True エラーが出ても続行する†※デフォルトではエラーが出たらその時点で中止する envで指定する†env.warn_only=true warn_only=trueをコマンドの後に記述する†def yumcheck() run("yum list installed, warn_only=true") 実行するタスクが何か、fab --listで表示させる†def hostinfo(): """ これはホストの情報を確認するタスクです """ run("uname -a") run("hostname") $ fab --list hostinfo これはホストの情報を確認するタスクです タスクごとに適用するroleを変更する†env.roledefs= { 'webservers': ['192.168.33.10', '192.168.33.11'], 'mailservers': ['192.168.33.12'] } @roles("webservers") def sometask(): #do something タスクごとに適用するhostsを変更する†上記のようにroleを設定しても良いけど、特定のタスクで特定のroleだけを指定したい場合に下記のように記述するこもと可能 WEBSERVER="192.168.1.10" @hosts(WEBSERVER) def hogetask(): ファイルで定数を設定してタスクで参照するようにする†TESTID="testdayo" MAILADDRESS="hogepiyo@hogepiypiyo.com" def testshell(): run("/bin/bash test.sh %s %s" % (TESTID, MAILADDRESS)) コマンドの結果を変数にセットする†hostname = run("hostname -s") run("echo %s" % hostname) SFTPでファイルをGETする†hostname = run("hostname -s") get("/remote/path/%s.log" $ hostname, "/local/path/%s" % env.user)
|