首頁 後端開發 Python教學 運維管理器Fabric使用方法

運維管理器Fabric使用方法

Jan 16, 2017 pm 05:47 PM
fabric

Fabric的安裝

Fabric支援pip,easy_install或原始碼方式安裝,很方便解決套件依賴問題,(根據使用者環境,自行選擇pip或ease_install)
pip install fabric
easy_install fabric

碼。

校驗安裝結果,如果導入模組沒有提示異常,則表示安裝成功:

root@Python_S6:~# python

Python 2.7.5+ (default, Sep 19 2013, 13:48:49)  4. .1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import fabric
>>>

官網提供了一個簡單的入門範例:

root@Python_S6:/home/chart7/test/fabric# cat farbic.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import run
  
def host_type(): #定义一个任务函数,通过run方法实现远程执行'uname -s'命令
  run('uname -s')
登入後複製

運行結果如果下圖所示

運維管理器Fabric使用方法指令引用預設檔名為fabfile.py,如果使用非預設檔名稱,則需透過'-f'來制定,如:fab -H 192.168.1.23, 192.168.1.24 -f host_type.py host_type,如果管理員與目標主機未設定金鑰認證信任,將提示會輸入目標主機對應帳號登入密碼。

一、fab的常用參數

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

fab [options] [:arg1,arg2=val2,host=foo,hosts ='h1;h2',....]

下面列舉了常用的幾個參數,更多參數可使用fab -help查看.
-l,顯示定義好的任務函數名;
-f,指定fab入口文件,預設入口文件名稱為fabfile.py;
-g,指定網關設備,如堡壘機環境,填寫堡壘機IP即可;
-H,指定目標主機,多台主機以','號分隔;
-P,以非同步並行方式執行多個主機任務,預設為序列運作;
-R,指定role(角色),以角色名稱區分不同業務群組裝置;
-t,設定裝置連線逾時時間;
-T,設定遠端主機指令執行逾時時間;
-w,當指令執行失敗,發出警告,而非預設終止任務

二、fabfile的編寫

fab指令是結合我們所寫的fabfile.py(其他文件名必須加入-f filename引用)來搭配使用,部分命令列參數可以透過對應的方法來代替,使其更加靈活,列如"-H 192.168.1.23,192.168.1.24",我們可以透過定義env.hosts來實現,如"env.hosts=[192.168.1.23,192.168.1.24]".fabfile的主體由多個自定義的任務函數組成,不同任務函數實現不同的操作邏輯,下面詳細介紹

三、全局屬性設定

env物件的作用是定義fabfile的全域設定,支援多個屬性,包括目標主機,用戶,密碼角色,各屬性說明如下:

env.host,定义目标主机,可以用IP或主机名表示,以Python的列表形式定义,如env.hosts=['192.168.1.23,192.168.1.24'].
env.exculde_hosts,排除指定主机,如env.exclude_hosts=['192.168.1.23']
env.user,定义用户名,如env.user="root"
env.port,定义目标主机端口,如env.port = '22'
env.password,定义密码,如env.password='123456'
env.passwords,与password功能一样,区别在于不同主机不同密码的应用场景,需要注意的是,配置passwords时需要配置用户,主机,端口等信息,如:env.passwords = {'root@192.168.1.21:22':'123456',
'root@192.168.1.23:22':'3234234',
'root@192.168.1.24:23':'09887',
}
env.gateway,定义网关(中转,堡垒机)IP,如env.gateway = '192.168.1.1'
env.roledefs,定义角色分组,比如web组与db组主机区分开来,定义如下:
env.roledefs = {
'webservers':['192.168.1.21','192.168.1.22','192.168.1.23'],
'dbservers':['192.168.1.24','192.168.1.25'],
}
登入後複製

引用時使用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 publictask():
  run('uptime')
def deploy():
  execute(webtask)
  execute(dbtask)
  execute(publictask)
登入後複製

在指令執行fab deploy就可以實作不同角色執行不同的任務函數。

常用API

