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...