真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

系統(tǒng)批量運(yùn)維管理器Fabric詳解

Fabric是基于Python(2.5及以上版本)實(shí)現(xiàn)的SSH命令行工具,簡化了SSH的應(yīng)用程序部署及系統(tǒng)管理任務(wù),它提供了系統(tǒng)基礎(chǔ)的操作組件,可以實(shí)現(xiàn)本地或遠(yuǎn)程shell命令,包括命令執(zhí)行、文件上傳、下載及完整執(zhí)行日志輸出等功能。Fab-ric在paramiko的基礎(chǔ)上做了更高一層的封裝,操作起來會(huì)更加簡單。Fabric官網(wǎng)地址為:http://www.fabfile.org

大豐網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。

創(chuàng)新互聯(lián)公司長期為上1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為黎平企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),黎平網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

一:fab常用參數(shù)

    fab作為Fabric程序的命令行入口,提供了豐富的參數(shù)調(diào)用,命令格式如下:

    fab [options] [:arg1,arg2=val2,host=foo,hosts='h2;h3',...] ...下面列舉了常用的幾個(gè)參數(shù),更多參數(shù)可使用fab-help查看。   

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

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

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

        ?-H,指定目標(biāo)主機(jī),多臺(tái)主機(jī)用“,”號(hào)分隔;   

        ?-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í)候我們甚至不需要寫一行Python代碼也可以完成遠(yuǎn)程操作,直接使用命令行的形式,例如:

    fab -p "shitouit@2018"  -H 18.16.200.151 -- 'ls '

        命令運(yùn)行結(jié)果如下圖

        系統(tǒng)批量運(yùn)維管理器Fabric詳解

二:fabfile的編寫

    fab命令是結(jié)合我們編寫的fabfile.py(其他文件名須添加-f filename引用)來搭配使用的,部分命令行參數(shù)可以通過相應(yīng)的方法來代替,使之更加靈活,例如“-H 192.168.1.21,192.168.1.22”,我們可以通過定義env.hosts來實(shí)現(xiàn),如“env.hosts=['192.168.1.21', '192.168.1.22']”。fab-file的主體由多個(gè)自定義的任務(wù)函數(shù)組成,不同任務(wù)函數(shù)實(shí)現(xiàn)不同的操作邏輯,下面詳細(xì)介紹。

    1:全局屬性設(shè)定

        evn對象的作用是定義fabfile的全局設(shè)定,支持多個(gè)屬性,包括目標(biāo)主機(jī)、用戶、密碼、角色等,各屬性說明如下:env.host,定義目標(biāo)主機(jī),可以用IP或主機(jī)名表示,以Python的列表形式定義,如env.hosts=['192.168.1.21', '192.168.1.22']。   

        ?env.exclude_hosts,排除指定主機(jī),如env.exclude_hosts=['192.168.1.22']。   

        ?env.user,定義用戶名,如env.user="root"。   

        ?env.port,定義目標(biāo)主機(jī)端口,默認(rèn)為22,如env.port="22"。   

        ?env.password,定義密碼,如env.pass-word='KSJ3548t7d'。

        ?env.passwords,與password功能一樣,區(qū)別在于不同主機(jī)不同密碼的應(yīng)用場景,需要注意的是,配置passwords時(shí)需配置用戶、主機(jī)、端口等信息,如:env.passwords = {    'root@192.168.1.21:22': 'SJk348ygd',    'root@192.168.1.22:22': 'KSh558j4f',    'root@192.168.1.23:22': 'KSdu43598'}   

        ?env.gateway,定義網(wǎng)關(guān)(中轉(zhuǎn)、堡壘機(jī))IP,如env.gateway='192.168.1.23'。   

        ?env.deploy_release_dir,自定義全局變量,格式:env.+“變量名稱”,如env.de-ploy_release_dir、env.age、env.sex等。   

        ?env.roledefs,定義角色分組,比如web組與db組主機(jī)區(qū)分開來,定義如下:

            env.roledefs = {    'webservers': ['192.168.1.21', '192.168.1.22', '192.168.1.23', '192.168.1.24'],    'dbservers': ['192.168.1.25', '192.168.1.26']}

            引用時(shí)使用Python修飾符的形式進(jìn)行,角色修飾符下面的任務(wù)函數(shù)為其作用域,下面來看一個(gè)示例:

@roles('webservers')
def webtask():    
    run('/etc/init.d/nginx start')
@roles('dbservers')
def dbtask():
    run('/etc/init.d/MySQL start')
@roles ('webservers', 'dbservers')
def pubclitask():
    run('uptime')
