青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

大龍的博客

常用鏈接

統計

最新評論

python fabric實現遠程操作和部署 -- 轉

fabric

title是開發,但是同時要干開發測試還有運維的活 (o(╯□╰)o)

近期接手越來越多的東西,發布和運維的工作相當機械,加上頻率還蠻高,導致時間浪費還是優點多。

修復bug什么的,測試,提交版本庫(2分鐘),ssh到測試環境pull部署(2分鐘),rsync到線上機器A,B,C,D,E(1分鐘),分別ssh到ABCDE五臺機器,逐一重啟(8-10分鐘) = 13-15分鐘

其中郁悶的是,每次操作都是相同的,命令一樣,要命的是在多個機器上,很難在本機一個腳本搞定,主要時間都浪費在ssh,敲命令上了,寫成腳本,完全可以一鍵執行,花兩分鐘看下執行結果

直到,發現了fabric這貨

官方文檔 入口

作用

很強大的工具

可以將自動化部署或者多機操作的命令固化到一個腳本里

和某些運維工具很像,用它主要是因為,python…..

簡單好用易上手

當然,shell各種命令組合起來也可以,上古神器和現代兵器的區別

環境配置

在本機和目標機器安裝對應包(注意,都要有)

sudo easy_install fabric 

目前是1.8版本

安裝完后,可以查看是否安裝成功

[ken@~$] which fab /usr/local/bin/fab 

裝完之后,可以瀏覽下官方文檔

然后,可以動手了

hello world

先進行本機簡單操作,有一個初步認識,例子來源與官網

新建一個py腳本: fabfile.py

def hello():     print("Hello world!") 

命令行執行:

[ken@~/tmp/fab$] fab hello Hello world!  Done. 

注意,這里可以不用fabfile作為文件名,但是在執行時需指定文件

[ken@~/tmp/fab$] mv fabfile.py test.py fabfile.py -> test.py [ken@~/tmp/fab$] fab hello  Fatal error: Couldn't find any fabfiles!  Remember that -f can be used to specify fabfile path, and use -h for help.  Aborting. [ken@~/tmp/fab$] fab -f test.py hello Hello world!  Done. 

帶參數:

修改fabfile.py腳本:

def hello(name, value):     print("%s = %s!" % (name, value)) 

執行

[ken@~/tmp/fab$] fab hello:name=age,value=20 age = 20!  Done. [ken@~/tmp/fab$] fab hello:age,20 age = 20!  Done. 

執行本機操作

簡單的本地操作:

from fabric.api import local  def lsfab():     local('cd ~/tmp/fab')     local('ls') 

結果:

[ken@~/tmp/fab$] pwd;ls /Users/ken/tmp/fab fabfile.py   fabfile.pyc  test.py      test.pyc [ken@~/tmp/fab$] fab -f test.py lsfab [localhost] local: cd ~/tmp/fab [localhost] local: ls fabfile.py  fabfile.pyc test.py     test.pyc  Done. 

實戰開始:

假設,你每天要提交一份配置文件settings.py到版本庫(這里沒有考慮沖突的情況)

如果是手工操作:

cd /home/project/test/conf/ git add settings.py git commit -m 'daily update settings.py' git pull origin git push origin 

也就是說,這幾個命令你每天都要手動敲一次,所謂daily job,就是每天都要重復的,機械化的工作,讓我們看看用fabric怎么實現一鍵搞定:(其實用shell腳本可以直接搞定,但是fab的優勢不是在這里,這里主要位后面本地+遠端操作做準備,畢竟兩個地方的操作寫一種腳本便于維護)

from fabric.api import local  def setting_ci():     local("cd /home/project/test/conf/")     local("git add settings.py")     #后面你懂的,懶得敲了….. 

混搭整合遠端操作

這時候,假設,你要到機器A的/home/ken/project對應項目目錄把配置文件更新下來

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21
#!/usr/bin/env python # encoding: utf-8  from fabric.api import local,cd,run  env.hosts=['user@ip:port',] #ssh要用到的參數 env.password = 'pwd'   def setting_ci():     local('echo "add and commit settings in local"')     #剛才的操作換到這里,你懂的  def update_setting_remote():     print "remote update"     with cd('~/temp'):   #cd用于進入某個目錄         run('ls -l | wc -l')  #遠程操作用run  def update():     setting_ci()     update_setting_remote() 

然后,執行之:

[ken@~/tmp/fab$] fab -f deploy.py update [user@ip:port] Executing task 'update' [localhost] local: echo "add and commit settings in local" add and commit settings in local remote update [user@ip:port] run: ls -l | wc -l [user@ip:port] out: 12 [user@ip:port] out:   Done. 

注意,如果不聲明env.password,執行到對應機器時會跳出要求輸入密碼的交互

多服務器混搭

