亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

系統批量運維管理器Fabric詳解

發布時間:2020-04-23 22:54:33 來源:網絡 閱讀:528 作者:lvsir666 欄目:編程語言

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


一:fab常用參數

    fab作為Fabric程序的命令行入口,提供了豐富的參數調用,命令格式如下:

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

        ?-l,顯示定義好的任務函數名;   

        ?-f,指定fab入口文件,默認入口文件名為fabfile.py;   

        ?-g,指定網關(中轉)設備,比如堡壘機環境,填寫堡壘機IP即可;   

        ?-H,指定目標主機,多臺主機用“,”號分隔;   

        ?-P,以異步并行方式運行多主機任務,默認為串行運行;

        ?-R,指定role(角色),以角色名區分不同業務組設備;   

        ?-t,設置設備連接超時時間(秒);   

        ?-T,設置遠程主機命令執行超時時間(秒);   

        ?-w,當命令執行失敗,發出告警,而非默認中止任務。

    有時候我們甚至不需要寫一行Python代碼也可以完成遠程操作,直接使用命令行的形式,例如:

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

        命令運行結果如下圖

        系統批量運維管理器Fabric詳解


二:fabfile的編寫

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

    1:全局屬性設定

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

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

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

        ?env.port,定義目標主機端口,默認為22,如env.port="22"。   

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

        ?env.passwords,與password功能一樣,區別在于不同主機不同密碼的應用場景,需要注意的是,配置passwords時需配置用戶、主機、端口等信息,如: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,定義網關(中轉、堡壘機)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組主機區分開來,定義如下:

            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']}

            引用時使用Python修飾符的形式進行,角色修飾符下面的任務函數為其作用域,下面來看一個示例:

@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)

            在命令行執行#fab deploy就可以實現不同角色執行不同的任務函數了。

    2:常用api

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

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

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

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

        ?run,執行遠程命令,如:run('free-m');   

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

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

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

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

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

        ?reboot,重啟遠程主機,如:reboot();   

        ?@task,函數修飾符,標識的函數為fab可調用的,非標記對fab不可見,純業務邏輯;   

        ?@runs_once,函數修飾符,標識的函數只會執行一次,不受多臺主機影響。

    3:示例:查看本地與遠程主機信息

        使用local()方法執行本地命令;@runs_once修飾符保證該任務函數只執行一次;run()方法執行遠程命令;@task修飾符標致入口函數

#!/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)

    執行結果如下圖:

    系統批量運維管理器Fabric詳解

    

    4:示例:網關模式文件上傳與執行

        本示例通過Fabric的evn對象定義網關模式,即俗稱的中轉、堡壘機環境。定義格式為“env.gateway='18.16.200.150'”,其中IP“18.16.200.150”為堡壘機IP,再結合任務函數實現目標主機文件上傳與執行的操作,詳細源碼如下:

#!/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()

    執行結果如下圖:

    系統批量運維管理器Fabric詳解

    

    

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

名山县| 双辽市| 日土县| 同江市| 泰和县| 深水埗区| 东丽区| 华容县| 黑山县| 永登县| 南投县| 启东市| 黔江区| 新竹县| 绍兴县| 珠海市| 茶陵县| 布拖县| 资源县| 西平县| 永兴县| 靖江市| 上饶市| 安阳县| 临泉县| 迁安市| 太白县| 郧西县| 大安市| 静宁县| 商水县| 左权县| 锦屏县| 辽阳市| 伊川县| 紫阳县| 增城市| 正宁县| 桐城市| 鹰潭市| 合江县|