def deploy():
    execute(webtask)
    execute(dbtask)
    execute(pubclitask)

            在命令行執(zhí)行#fab deploy就可以實(shí)現(xiàn)不同角色執(zhí)行不同的任務(wù)函數(shù)了。

    2:常用api

        Fabric提供了一組簡單但功能強(qiáng)大的fab-ric.api命令集,簡單地調(diào)用這些API就能完成大部分應(yīng)用場景需求。Fabric支持常用的方法及說明如下:   

        ?local,執(zhí)行本地命令,如:local('uname-s');   

        ?lcd,切換本地目錄,如:lcd('/home');   

        ?cd,切換遠(yuǎn)程目錄,如:cd('/data/logs');   

        ?run,執(zhí)行遠(yuǎn)程命令,如:run('free-m');   

        ?sudo,sudo方式執(zhí)行遠(yuǎn)程命令,如:sudo('/etc/init.d/httpd start');   

        ?put,上傳本地文件到遠(yuǎn)程主機(jī),如:put('/home/user.info', '/data/user.info');   

        ?get,從遠(yuǎn)程主機(jī)下載文件到本地,如:get('/data/user.info', '/home/root.info');

        ?prompt,獲得用戶輸入信息,如:prompt('please input user password:');   

        ?confirm,獲得提示信息確認(rèn),如:con-firm("Tests failed. Continue[Y/N]?");   

        ?reboot,重啟遠(yuǎn)程主機(jī),如:reboot();   

        ?@task,函數(shù)修飾符,標(biāo)識(shí)的函數(shù)為fab可調(diào)用的,非標(biāo)記對fab不可見,純業(yè)務(wù)邏輯;   

        ?@runs_once,函數(shù)修飾符,標(biāo)識(shí)的函數(shù)只會(huì)執(zhí)行一次,不受多臺(tái)主機(jī)影響。

    3:示例:查看本地與遠(yuǎn)程主機(jī)信息

        使用local()方法執(zhí)行本地命令;@runs_once修飾符保證該任務(wù)函數(shù)只執(zhí)行一次;run()方法執(zhí)行遠(yuǎn)程命令;@task修飾符標(biāo)致入口函數(shù)

#!/usr/bin/env python
from fabric.api import * 

env.usr='root'
env.hosts=['18.16.200.150']
env.password="shitouit@2018"

@runs_once
def local_task():
    local('ifconfig')
@runs_once
def input_raw():
    return prompt('ples input the dir you want to lookup:',default='/root')

def remote_task(dirname):
    with cd(dirname):
      run('ls -l')

@task
def go():
    local_task()
    getdir = input_raw()
    remote_task(getdir)

    執(zhí)行結(jié)果如下圖:

    系統(tǒng)批量運(yùn)維管理器Fabric詳解

    

    4:示例:網(wǎng)關(guān)模式文件上傳與執(zhí)行

        本示例通過Fabric的evn對象定義網(wǎng)關(guān)模式,即俗稱的中轉(zhuǎn)、堡壘機(jī)環(huán)境。定義格式為“env.gateway='18.16.200.150'”,其中IP“18.16.200.150”為堡壘機(jī)IP,再結(jié)合任務(wù)函數(shù)實(shí)現(xiàn)目標(biāo)主機(jī)文件上傳與執(zhí)行的操作,詳細(xì)源碼如下:

#!/usr/bin/env python
from fabric.api import * 
from fabric.context_managers import *
from fabric.contrib.console import confirm

env.usr='root'
env.gateway='18.16.200.150'
env.hosts=['18.16.200.151','18.16.200.152']
env.passwords={
    "root@18.16.200.151:22": "shitouit@2018",
    "root@18.16.200.152:22": "shitouit@2018",
    "root@18.16.200.150:22": "shitouit@2018",
}

lpackpath = "/root/harbor-offline-installer-v1.4.0.tgz"
rpackpath = "/tmp/install"

@task
def put_task():
    run('mkdir '+ rpackpath)
    with settings(warn_only=True):
        result = put(lpackpath,rpackpath)
    if not result and not confirm("put file faild,Continue[Y/N]?"):
        abort("Aborting file put task!")
@task
def run_task():
    with cd(rpackpath):
        run('tar zvxf harbor-offline-installer-v1.4.0.tgz')

@task
def go():
    put_task()
    run_task()

    執(zhí)行結(jié)果如下圖:

    系統(tǒng)批量運(yùn)維管理器Fabric詳解

    

    


當(dāng)前標(biāo)題:系統(tǒng)批量運(yùn)維管理器Fabric詳解
文章轉(zhuǎn)載:http://weahome.cn/article/iijpse.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部