操作多個服務器,需要配置多個host

 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/env python # encoding: utf-8  from fabric.api import *  #操作一致的服務器可以放在一組,同一組的執行同一套操作 env.roledefs = {             'testserver': ['user1@host1:port1',],             'realserver': ['user2@host2:port2', ]             }  #env.password = '這里不要用這種配置了,不可能要求密碼都一致的,明文編寫也不合適。打通所有ssh就行了'  @roles('testserver') def task1():     run('ls -l | wc -l')  @roles('realserver') def task2():     run('ls ~/temp/ | wc -l')  def dotask():     execute(task1)     execute(task2) 

結果:

[ken@~/tmp/fab$] fab -f mult.py dotask [user1@host1:port1] Executing task 'task1' [user1@host1:port1] run: ls -l | wc -l [user1@host1:port1] out: 9 [user1@host1:port1] out:  [user2@host2:port2] Executing task 'task2' [user2@host2:port2] run: ls ~/temp/ | wc -l [user2@host2:port2] out: 11 [user2@host2:port2] out:   Done. 

擴展

1.顏色

可以打印顏色,在查看操作結果信息的時候更為醒目和方便

from fabric.colors import *  def show():     print green('success')     print red('fail')     print yellow('yellow') #fab -f color.py show 

2.錯誤和異常

關于錯誤處理

默認,一組命令,上一個命令執行失敗后,不會接著往下執行

失敗后也可以進行不一樣的處理, 文檔

目前沒用到,后續用到再看了

3.密碼管理

文檔

更好的密碼管理方式,哥比較土,沒打通,主要是服務器列表變化頻繁,我的處理方式是:

3.1 host,user,port,password配置列表,所有的都寫在一個文件

或者直接搞到腳本里,當然這個更........

env.hosts = [         'host1',         'host2' ] env.passwords = {     'host1': "pwdofhost1",     'host2': "pwdofhost2", }  或者 env.roledefs = { 'testserver': ['host1', 'host2'], 'realserver': ['host3', ] } env.passwords = {     'host1': "pwdofhost1",     'host2': "pwdofhost2",     'host3': "pwdofhost3", } 

3.2 根據key解析成map嵌套,放到deploy中

另外命令其實也可以固化成一個cmds列表的…..

粗略就用到這些,后續有更多需求的時候再去撈文檔了,話說文檔里好東西真多,就是太多了,看了暈。。。

TODO:

裝飾器作用? @task @parallel  命令行常用: fab --help fab -l             -- 顯示可用的task(命令) fab -H             -- 指定host,支持多host逗號分開 fab -R             -- 指定role,支持多個 fab -P             -- 并發數,默認是串行 fab -w             -- warn_only,默認是碰到異常直接abort退出 fab -f             -- 指定入口文件,fab默認入口文件是:fabfile/fabfile.py  狀態確認及錯誤處理  更復雜的操作 

The end!

To be continue….

wklken

Email: wklken@yeah.net

Blog: http://www.wklken.com

2013-03-25

轉載請注明出處,謝謝

