Python之 Fabric開發例項

2021-08-14 13:10:31 字數 3012 閱讀 1363

# -*- 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,也可以使...