Fabric提供了一組簡單但功能強大的fabric.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('/home/user.info','/data/user.info');
prompt,获得用户输入信息,如:prompt('please input user password:');
confirm,获得提示信息确认,如:confirm('Test failed,Continue[Y/N]');
reboot,重启远程主机,如reboot();
@task,函数修饰符,标识符的函数为fab可调用,非标记对fab不可见,纯业务逻辑;
@runs_once,函数修饰符,标识符的函数只会执行一次,不受多台主机影响;
登入後複製

範例1 :查看本地與遠端主機資訊

本範例呼叫local()方法執行本地命令,新增"@runs_once"修飾保證該任務函數只執行一次。呼叫run()方法執行遠端指令,

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.43','192.168.1.23','192.168.1.24']
env.port = '22'
env.password = '123456'
  
@runs_once #查看本地系统信息,当有多台主机时只运行一次
def local_task(): #本地任务函数
  local('uname -a')
  
def remote_task():
  with cd('/data'): #with的作用是让后面的表达式语句继承当前状态,实现cd /var && ls -l的效果
    run('ls -l')
登入後複製

透過fab指令分別呼叫local_task任務函數運作效果如下圖所示

運維管理器Fabric使用方法結果中顯示了[192.168.1.23] Executing,ask'上並非在主機192.168.1.23上執行任務,而是傳回Fabric主機本地的'uname -a'的執行效果

呼叫remtoe_task任務函數的執行結果如下圖所示

運維管理器Fabric使用方法範例2;目錄清單

本範例使用"@task"修飾符標誌入口函數go()對外部可以,配合"@runs_once"符等待接受使用者輸入,最後呼叫worktask()任務函數實作遠端指令執行,

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
env.user = 'root'
env.hosts = ['192.168.1.23','192.168.1.24']
env.password = '123456'
@runs_once #在主机遍历过程中,只有一台出发此函数
def input_raw():
  return prompt("please input direcotry name:",default="/home")
  
  
def worktask(dirname):
  run("ls -l %s" %dirname)
  
@task
def go():
  getdirname = input_raw()
  worktask(getdirname)
登入後複製

這個範例實作了一個動態輸入遠端目錄名稱,在取得目錄清單的功能,由於我們只要求輸入一次,再顯示所有主機上該目錄的列表信息,呼叫了一個子函數input_raw(同時配置)@runs_once修飾符來達到此目的,執行結果如下圖

運維管理器Fabric使用方法檔案上傳與執行

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from fabric.api import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.hosts=['192.168.1.23','192.168.1.24']
#假如所有主机密码都不一样,可以通过env.passwords字典变量一一指定
env.passwords = {
  'root@192.168.1.23:22': '123456',
  'root@192.168.1.24:22': '123456',
}
  
lpackpath="/home/a.tar.gz"
rpackpath="/tmp/install"
  
@task
def put_task():
  run("mkdir -p /tmp/install")
  with settings(warn_only=True):
    result = put(lpackpath, rpackpath)
  if result.failed and not confirm("put file failed, Continue[Y/N]?"):
    abort("Aborting file put task!")
  
@task
def run_task():
  with cd("/tmp/install"):
    run("tar -zxvf a.tar.gz")
  
@task
def go():
  put_task()
  run_task()
登入後複製

更多維運管理器Fabric使用方法相關文章請關注PHP中文網!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1665
14
CakePHP 教程
1424
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Python vs.C:申請和用例 Python vs.C:申請和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

Python:遊戲,Guis等 Python:遊戲,Guis等 Apr 13, 2025 am 12:14 AM

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python與C:學習曲線和易用性 Python與C:學習曲線和易用性 Apr 19, 2025 am 12:20 AM

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

Python和時間:充分利用您的學習時間 Python和時間:充分利用您的學習時間 Apr 14, 2025 am 12:02 AM

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python:自動化,腳本和任務管理 Python:自動化,腳本和任務管理 Apr 16, 2025 am 12:14 AM

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

Python標準庫的哪一部分是:列表或數組? Python標準庫的哪一部分是:列表或數組? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

學習Python:2小時的每日學習是否足夠? 學習Python:2小時的每日學習是否足夠? Apr 18, 2025 am 12:22 AM

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。

See all articles