自動化運維管理fabric

  • A+
所屬分類:python 自動化運維

自動化日常管理任務和部署">如何使用fabric 自動化日常管理任務和部署

自動化,批量化是作為管理員,或者運維人員必須面臨的問題。自動化和批量化也有很多方式,可以用單一工具也可以自己寫shell腳本,甚至可以開發出來一套完備的任務管理系統。其實我們大多時候可以在一臺主機上面通過ssh來控制所有機器,來完成我們的任務工作。是否有這樣的工具來支持我們呢?

devops

fabric 常用接口

fabric是對ssh的一個集成工具,對我們而言只需要使用相應的接口,來高效的完成工作,我們常用到的功能基本是 : 本地或者遠端執行命令, 分發文件,收集文件,還有一些權限相關的操作。 這些fabric都給我們提供了對應的接口。
如下所示:

fabric 還提供了上下文管理器

接口部分提供了命令運行的方式,不過都無法保持上下文關系,為了解決這個問題,fabric的context manager 就派上了用場:

fabric 安裝

fabric 編程模型介紹

由于fabric是基于python的,所以寫fabric腳本就是寫python腳本,你可以像寫python腳本一樣,可以依賴其他模塊或者其他工具來完成工作。Fabric 腳本,通過fab工具運行fabric python腳本。fab工具默認執行fabfile.py ,也可以通過-f 參數指定 腳本文件名。fabric優勢多多,簡單,方便,日志輸出清晰,命令
中可以使用AWK 命令 下面我們看一個 hello world 程序。

執行命令(其中參數的傳遞直接跟在任務后跟變量名和參數):

fabric主要接口方法

我們已經看了一個簡單例子下面我們來看一下fabric的主要接口。

run (fabric.operations.run)

Fabric 中使用最多的就是 run 方法了。run是用來在一臺或者多臺遠程主機上面執行shell 命令。

  • 方法的返回值是可以通過變量來進行捕獲
  • 可以通過變量的.failed 和 .succeeded 來檢查命令是否執行成功
  • 還有一個很贊的就是 run 方法中執行命令的時候,可以支持awk 很給力

使用方法:

sudo (fabric.operations.sudo)

使用 sudo 命令執行對頂的命令。使用方法與run 類似。

local (fabric.operations.local)

local 命令是執行本機的命令或者腳本.使用方法和run 還有sudo類似,但是有一個區別
就是: 捕獲結果的時候,是通過指定 capture=False 或者capture=True來確定。來看
實例:

get (fabric.operations.get)

get 方法是從遠程主機 copy file 到本地,功能跟scp一樣。可以從遠程主機下載
備份,或者日志文件等等。

  • 通過參數 remote_path 指定遠程文件的路徑
  • 通過參數 local_path 指定遠程文件的路徑

使用方法如下:

put (fabric.operations.put)

某些需要上傳和分發文件的時候,put命令就派上了用場,使用方式類似 get。也同樣可以
通過.failed .succeeded進行命令是否執行成功的判斷。

  • local_path - 本地路徑
  • remote_path - 遠程路徑
  • mode - 文件屬性

如下例子:

并行執行

目前官方來看 1.X 版本的fabric 并行執行的時候不是thread safe的。如果需要并行執行task。需要在方法上面使用注解 @parallel 為了防止管控機器上面過多的并發任務可以通過 @parallel(pool_size=5)來設置. 并行的執行輸出都會輸出到一個終端上面,比較混亂。最好是寫到日志,以task為維度。跟下面的代碼類似。

MySQL 安裝實例

安裝步驟如下

  • 獲取主機ip
  • check主機可達性
  • 檢查linux平臺詳情
  • 是否有運行的mysql實例
  • 如果有獲取對應的端口
  • 檢查是否和要安裝的端口沖突
  • 處理mysql用戶以及屬組
  • 處理安裝相關目錄和權限
  • copy 安裝包到目標機
  • 解壓處理,將主要軟件工具軟連接到path路徑中
  • 生成對應標準配置文件并分發到目標機對應目錄
  • 初始化數據庫
  • 啟動數據庫
  • 基本步驟安裝完畢

基本腳本如下:

script 1 sub task :

script 2 whole task :

weinxin
微信公眾號
掃一掃關注運維生存時間公眾號,獲取最新技術文章~

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前評論:1   其中:訪客  1   博主  0

    • 花花工資 0

      參考 https://niubilety.com/category/python/fabric/