#author(“2018-01-10T06:52:25+00:00”,“default:kazuma”,“kazuma”) Fabric

シェル・コマンドを実行する [#e64ef95e]

 $ 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を使ってコマンド実行する [#yc4abb93]

 $ vim どこか適当なローカルのディレクトリ/fabfile.py
   from fabric.api import *
  
   def ipcheck():
     run("sudo cat /var/log/httpd/access.log")
 
 $ fab -H ホスト名 -u ユーザー名 ipcheck

sudoが必要なコマンドを列挙する場合 [#z04b76a8]

 run("sudo ほげ")だと都度sudoパスワードを確認されるため下記のように記述する
 
 sudo("hoge")

タスクをまとめる [#i745234d]

 def hoge()
   #task1
 
 def fuga()
   #task2
 
 def HOGE()
   #task3
 
 def all()
   hoge()
   fuga()
   HOGE()
 
 $ fab all -f fabfile.py

接続情報を記述する [#kb3ccad8]

 env.hosts = [
  '192.168.X.X',
  '192.168.X.X',
 ]
 env.key_filename = ['  
/.ssh/id_rsa']
 env.user = 'vagrant'
 env.password = 'vagrant'

踏み台経由で接続する [#oa439165]

 env.gateway = '192.168.X.X'

ローカルのssh/configを参照する [#c6e763be]

 env.use_ssh_config = True

エラーが出ても続行する [#zbccfff4]

※デフォルトではエラーが出たらその時点で中止する

envで指定する [#rca1a371]

 env.warn_only=true

warn_only=trueをコマンドの後に記述する [#eec00ff2]

 def yumcheck()
   run("yum list installed, warn_only=true")

実行するタスクが何か、fab –listで表示させる [#q524348d]

 def hostinfo():
 """
 これはホストの情報を確認するタスクです
 """
 run("uname -a")
 run("hostname")
 
 $ fab --list
 hostinfo これはホストの情報を確認するタスクです

タスクごとに適用するroleを変更する [#j3f017b9]

 env.roledefs= {
   'webservers': ['192.168.33.10', '192.168.33.11'],
   'mailservers': ['192.168.33.12']
 }
 
 @roles("webservers")
 def sometask():
    #do something

タスクごとに適用するhostsを変更する [#n7e9fb76]

上記のようにroleを設定しても良いけど、特定のタスクで特定のroleだけを指定したい場合に下記のように記述するこもと可能

 WEBSERVER="192.168.1.10"
 
 @hosts(WEBSERVER)
 def hogetask():

ファイルで定数を設定してタスクで参照するようにする [#if54a233]

 TESTID="testdayo"
 MAILADDRESS="hogepiyo@hogepiypiyo.com"
 
 def testshell():
   run("/bin/bash test.sh %s %s" % (TESTID, MAILADDRESS))

コマンドの結果を変数にセットする [#dc7c774f]

 hostname = run("hostname -s")
 run("echo %s" % hostname)

SFTPでファイルをGETする [#ifcfce8c]

 hostname = run("hostname -s") 
 get("/remote/path/%s.log" $ hostname, "/local/path/%s" % env.user)