最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python自動(dòng)化部署工具Fabric的簡(jiǎn)單上手指南

 更新時(shí)間:2016年04月19日 17:27:24   作者:haort  
這篇文章主要介紹了Python自動(dòng)化部署工具Fabric的簡(jiǎn)單上手指南,涵蓋Fabric的安裝、fabric的遠(yuǎn)程操作與維護(hù)等方面,需要的朋友可以參考下

Fabric 是基于 SSH 協(xié)議的 Python 工具,相比傳統(tǒng)的 ssh/scp 方式,用 Python 的語(yǔ)法寫(xiě)管理命令更易讀也更容易擴(kuò)展,管理單臺(tái)或者多臺(tái)機(jī)器猶如本地操作一般。

官網(wǎng)地址:http://fabfile.org

安裝
省略python、pip管理工具安裝過(guò)程

pip install fabric

驗(yàn)證是否安裝成功
進(jìn)入python編輯模式,輸入代碼,無(wú)錯(cuò)即表示成功安裝

from fabric.api import local

fabric版hello world
fabric 默認(rèn)文件fabfile.py,當(dāng)然如果不想用這個(gè)名字,需要加-f參數(shù)

創(chuàng)建fabfile.py文件

vim fabrile.py

編輯代碼

#coding:utf-8
from fabric.api import local#
def hello():
   # local函數(shù)用來(lái)執(zhí)行本地命令
   local('echo "hello wolrd!"')

執(zhí)行代碼

fab hello

可以通過(guò)fab -l查看可以執(zhí)行的任務(wù),當(dāng)前為hello函數(shù)
運(yùn)行結(jié)果

[localhost] local: echo "hello world!"
hello world!
Done.


傳統(tǒng)維護(hù)方法:

$ ssh x.x.x.x 'uname -a' -- 輸出略

Fabric 示例:

$ cat fabfile.py
from fabric.api import run
def uname():
  run('uname -a')

$ fab -H x.x.x.x uname -- 輸出略

肉眼直觀看上去,貌似比 ssh 方式要寫(xiě)不少代碼,但是基于 ssh 方式中間可控環(huán)節(jié)比較少,例如:你想判斷某服務(wù)是否已經(jīng)啟動(dòng),沒(méi)有啟動(dòng)則執(zhí)行啟動(dòng)等等操作。ssh 命令式的做法稍顯麻煩。(當(dāng)然齷齪一點(diǎn)可以在被操作機(jī)器上寫(xiě)好一個(gè)腳本,ssh 調(diào)用這個(gè)腳本)

說(shuō)幾個(gè) Fabric 的優(yōu)點(diǎn)吧:

  • 角色定義
  • 代碼易讀
  • 封裝了本地、遠(yuǎn)程操作(還需要自己封裝system/popen/ssh操作么?)
  • 參數(shù)靈活(動(dòng)態(tài)指定 host/role 等,還有并發(fā)執(zhí)行 基于multiprocessing )
  • 完整的日志輸出

羅列的這些,其實(shí)日常工作里基本都有類(lèi)似的封裝了,但是有現(xiàn)成的一個(gè)成熟的工具,干啥不用呢?對(duì)吧。

常用的配置:

  • env.host           -- 主機(jī)ip,當(dāng)然也可以-H參數(shù)指定
  • env.password       -- 密碼,打好通道的請(qǐng)無(wú)視
  • env.roledefs       -- 角色分組,比如:{'web': ['x', 'y'], 'db': ['z']}
  • fab -l             -- 顯示可用的task(命令)
  • fab -H             -- 指定host,支持多host逗號(hào)分開(kāi)
  • fab -R             -- 指定role,支持多個(gè)
  • fab -P             -- 并發(fā)數(shù),默認(rèn)是串行
  • fab -w             -- warn_only,默認(rèn)是碰到異常直接abort退出
  • fab -f             -- 指定入口文件,fab默認(rèn)入口文件是:fabfile/fabfile.py

