99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學(xué)院 頭像
蘋果6袋
6
麥子學(xué)院

3個(gè)Fabric常用實(shí)例

發(fā)布時(shí)間:2016-08-27 00:11  回復(fù):0  查看:3349   最后回復(fù):2016-08-27 00:11  

Fabric是基于Python實(shí)現(xiàn)的SSH命令行工具,簡化了SSH的應(yīng)用程序部署及系統(tǒng)管理任務(wù),它提供了系統(tǒng)基礎(chǔ)的操作組件,可以實(shí)現(xiàn)本地或遠(yuǎn)程shell命令,包括:命令執(zhí)行、文件上傳、下載及完整執(zhí)行日志輸出等功能。FabricParamiko的基礎(chǔ)上做了更高一層的封裝,操作起來會(huì)更加簡單。下面用3個(gè)常用的實(shí)例來帶大家學(xué)習(xí)Fabric

 

命令說明

命令格式:

fab [options] <command>[:arg1,arg2=val2,host=foo,hosts='h1;h2',...] ...

常用參數(shù):

 

-l     #顯示定義好的任務(wù)函數(shù)名

-f     #指定fab入口文件,默認(rèn)入口文件名為fabfile.py

-f     #指定網(wǎng)關(guān)(中轉(zhuǎn))設(shè)備,比如堡壘機(jī)環(huán)境,填寫堡壘機(jī)IP即可

-H     #指定目標(biāo)主機(jī),多臺(tái)主機(jī)用‘,’號(hào)分隔

-p     #遠(yuǎn)程賬號(hào)的密碼,fab執(zhí)行時(shí)默認(rèn)使用root賬戶

-P     #以異步并行方式運(yùn)行多主機(jī)任務(wù),默認(rèn)為串行運(yùn)行

-R     #指定role(角色),以角色名區(qū)分不同業(yè)務(wù)組設(shè)備

-t     #設(shè)置設(shè)備連接超時(shí)時(shí)間(秒)

-T     #設(shè)置遠(yuǎn)程主機(jī)命令執(zhí)行超時(shí)時(shí)間(秒)

-w     #當(dāng)命令執(zhí)行失敗,發(fā)出警告,而非默認(rèn)中止任務(wù)。

 

實(shí)例

 1、查看本地與遠(yuǎn)程主機(jī)信息

本示例調(diào)用local方法執(zhí)行本地命令,添加@runs_once修飾符保證任務(wù)函數(shù)只執(zhí)行一次,調(diào)用run方法執(zhí)行遠(yuǎn)程命令。

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

 

from fabric.api import *

 

env.user = 'root'

env.hosts = ['192.168.1.22']

env.password = '123456'

 

@runs_once   #查看本地系統(tǒng)信息,當(dāng)有多臺(tái)主機(jī)時(shí)只運(yùn)行一次

def local_task():   #本地任務(wù)函數(shù)

    local('uname -a')

    

def remote_task():

    with cd('/var/logs'):   #with的作用是讓后面的表達(dá)式語句繼承當(dāng)前狀態(tài),實(shí)現(xiàn):cd /var/logs  && ls -l的效果

        run('ls -l')

 

simple1.py

執(zhí)行:

fab -f simple1.py local_task

fab -f simple1.py remote_task

 

 2、動(dòng)態(tài)獲取遠(yuǎn)程目錄列表

本例調(diào)用@task修飾符標(biāo)志入口函數(shù)go()對(duì)外部可見,配合@runs_once修飾符接收用戶輸入,最后調(diào)用worktask()函數(shù)實(shí)現(xiàn)遠(yuǎn)程命令執(zhí)行。

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

 

from fabric.api import *

 

env.user = 'root'

env.hosts = ['192.168.1.22']

env.password = '123456'

 

@runs_once   #主機(jī)遍歷過程中,只有第一臺(tái)觸發(fā)此函數(shù)

def input_raw():

    return prompt('please input directoryname:',default='/root')

 

def worktask(dirname):

    run('ls -l'+dirname)

 

@task    #限定只有go函數(shù)對(duì)fab命令可見,其他沒有使用@task標(biāo)記的函數(shù)fab命令不可用

def go():

    getdirname = input_raw()

    worktask(getdirname)

 

simple2.py

執(zhí)行:

fab -f simple2.py go

 

3、網(wǎng)關(guān)模式文件上傳與執(zhí)行

 本例通過定義env.gateway網(wǎng)關(guān)模式,即俗稱的中轉(zhuǎn)、堡壘機(jī)環(huán)境。通過網(wǎng)關(guān)對(duì)其他主機(jī)進(jìn)行文件上傳和執(zhí)行。

#!/usr/bin/env python

# -*- encoding: utf-8 -*-

 

from fabric.api import *

from fabric.context_managers import *

from fabric.contrib.console import confirm

 

env.user = 'root'

env.gateway = '192.168.1.23'   #定義堡壘機(jī)IP,作為文件上傳、執(zhí)行的中轉(zhuǎn)設(shè)置

env.hosts = ['192.168.1.21','192.168.1.22']

env.passwords = {

    'root@192.168.1.21:22':'123456',

    'root@192.168.1.22:22':'abcdef',

    'root@192.168.1.23:22':'123abc',  #堡壘機(jī)賬號(hào)信息

}

 

lpackpath = '/home/install/lnmp.tar.gz'   #本地安裝包路徑

rpackpath = '/tmp/install'    #遠(yuǎn)程安裝包路徑

 

 

@task

def put_task():  #上傳文件

    run('mkdir -p /tmp/install')

    #默認(rèn)情況下,當(dāng)命令執(zhí)行失敗時(shí),Fabric會(huì)停止執(zhí)行后續(xù)命令。有時(shí),我們允許忽略失敗的命令繼續(xù)執(zhí)行,比如run(‘rm /tmp/abc')在文件不存在的時(shí)候有可能失敗,這時(shí)可以用with settings(warn_only=True):執(zhí)行命令,這樣Fabric只會(huì)打出警告信息而不會(huì)中斷執(zhí)行。

    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

def run_task():   #安裝

    with cd('/tmp/install'):

        run('tar -zxvf lnmp.tar.gz')

        with cd('lnmp/'):    #使用with繼承/tmp/install目錄位置狀態(tài)

            run('./centos.sh')

 

 

@task

def go():   #上傳、安裝組合命令

    put_task()

    run_task()

 

simple3.py

 

simple3.py

執(zhí)行:

#上傳文件fab simple3.py put_task#執(zhí)行文件fab simple3.py run_task#上傳并執(zhí)行

fab simple3.py go

 

 

文章來自:博客園/MacoLee

您還未登錄,請(qǐng)先登錄

熱門帖子

最新帖子

?