posted on 2014-06-02 11:21 大龍 閱讀(748) 評論(0)  編輯 收藏 引用

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产一区二区丝袜高跟鞋图片 | 1024国产精品| 亚洲欧美激情四射在线日| 亚洲国产日韩一区二区| 性欧美videos另类喷潮| 国产一区视频网站| 欧美成人高清| 欧美人妖另类| 欧美一区二区三区视频在线 | 久久精品盗摄| 久久在线免费| 亚洲色无码播放| 午夜精品久久久久影视 | 欧美日韩高清不卡| 亚洲欧美怡红院| 久久精品国产免费看久久精品| 在线成人www免费观看视频| 欧美激情一区在线观看| 国产精品国产一区二区| 久久久久久色| 欧美日韩激情小视频| 久久都是精品| 欧美精品在线观看播放| 欧美在线观看一二区| 蜜臀av一级做a爰片久久| 亚洲一区国产| 久久婷婷色综合| 亚洲欧美日本国产有色| 久久天堂成人| 欧美一区二区日韩一区二区| 看片网站欧美日韩| 性欧美大战久久久久久久久| 久久aⅴ国产紧身牛仔裤| 亚洲深夜影院| 乱码第一页成人| 久久精品首页| 欧美亚洲成人精品| 欧美激情一区在线| 国内精品久久久久久久影视蜜臀| 亚洲精品在线观看免费| 韩日视频一区| 亚洲免费一区二区| 久久av一区二区三区漫画| 国产午夜精品视频| 日韩亚洲欧美中文三级| 亚洲国产视频一区| 久久久国产一区二区三区| 亚洲免费在线精品一区| 欧美日本乱大交xxxxx| 久久躁狠狠躁夜夜爽| 国产精品揄拍一区二区| 亚洲欧洲日产国码二区| 亚洲高清自拍| 久久av红桃一区二区小说| 午夜精品国产更新| 欧美性淫爽ww久久久久无| 亚洲高清影视| 亚洲欧洲美洲综合色网| 久久婷婷国产综合精品青草| 久久久xxx| 国产在线麻豆精品观看| 午夜精品久久久久久久99黑人| 亚洲午夜精品久久久久久app| 农村妇女精品| 欧美国产亚洲精品久久久8v| 亚洲黑丝在线| 欧美精品18+| 亚洲日本欧美| 亚洲一区在线免费观看| 欧美性猛交xxxx乱大交蜜桃| 一本久久综合亚洲鲁鲁| 亚洲午夜激情网站| 国产精品理论片| 亚洲在线观看免费视频| 久久se精品一区精品二区| 国产日韩一区在线| 欧美主播一区二区三区| 免费视频一区| 亚洲精品国产精品国自产在线| 免费看的黄色欧美网站| 欧美激情视频在线播放| 一本色道久久综合狠狠躁篇的优点 | 女生裸体视频一区二区三区| 亚洲黄色免费网站| 欧美日韩精品综合在线| 亚洲一区二区精品视频| 久久精视频免费在线久久完整在线看| 国产日韩一区| 欧美+日本+国产+在线a∨观看| 亚洲啪啪91| 香蕉成人啪国产精品视频综合网| 国产日本亚洲高清| 久久久久这里只有精品| 亚洲人在线视频| 香蕉久久夜色精品| 亚洲第一综合天堂另类专| 欧美精品在线网站| 欧美一级视频免费在线观看| 欧美成人黄色小视频| 亚洲午夜电影| 亚洲第一中文字幕| 国产精品久久久一区二区三区| 久久国内精品视频| 亚洲精品欧美日韩专区| 午夜综合激情| 99在线精品免费视频九九视| 国产欧美一区二区精品性色| 免费欧美在线| 久久精品视频在线观看| 国产精品一二三| 久久青草久久| 亚洲自拍偷拍一区| 亚洲大片免费看| 久久不射中文字幕| 亚洲视频一区二区| 亚洲激情综合| 国精品一区二区| 国产精品成人一区二区三区吃奶| 久久综合久久综合久久| 亚洲欧美日本日韩| 一本久道久久久| 亚洲国产美女精品久久久久∴| 亚洲欧美一区二区精品久久久| 亚洲观看高清完整版在线观看| 国产视频在线观看一区| 欧美午夜片欧美片在线观看| 欧美成人中文字幕在线| 久久视频这里只有精品| 久久国产精品久久久久久久久久| 99精品国产在热久久| 亚洲激情综合| 亚洲高清在线视频| 老司机精品久久| 久久久一二三| 久久偷窥视频| 老司机aⅴ在线精品导航| 久久全国免费视频| 久久久久久色| 久久在线精品| 免费成人高清视频| 免费观看日韩av| 欧美gay视频激情| 欧美第一黄网免费网站| 免费观看在线综合| 欧美高清在线一区二区| 欧美大片在线观看一区二区| 免费不卡中文字幕视频| 欧美电影资源| 最新日韩精品| 日韩视频免费| 亚洲伊人伊色伊影伊综合网| 亚洲欧美不卡| 香蕉国产精品偷在线观看不卡| 亚洲人成在线播放网站岛国| 亚洲伦理一区| 亚洲免费网站| 久久人人九九| 欧美日韩国产999| 国产精品入口麻豆原神| 国产婷婷一区二区| 在线观看福利一区| 含羞草久久爱69一区| 亚洲国产欧美国产综合一区 | 欧美高清视频| 欧美亚洲成人精品| 精品999在线播放| 亚洲精品美女久久久久| 亚洲综合色丁香婷婷六月图片| 欧美一区免费| 欧美高清在线观看| 亚洲私人影院在线观看| 欧美在线资源| 欧美精品日韩| 国产亚洲欧美中文| 日韩午夜电影av| 欧美在线网站| 欧美激情女人20p| 亚洲图片欧洲图片av| 久久人人爽人人爽| 欧美色中文字幕| 怡红院精品视频| 亚洲一区国产精品| 欧美成人免费网| 亚洲免费在线视频一区 二区| 久久婷婷蜜乳一本欲蜜臀| 国产精品高潮粉嫩av| 亚洲福利国产精品| 欧美一级片在线播放| 亚洲欧洲日本专区| 亚洲免费观看高清在线观看 | 亚洲精品国产系列| 欧美一区国产一区| 欧美特黄一级大片| 亚洲电影免费观看高清完整版| 亚洲手机视频| 亚洲国产美女久久久久| 久久久www成人免费精品| 国产精品热久久久久夜色精品三区| 在线免费观看欧美| 久久久久国产成人精品亚洲午夜|