更多請(qǐng)參考:fab --help

常用的函數(shù):

  • local('pwd')                     -- 執(zhí)行本地命令
  • lcd('/tmp')                      -- 切換本地目錄
  • cd('/tmp')                       -- 切換遠(yuǎn)程目錄
  • run('uname -a')                  -- 執(zhí)行遠(yuǎn)程命令
  • sudo('/etc/init.d/nginx start')  -- 執(zhí)行遠(yuǎn)程sudo,注意pty選項(xiàng)

示例1:管理遠(yuǎn)程 nginx 服務(wù)

$ cat fabfile.py
from fabric.api import *
@task
def nginx_start():
  ''' nginx start '''
sudo('/etc/init.d/nginx start')

@task
def nginx_stop():
  ''' nginx stop '''
  sudo('/etc/init.d/nginx stop')

   

$ fab --list   -- 查看可用命令
Available commands:

  nginx_start nginx start 
  nginx_stop  nginx stop

$ fab -H x.x.x.x nginx_start -- 啟動(dòng) nginx

示例2:基于角色

$ cat fabfile.py
from fabric.api import *
env.roledefs = {'nginx': ['x.x.x.x', 'y.y.y.y'], 'mysql': 'z.z.z.z'}
@task
def mysql_start()
  ''' mysql start '''
  sudo('/etc/init.d/mysql start')

   

$ fab --list   -- 查看可用命令
Available commands:

  nginx_start nginx start 
  nginx_stop  nginx stop
  mysql_start mysql start

$ fab -R nginx nginx_start -- 啟動(dòng) nginx
$ fab -R mysql mysql_start -- 啟動(dòng) mysql

示例3:混合本地和遠(yuǎn)程操作

$ cat fabfile
def hello():
  ''' test hello '''
  with lcd('/tmp'): # 切換到 /tmp 目錄下
    local('svn co http://xxx xxx') # check 代碼到本地
    local('tar czf xxx.tar.gz xxx/') # 壓縮本地包
    put('xxx.tar.gz', '/tmp') # 上傳壓縮包到遠(yuǎn)程 /tmp 目錄下
  with cd('/tmp'):  # 切換到遠(yuǎn)程 /tmp 目錄
    run('tar zxf xxx.tar.gz') # 遠(yuǎn)程解壓

是不是看上去都是像本地一樣?對(duì)吧。

示例4:多個(gè)目標(biāo)服務(wù)器
相同密碼或者手動(dòng)輸入:

env.hosts = ['root@ip1:22',root@ip2:22]

不同密碼或者不想手動(dòng)輸入(此方法也可定義不角色一組服務(wù)器):

#coding:utf-8
from fabric.api import local,cd,put,lcd,env,run,execute,roles
env.roledefs = {
 'role1':['root@ip1:22',],
 'role2':['root@ip2:22',]
}
env.passwords={
 'root@ip1:22':'pwd1',
 'root@ip2:22':'pwd2'
}
@roles('role1')
def role1():
 with cd('/tmp'):
   run('ls -l')
@roles('role2')
def role2():
 with cd('/tmp'):
   run('ls')
def task():
 execute(role1)
 execute(role2)

