溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Fabric的使用

發(fā)布時(shí)間:2020-07-16 00:12:37 來源:網(wǎng)絡(luò) 閱讀:494 作者:Yum51 欄目:開發(fā)技術(shù)

一.初識(shí):

Fabric是python下的一個(gè)庫(kù),是可通過ssh批量管理多臺(tái)主機(jī)的一種方式。不需要在遠(yuǎn)程主機(jī)上安裝客戶端,這點(diǎn)跟Ansible挺像,在使用上也感覺更方便,會(huì)python語言就沒其它的問題了。

二.安裝(centos):

1.通過包管理器: yum install python-pip

        pip install fabric  

這種方式很快捷,在源碼安裝會(huì)碰到的許多依賴問題,都可以快速過。

2.通過下源碼包,編譯安裝(好處是可以自定義文件目錄了,這種方式的話可以python也一并重新裝了,系統(tǒng)自帶的往往較舊了)

I:下載python壓縮包解壓進(jìn)入相應(yīng)目錄執(zhí)行:

./configure --prefix=/data/soft/python2

make

make install

mv /usr/bin/python /usr/bin/python_old

ln -s /data/soft/python2/bin/python /usr/bin/python

II:安裝setuptools工具 : 進(jìn)入解壓后的文件目錄,執(zhí)行 :  python setup.py install

III:安裝pip: 進(jìn)入pip包解壓后的文件目錄:執(zhí)行 python setup.py build & python setup.py instll

IV:安裝fabric: pip install fabric 

三.Fabric 語法

  1. 常用選項(xiàng)參數(shù):

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

    -f:指定fab入口文件,默認(rèn)文件名為fabfile.py(即與fabfile.py 在同級(jí)目錄下,可直接省略-f選項(xiàng))

    -g:指定網(wǎng)關(guān)

    -H:指定主機(jī)名,多主機(jī)使用逗號(hào)隔開

    -P:以異步并行方式運(yùn)行多主機(jī)任務(wù),缺省情況下同步運(yùn)行;

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

    -t:設(shè)置主機(jī)連接TimeOut時(shí)間(Second);

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

    -w:當(dāng)命令執(zhí)行失敗,發(fā)出街區(qū),而非默認(rèn)中止命令。

    -p:連接主機(jī)的密碼

2.幾個(gè)關(guān)鍵全局屬性:

env.host:定義目標(biāo)主機(jī),以Python列表的形式定義,如env.host=['host01', 'host02']

env.exclude_hosts:排隊(duì)指定主機(jī)

env.user:定義遠(yuǎn)程用戶名

env.port:定義遠(yuǎn)程端口

env.password:定義遠(yuǎn)程密碼

env.passwords:與上功能一致,區(qū)別在于不同主機(jī)不同密碼的應(yīng)用場(chǎng)景,需要注意的是,配置passwords時(shí)需要配置用戶、主機(jī)、端口等信息,如:

env.passwords = {

    'root@host01:22' : 'cccid'

    'root@host02:22' : 'aabcd'

}

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

env.deploy_release_dir:自定義全局變量,格式:env.+variable_name,如:env.deploy_release_dir、env.age、env.sex等

env.roledefs:定義角色分組,如web組與DB組區(qū)別出來:

env.roledefs = {

     'webservers' : ['192.168.1.24', '192.168.1.27']

     'dbservers' : ['192.168.2.24', '192.168.2.25']

}

3.重要接口:

I:run  用來在一臺(tái)或者多臺(tái)遠(yuǎn)程主機(jī)上面執(zhí)行shell 命令。

使用方式如: run('ls /data')

II:local  執(zhí)行本機(jī)的命令或腳本

使用方式如:local(‘ifconfig')

III: get  從遠(yuǎn)程主機(jī)拷貝文件到本地 

get下有兩個(gè)屬性:

remote_path ; local_path

使用方式如:get(remote_path="/tmp/xxx.log", local_path="/tmp/xxx.log")  其中的remote_pat 與 local_path 可以省略。

IV:  put  從本地傳文件到遠(yuǎn)程主機(jī)  

put下有三個(gè)屬性:

remote_path ; local_path;mode

使用方式:如:upload = put("requirements.txt", "requirements.txt", mode=664)    

注:屬性名均可省略不寫

V: sudo    執(zhí)行遠(yuǎn)程主機(jī)烏版圖下 的sudo命令

VI:cd   執(zhí)行遠(yuǎn)程主機(jī)的切換目錄命令

使用方式如:  cd('/data')

使用方式如: sudo ('cat /etc/passwd')

VII: lcd  執(zhí)行本地切換目錄的命令

使用方式如:lcd('/tmp')

4.官方文檔下的簡(jiǎn)易例子:

官網(wǎng)提供了一個(gè)簡(jiǎn)單的例子:

# vi fabfile.py

#!/usr/bin/env python

from fabric.api import run

def host_type():

    run('uname -s')

執(zhí)行方式:   fab -H 192.168.198.202  host_type

fab 命令缺省情況下引用當(dāng)前目錄下的fabfile.py,若非此文件名,須加上-f參數(shù)

5. fabric 的API的所有模塊:

from fabric.api import abort, cd, env, get, hide, hosts, local, prompt, 

    put, require, roles, run, runs_once, settings, show, sudo, warn


四.附加例子-文件上傳,多主機(jī)批量執(zhí)行命令與腳本

#! /usr/bin/env python

from fabric.api import env,roles,run,execute,cd,put

## 也可以 from fabric.api import *  這樣省事便捷

env.roledefs={

        'server1':['root@119.29.93.15:22',],

        'server2':['root@119.29.21.85:22',]

}

env.passwords={

        'root@119.29.93.15:22':'*******' ,

        'root@119.29.21.85:22':'********'

}

def sendfile():

        put('/data/wyh/test/haha.sh','/data')

@roles('server1')

def task1():

        run ('ls /data -l |wc -l')

        with cd('/data'):

                run ('ls ')

                sendfile()

                run('/bin/sh haha.sh')

@roles('server2')

def task2():

        run('df -lh')

        with cd('/data'):

                run('ls ')

                sendfile()

                run('/bin/sh haha.sh')

def test():

        execute(task1)

        execute(task2)


執(zhí)行方式:fab test     

備注:腳本文件名為fabfile.py 執(zhí)行的時(shí)候,應(yīng)先進(jìn)入腳本所在目錄?;蛘呒訁?shù) -f 指定其他腳本文件。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI