#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)