相關(guān)文章

  • 使用Python讀寫(xiě)及壓縮和解壓縮文件的示例

    使用Python讀寫(xiě)及壓縮和解壓縮文件的示例

    Python的os模塊中提供了基本的文件讀寫(xiě)方法,而zipfile模塊則針對(duì)文件的壓縮和解壓縮操作,這里我們就來(lái)看一下使用Python讀寫(xiě)及壓縮和解壓縮文件的示例:
    2016-07-07
  • Django數(shù)據(jù)庫(kù)遷移報(bào)錯(cuò)InconsistentMigrationHistory

    Django數(shù)據(jù)庫(kù)遷移報(bào)錯(cuò)InconsistentMigrationHistory

    最近在使用Django,學(xué)習(xí)了一下Django數(shù)據(jù)庫(kù)遷移,在執(zhí)行遷移命令時(shí),突然報(bào)錯(cuò),本文就總結(jié)了一下原因,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Python 使用 Redis 作為緩存的操作方法

    Python 使用 Redis 作為緩存的操作方法

    在現(xiàn)代Web應(yīng)用和數(shù)據(jù)密集型服務(wù)中,使用Redis作為緩存可以提升性能和響應(yīng)速度,Redis是一個(gè)高性能的內(nèi)存中數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng),支持多種數(shù)據(jù)結(jié)構(gòu)如字符串、哈希、列表等,并提供持久性和分布式支持,本文給大家介紹Python 使用 Redis 作為緩存的操作方法,感興趣的朋友一起看看吧
    2024-10-10
  • Python中的哈希算法模塊hashlib詳解

    Python中的哈希算法模塊hashlib詳解

    這篇文章主要介紹了Python中的哈希算法模塊hashlib詳解,hashlib模塊實(shí)現(xiàn)了多種哈希算法,包括MD5以及SHA家族的算法,通過(guò)algorithms_guaranteed可以查看hashlib中封裝的所有算法,需要的朋友可以參考下
    2023-08-08
  • pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法

    pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法

    今天小編就為大家分享一篇pyqt遠(yuǎn)程批量執(zhí)行Linux命令程序的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • 對(duì)python append 與淺拷貝的實(shí)例講解

    對(duì)python append 與淺拷貝的實(shí)例講解

    今天小編就為大家分享一篇對(duì)python append 與淺拷貝的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • 使用Python來(lái)批量檢測(cè)并刪除Word文檔中的宏

    使用Python來(lái)批量檢測(cè)并刪除Word文檔中的宏

    Word文檔作為最常用的電子文檔格式之一,經(jīng)常被用來(lái)作為內(nèi)容分享工具,在網(wǎng)絡(luò)中或設(shè)備之間進(jìn)行傳輸,其安全性也需要受到關(guān)注,宏是可嵌入Word文檔中的一種VBA迷你程序,本文將介紹如何使用Python來(lái)批量檢測(cè)并刪除Word文檔中的宏,保護(hù)計(jì)算機(jī)的安全,需要的朋友可以參考下
    2024-07-07
  • 零基礎(chǔ)學(xué)習(xí)python偏函數(shù)語(yǔ)法的推導(dǎo)方法步驟

    零基礎(chǔ)學(xué)習(xí)python偏函數(shù)語(yǔ)法的推導(dǎo)方法步驟

    這篇文章主要介紹了零基礎(chǔ)學(xué)習(xí)python偏函數(shù)語(yǔ)法的推導(dǎo)方法步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python實(shí)現(xiàn)為pdf添加水印功能

    Python實(shí)現(xiàn)為pdf添加水印功能

    這篇文章主要介紹了Python實(shí)現(xiàn)給普通PDF添加水印的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 最簡(jiǎn)單的matplotlib安裝教程(小白)

    最簡(jiǎn)單的matplotlib安裝教程(小白)

    這篇文章主要介紹了最簡(jiǎn)單的matplotlib安裝教程(小白),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評(píng)論

临泽县| 萨嘎县| 四子王旗| 大名县| 陵水| 建湖县| 凤凰县| 仁布县| 黄骅市| 高唐县| 丰城市| 临颍县| 新河县| 平山县| 桓仁| 介休市| 外汇| 枣强县| 漾濞| 敦煌市| 临高县| 平顶山市| 九寨沟县| 县级市| 江陵县| 保定市| 陆河县| 饶平县| 马边| 栖霞市| 呼伦贝尔市| 托里县| 宣汉县| 平原县| 汶川县| 锦屏县| 河间市| 顺昌县| 和林格尔县| 健康| 肇源县|