您好,登錄后才能下訂單哦!
一.初識(shí):
Fabric是python下的一個(gè)庫(kù),是可通過ssh批量管理多臺(tái)主機(jī)的一種方式。不需要在遠(yuǎn)程主機(jī)上安裝客戶端,這點(diǎn)跟Ansible挺像,在使用上也感覺更方便,會(huì)python語言就沒其它的問題了。
二.安裝(centos):
1.通過包管理器: yum install python-pip
pip install fabric
這種方式很快捷,在源碼安裝會(huì)碰到的許多依賴問題,都可以快速過。
2.通過下源碼包,編譯安裝(好處是可以自定義文件目錄了,這種方式的話可以python也一并重新裝了,系統(tǒng)自帶的往往較舊了)
I:下載python壓縮包解壓進(jìn)入相應(yīng)目錄執(zhí)行:
./configure --prefix=/data/soft/python2
make
make install
mv /usr/bin/python /usr/bin/python_old
ln -s /data/soft/python2/bin/python /usr/bin/python
II:安裝setuptools工具 : 進(jìn)入解壓后的文件目錄,執(zhí)行 : python setup.py install
III:安裝pip: 進(jìn)入pip包解壓后的文件目錄:執(zhí)行 python setup.py build & python setup.py instll
IV:安裝fabric: pip install fabric
三.Fabric 語法
常用選項(xiàng)參數(shù):
-l:顯示定義好的任務(wù)函數(shù)名稱
-f:指定fab入口文件,默認(rèn)文件名為fabfile.py(即與fabfile.py 在同級(jí)目錄下,可直接省略-f選項(xiàng))
-g:指定網(wǎng)關(guān)
-H:指定主機(jī)名,多主機(jī)使用逗號(hào)隔開
-P:以異步并行方式運(yùn)行多主機(jī)任務(wù),缺省情況下同步運(yùn)行;
-R:指定role以角色區(qū)分不同業(yè)務(wù)組設(shè)備;
-t:設(shè)置主機(jī)連接TimeOut時(shí)間(Second);
-T:設(shè)置遠(yuǎn)程主機(jī)命令執(zhí)行Timeout時(shí)間
-w:當(dāng)命令執(zhí)行失敗,發(fā)出街區(qū),而非默認(rèn)中止命令。
-p:連接主機(jī)的密碼
2.幾個(gè)關(guān)鍵全局屬性:
env.host:定義目標(biāo)主機(jī),以Python列表的形式定義,如env.host=['host01', 'host02']
env.exclude_hosts:排隊(duì)指定主機(jī)
env.user:定義遠(yuǎn)程用戶名
env.port:定義遠(yuǎn)程端口
env.password:定義遠(yuǎn)程密碼
env.passwords:與上功能一致,區(qū)別在于不同主機(jī)不同密碼的應(yīng)用場(chǎng)景,需要注意的是,配置passwords時(shí)需要配置用戶、主機(jī)、端口等信息,如:
env.passwords = {
'root@host01:22' : 'cccid'
'root@host02:22' : 'aabcd'
}
env.gateway:定義網(wǎng)關(guān)(中轉(zhuǎn)、堡壘機(jī))IP,如env.gateway='192.168.19.21'
env.deploy_release_dir:自定義全局變量,格式:env.+variable_name,如:env.deploy_release_dir、env.age、env.sex等
env.roledefs:定義角色分組,如web組與DB組區(qū)別出來:
env.roledefs = {
'webservers' : ['192.168.1.24', '192.168.1.27']
'dbservers' : ['192.168.2.24', '192.168.2.25']
}
3.重要接口:
I:run 用來在一臺(tái)或者多臺(tái)遠(yuǎn)程主機(jī)上面執(zhí)行shell 命令。
使用方式如: run('ls /data')
II:local 執(zhí)行本機(jī)的命令或腳本
使用方式如:local(‘ifconfig')
III: get 從遠(yuǎn)程主機(jī)拷貝文件到本地
get下有兩個(gè)屬性:
remote_path ; local_path
使用方式如:get(remote_path="/tmp/xxx.log", local_path="/tmp/xxx.log") 其中的remote_pat 與 local_path 可以省略。
IV: put 從本地傳文件到遠(yuǎn)程主機(jī)
put下有三個(gè)屬性:
remote_path ; local_path;mode
使用方式:如:upload = put("requirements.txt", "requirements.txt", mode=664)
注:屬性名均可省略不寫
V: sudo 執(zhí)行遠(yuǎn)程主機(jī)烏版圖下 的sudo命令
VI:cd 執(zhí)行遠(yuǎn)程主機(jī)的切換目錄命令
使用方式如: cd('/data')
使用方式如: sudo ('cat /etc/passwd')
VII: lcd 執(zhí)行本地切換目錄的命令
使用方式如:lcd('/tmp')
4.官方文檔下的簡(jiǎn)易例子:
官網(wǎng)提供了一個(gè)簡(jiǎn)單的例子:
# vi fabfile.py
#!/usr/bin/env python
from fabric.api import run
def host_type():
run('uname -s')
執(zhí)行方式: fab -H 192.168.198.202 host_type
fab 命令缺省情況下引用當(dāng)前目錄下的fabfile.py,若非此文件名,須加上-f參數(shù)
5. fabric 的API的所有模塊:
from fabric.api import abort, cd, env, get, hide, hosts, local, prompt,
put, require, roles, run, runs_once, settings, show, sudo, warn
四.附加例子-文件上傳,多主機(jī)批量執(zhí)行命令與腳本
#! /usr/bin/env python
from fabric.api import env,roles,run,execute,cd,put
## 也可以 from fabric.api import * 這樣省事便捷
env.roledefs={
'server1':['root@119.29.93.15:22',],
'server2':['root@119.29.21.85:22',]
}
env.passwords={
'root@119.29.93.15:22':'*******' ,
'root@119.29.21.85:22':'********'
}
def sendfile():
put('/data/wyh/test/haha.sh','/data')
@roles('server1')
def task1():
run ('ls /data -l |wc -l')
with cd('/data'):
run ('ls ')
sendfile()
run('/bin/sh haha.sh')
@roles('server2')
def task2():
run('df -lh')
with cd('/data'):
run('ls ')
sendfile()
run('/bin/sh haha.sh')
def test():
execute(task1)
execute(task2)
執(zhí)行方式:fab test
備注:腳本文件名為fabfile.py 執(zhí)行的時(shí)候,應(yīng)先進(jìn)入腳本所在目錄?;蛘呒訁?shù) -f 指定其他腳本文件。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。