# -*- coding:utf-8 -*-
'''檢視本地和遠端主機資訊
本例項呼叫local()方法執行本地(主控端)命令,新增"@runs_once"修飾符保證該任務函式只執行一次
created on 2023年1月11日
@author: liuyazhuang
'''from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.209.121', '192.168.209.122']
env.password = '密碼'
#檢視本地系統資訊,當有多台主機時只執行一次
@runs_once
def local_task(): #本地任務函式
local("uname -a")
def remote_task():
#with後面的作用是讓後面的表示式的語句繼承當前狀態,實現cd/data/logs && ls -l 效果
with cd("/data/logs"):
run("ls -l")
# -*- coding:utf-8 -*-
'''動態獲取遠端目錄列表
本例項使用@task 修飾符標誌入口函式go()對外部可見,配合"@runs_once"修飾符接收使用者輸入,
最後呼叫worktask()任務函式實現遠端命令執行,
主要實現了乙個動態輸入遠端目錄名稱,再獲取目錄列表的功能,由於我們只要求輸入一次,再顯示所有主機上
該目錄的列表資訊,呼叫了乙個子函式input_raw()同時配置@runs_once修飾符來達到此目的
created on 2023年1月11日
@author: liuyazhuang
'''from fabric.api import *
env.user = "root"
env.hosts = ['192.168.209.121', '192.168.209.122']
env.password = '密碼'
#主機遍歷過程中,只有第一台觸發此函式
@runs_once
def input_raw():
return prompt("please input dircectory name:" , default="/home")
def worktask(dirname):
run("ls -l " + dirname)
#限定只有go函式對fab命令可見 ,對fab命令可見,執行pip install fabric後,可通過fab go執行任務
@task
def go():
getdirname = input_raw()
worktask(getdirname)
# -*- coding:utf-8 -*-
'''閘道器模式檔案上傳與執行
本例項通過fabric的evn物件定義閘道器模式,也就是中轉、堡壘機環境。定義的格式為:
env.gateway = '192.168.209.121' 其中,ip'192.168.209.121'為堡壘機ip,再結合任務函式實現
目標機檔案上傳與執行操作。相比paramiko的實現方法簡潔了很多,編寫的任務函式完全不用考慮堡壘機環境,
配置env.gateway即可。
created on 2023年1月11日
@author: liuyazhuang
'''from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.user = 'root'
#定義堡壘機ip,作為檔案上傳、執行的中轉裝置
env.gateway = '192.168.209.123'
#遠端主機列表
env.hosts = ['192.168.209.121', '192.168.209.122']
#假設所有主機的密碼都不一樣,可以通過env.passwords字典變數一一指定
env.passwords =
#本地安裝包路徑
lpackpath = "/home/install/lnmp0.9.tar.gz"
#遠端安裝包路徑
rpackpath = "/tmp/install"
@task #對fab命令可見,執行pip install fabric後,可通過fab put_task執行任務
def put_task():
run("mkdir -p /tmp/install")
with settings(warn_only=true):
#上傳安裝包
result = put(lpackpath, rpackpath)
if result.failed and not confirm("put file failed, continue[y/n]?"):
abort("aborting file put task!")
@task #對fab命令可見,執行pip install fabric後,可通過fab run_task執行任務
def run_task(): #執行遠端命令,安裝lnmp環境
with cd("/tmp/install"):
run("tar -zxvf lnmp0.9.tar.gz")
with cd("lnmp0.9/"): #使用with繼續繼承/tmp/install 目錄位置狀態
run("./centos.sh")
@task #對fab命令可見,執行pip install fabric後,可通過fab go執行任務
def go(): #上傳、安裝組合
put_task()
run_task()
Fabric開發(四)Fabric原始碼賞析
前面幾章,我們從網路搭建,系統編譯,執行乙個demo的角度,體驗了facbic系統,我們從整體認識了fabric。在公鏈領域,有btc,eth,eos等優秀的開源專案,我們對這些原始碼都有閱讀,在聯盟鏈領域,比較突出的就是ibm發起的fabric,fabric做為聯盟鏈,要求有准入機制,在新的版本裡...
python三大神器之fabric(2 0新特性)
fabric經常出現在自動化運維領域,批量處理一些運維工作。fabric是在paramiko之上又封裝了一層,操作起來更加簡單易用。本來只是想寫個部落格記錄一下,然後發現之前寫的 不能執行了,報以下錯誤 no module named fabric.api traceback most recent...
大資料開發 Fabric(入門篇)
本篇介紹fabric的一些常用知識。要說和網上其他manual的區別,那就是這是筆者寫的一套成體系的文件,不是隨心所欲而作。fabric現在支援python2和python3,安裝 輸入fab命令 在終端 terminal 執行fab命令執行配置檔案。預設的配置檔案為 fabfile.py,也可以使...