python fabric模塊入門

Fabric 是一個 Python (2.5-2.7) 庫和命令行工具,用來流水線化執行 SSH 以部署應用或系統管理任務。python

 

安裝:nginx

pip install fabric

 

首先來一個入門通用demo,hello world。web

文件:hello_world.pyapi

# coding: utf-8

def hello():
    print 'Hello world!'

運行結果:函數

默認查找當前目錄下fabfile.py文件,若文件名非fabfile.py,則須要使用-f指定文件。工具

$ fab -f hello_world.py hello
Hello world!

Done.

 

env(環境變量)對象說明:spa

env.hosts   #定義目標主機,能夠用IP或主機名錶示,以python的列表形式定義。如env.hosts=['192.168.1.21','192.168.1.22']
env.exclude_hosts   #排除指定主機,如env.exclude_hosts=['192.168.1.21']
env.user   #定義用戶名,如env.user='root'
env.port   #定義端口,默認爲22,如env.port='22'
env.password   #定義密碼,如env.password='123456'
env.passwords  #定義多個密碼,不一樣主機對應不一樣密碼,如:env.passwords = {'root@192.168.1.21:22':'123456','root@192.168.1.22:22':'654321'}
env.gateway   #定義網關(中轉、堡壘機)IP,如env.gateway='192.168.1.23
env.roledefs   #定義角色分組,好比web組合db組主機區分開來:env.roledefs = {'webserver':['192.168.1.21','192.168.1.22'],'dbserver':['192.168.1.25','192.168.1.26']}

env.deploy_release_dir   #自定義全局變量,格式:env. + '變量名稱',如env.age,env.sex等

其中roledefs使用demo以下:命令行

env.roledefs = {'front':['192.168.1.111'],'api':['192.168.1.112']}

@roles('front')
def nginx_restart():
    run('service nginx restart')

@roles('front', 'api')
def uptime():
    run('uptime')

 

經常使用API:rest

local    #執行本地命令,如local('uname -s')
lcd      #切換本地目錄,如lcd('/home')
cd       #切換遠程目錄
run     #執行遠程命令
sudo   #sudo方式執行遠程命令,如sudo('/etc/init.d/httpd start')
put     #上次本地文件導遠程主機,如put('/home/user.info','/data/user.info')
get     #從遠程主機下載文件到本地,如:get('/data/user.info','/home/user.info')
prompt  #得到用戶輸入信息,如:prompt('please input user password:')
confirm  #得到提示信息確認,如:confirm('Test failed,Continue[Y/N]?')
reboot   #重啓遠程主機,如:reboot()

@task   #函數修飾符,標識的函數爲fab可調用的,非標記對fab不可見,純業務邏輯
@runs_once   #函數修飾符,標識的函數只會執行一次,不受多臺主機影響

 

Demo(demo.py):code

運行命令:fab -f demo.py list

# coding: utf-8
from fabric.api import *


env.user = 'root'
env.roledefs = {
        'api': ['10.211.55.5:22'],
        }
env.passwords = {
        'root@10.211.55.5:22': 'linjianfeng',
        }


def list_files():
    run('ls -l')

@task  # 使用@task對fab命令可見,其餘沒有使用@task標記的函數對fab命令不可用,fab -f demo.py -l可查看開放函數
@roles('api')
def list():
    list_files()
相關文章
相關標籤/搜索