自動化運維工具之fabric

2021-08-01 20:04:59 字數 2959 閱讀 1004

fabric

fabric是乙個基於python(2.5-2.7)的庫和命令列工具,用來提高基於ssh的應用部署和系統管理效率。稍微了解python的人都知道,實際上它只節省了數行 ifname== 「main」 這樣的慣例**而已。fabric 的設計目的更是為了使用它自己的 api,包括執行 shell 命令、傳送檔案等函式(或操作)介面。

命令使用

fab [options] [:arg1,arg2=val2,host=foo,hosts=』h1;h2』,…],常用的引數有:

-l,顯示定義好的任務函式名;

-f,指定fab入口檔案,預設入口檔名為fabfile.py;

-g,指定閘道器裝置,比如堡壘機環境,填寫堡壘機ip即可;

-h,指定目標主機,多台主機用』,』號分隔;

-p,以非同步並行方式執行多個主機任務,預設為序列執行;

-r,指定role(角色),以角色名區分不同業務組裝置;

-t,設定裝置連線超時時間;

-t,設定遠端主機命令執行超時時間;

-w,當命令執行失敗,發出警告,而非預設終止任務

全域性屬性的設定

env.hosts:定義多個目標主機,用ip或者主機名的列表,env.hosts=[「192.168.0.1」,」192.168.0.2」]

env.user:定義使用者名稱,env.user = 「root」

env.port:定義埠,env.port=22

env.password:定義密碼,env.password = 『1111』

env.passwords:定義多台主機的使用者名稱、ip位址、埠、密碼。

env.passwords=

env.gateway:定義閘道器,env.gateway=」192.168.0.1」

env.roledefs:定義角色分組

env.roledefs=

fabfile編寫

from fabric.api import *

env.user = "root"

env.hosts=["192.168.0.1","192.168.0.2"]

env.passwords=

nv.roledefs=

@task

def show():

run("hostname")

@task

@roles("webserver")

def show_web_port():

run("netstate -tnulp | grep 80")

@task

@roles("wdbserver")

def show_db_port():

run("netstate -tnulp | grep 3306")

fab -f fabfile.py -l //檢視有多少個任務

fab -f fabfiel.py show // 執行show這個任務(所有主機)

fab -f fabfiel.py show_web_port // 執行show_web_port這個任務(按角色分配的主機執行)

fab -f fabfiel.py show_db_port // 執行show_db_port這個任務(按角色分配的主機執行)

env.user = "root"

env.hosts=["192.168.0.1","192.168.0.2"]

env.passwords=

@task

def upload_file():

with settings(warn_only=true):

local("tar -czf test.tgz test.txt")

result = put("./test.tgz", "/root /test.tgz")

if result.failed and not confirm("continue[y/n]?"):

abort("put file fail")

with settings(warn_only=true):

local_file = local("md5sum test.tgz", capture=true).split(" ")[0]

remote_file = run("md5sum /root/test.tgz").split(" ")[0]

if local_file == remote_file:

print("upload file success")

else:

print("upload file fail")

run("tar zxf /root/test.tgz")

@task

def download_file():

with settings(warn_only=true):

get("/root/test.tgz", "./test.tgz")

local("tar zxf ./test.tgz")

2.多主機批量並行執行

from fabric.api import *

from fabric.contrib.console import confirm

env.user = "root"

host1 = "192.168.0.1"

host2 = "192.168.0.2"

env.hosts=[host1, host2]

env.passwords=

@task

@parallel

@hosts(host1, host2)

def install_ftp():

run("yum install -y vsftpd")

這只是我的實驗,fabric做的事情特別多,比如lnmp等等的自動化安裝都可以實現。

運維工具之輕量級自動化運維工具Fabric原始碼安裝

在運維工作中,經常會遇到重複性的勞動,這個時候為了效率就必須要使用自動化運維工具。這裡我給大家介紹輕量級自動化運維工具fabric,fabric是基於python語言開發的,是開發同事的最愛。為了方便自動化運維,經常會將fabric部署在跳板機上。之所以部署跳板機是基於幾點考慮的 安裝fabric時...

ansible 自動化運維工具

ansible 自動化運維工具 批量管理 python開發 無客戶端 基於ssh服務 22 安裝 1.ansible包在擴充套件源,epel release yum y install epel release yum repolist 2.安裝,ansible yum y install ansi...

自動化運維工具 ansible

ansible ansible 一 簡介和部署 ansible 二 主機清單管理 ansible 三 配置和命令集 ansible 四 常用模組 ansible 五 palybooks劇本 ansible 彙總 ansible 中文權威指南 本部落格 至 小左先森的部落格 ansible ansib...