Python3中詳解fabfile的編寫
fab命令好似結(jié)合我們編寫的fabfile.py(其它文件名必須添加-f filename應(yīng)用)來搭配使用的,部分命令行參數(shù)可以通過相應(yīng)的方法來替代,使之更加靈活,例如"-H 192.168.56.133,192.168.56.134",我們可以通過定義env.hosts來實(shí)現(xiàn),如"env.hosts=['192.168.56.133,192.168.56.134']"。fabfile的主體由多個(gè)自定義的任務(wù)函數(shù)組成,不同任務(wù)實(shí)現(xiàn)不同的操作邏輯。
全局屬性設(shè)定
env對象的作用是定義fabfile的全局設(shè)定,支持多個(gè)屬性,包含目標(biāo)主機(jī)、用戶名、密碼、等角色,各屬性說明如下:
- evn.host:定義目標(biāo)主機(jī),可以用IP或主機(jī)名表示,以Python的列表形式定義,如evn.hosts['192.168.56.133','192.168.56.134']。
- env.exclude_hosts:排除指定主機(jī),如env.exclude_hosts=['192.168.56.133']。
- env.user:定義用戶名,如env.user="root"。
- env.port:定義目標(biāo)主機(jī)端口,默認(rèn)為22,如env.port="22"。
- env.password:定義密碼,如env.password='1234567'。
- env.passwords:與password功能一樣,區(qū)別在于不同主機(jī)不同密碼的應(yīng)用場景,需要注意的是,配置passwords是需配置用戶、主機(jī)、端口等信息,如:
env.passwords = {
'root@192.168.56.131:22':'1234567',
'root@192.168.56.132:22':'1234567',
'root@192.168.56.133:22':'1234567',
'root@192.168.56.134:22':'1234567'
}
- env.gateway:定義網(wǎng)關(guān)(中轉(zhuǎn)、堡壘機(jī))IP,如env.gateway = '192.168.56.1'。
- env.deploy_release_dir:自定義全局變量,格式:env.+"變量名稱",如env.deploy_release_dir、env.age、env.sex等。
- env.roledefs:定義角色分組,比如web組與db組主機(jī)區(qū)分開來,定義如下:
env.roledefs = {
'webservers':['192.168.56.131','192.168.56.132','192.168.56.133'],
'dbserver':['192.168.56.134','192.168.56.135']
}
引用時(shí)使用Python修飾符的形式進(jìn)行,角色修飾符下面的任務(wù)函數(shù)為其作用域,下面來看一個(gè)示例:
@roles('webservers')
def webtask():
run('/etc/init.d/nginx start')
@roles('dbservers')
def dbtask():
run('/etc/init.d/mysql start')
@roles('webservers','dbservers')
def pubclitasj():
run('uptime')
def deploy():
execute(webtask)
execute(dbtask)
execute(pubclitask)
在命令執(zhí)行fab deploy就可以實(shí)現(xiàn)不同角色執(zhí)行不同的任務(wù)函數(shù)了。
常用API
Fabric提供了一組簡單但功能強(qiáng)大的fabric.api命令集,簡單地調(diào)用這些API就能完成大部分應(yīng)用場景需求。Fabric常用方法及說明如下:
- local:執(zhí)行本地命令,如:local('uname -s');
- lcd:切換本地目錄,如:lcd('/home');
- cd:切換遠(yuǎn)程目錄,如:cd('/data/logs');
- run:執(zhí)行遠(yuǎn)程命令,如:run('free -m');
- sudo:sudo方式執(zhí)行遠(yuǎn)程命令,如:sudo('/etc/init.d/httpd start');
- put:上傳本地文件到遠(yuǎn)程主機(jī),如:put('/home/user.info','/data/user.info');
- prompt:獲得用戶輸入信息,如:prompt('please input user password:');
- confirm:獲得提示信息確認(rèn),如:confirm("Tests failed. Continue[Y/N]?");
- reboot:重啟遠(yuǎn)程主機(jī),如:reboot();
- @task:函數(shù)修飾符,標(biāo)識的函數(shù)為fab可調(diào)用的,非標(biāo)記對fab不可見,純業(yè)務(wù)邏輯;
- runs_once:函數(shù)修復(fù)符,標(biāo)識的函數(shù)只會(huì)執(zhí)行一次,不受多臺(tái)主機(jī)影響。
- 淺談Python2、Python3相對路徑、絕對路徑導(dǎo)入方法
- python3讀取csv和xlsx文件的實(shí)例
- Python3導(dǎo)入CSV文件的實(shí)例(跟Python2有些許的不同)
- 詳解python3中tkinter知識點(diǎn)
- Python3用tkinter和PIL實(shí)現(xiàn)看圖工具
- Python3.4 tkinter,PIL圖片轉(zhuǎn)換
- Python3實(shí)現(xiàn)轉(zhuǎn)換Image圖片格式
- python3實(shí)現(xiàn)域名查詢和whois查詢功能
- python3實(shí)現(xiàn)windows下同名進(jìn)程監(jiān)控
- python3實(shí)現(xiàn)磁盤空間監(jiān)控
- python3監(jiān)控CentOS磁盤空間腳本
相關(guān)文章
Django連接數(shù)據(jù)庫并實(shí)現(xiàn)讀寫分離過程解析
這篇文章主要介紹了Django連接數(shù)據(jù)庫并實(shí)現(xiàn)讀寫分離過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Python中的Numeric包和Numarray包使用教程
這篇文章主要介紹了Python中的Numeric包和Numarray包使用教程,來自IBM官方網(wǎng)站上的技術(shù)文檔,需要的朋友可以參考下2015-04-04
Python中input和raw_input的一點(diǎn)區(qū)別
這篇文章主要介紹了Python中input和raw_input的一點(diǎn)區(qū)別,它們都是用來讀取控制臺(tái)輸入的函數(shù),需要的朋友可以參考下2014-10-10
Python實(shí)現(xiàn)一鍵改變r(jià)aw格式照片風(fēng)格
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一鍵改變r(jià)aw格式照片風(fēng)格效果,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以一起學(xué)習(xí)一下2023-05-05
Python 數(shù)據(jù)處理更容易的12個(gè)輔助函數(shù)總結(jié)
Python的產(chǎn)生似乎就是專門用來處理數(shù)據(jù)的,順理成章的成為大數(shù)據(jù)的主流語言,本文介紹十二個(gè)函數(shù)輔助你更容易更便捷的用Python進(jìn)行數(shù)據(jù)處理2021-11-11
基于Python進(jìn)行定時(shí)任務(wù)管理封裝
這篇文章主要為大家詳細(xì)介紹了如何基于Python進(jìn)行定時(shí)任務(wù)管理封裝,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下2024-12-12

