自動化運維工具Fabric - Fabfile 的建立和使用

該篇文章來源於 Fabric 的官方文檔,原文爲Fabfile construction and usehtml

這篇文章包含了關於 fabfiles 的如下兩項python

  1. 怎樣編寫最好的 fabfile
  2. 寫好後怎樣使用 fabfile

Fabfile 發現

Fabric 可以加載 Python 模塊(好比:fabfile.py)或者 包(好比:一個包含__init__.py文件的名叫fabfile的目錄)。它默認尋找命名爲 fabfile 的文件或者目錄,要麼是 fabfile/,要麼是fabfile.py算法

fabfile 發現算法搜索調用用戶的當前工做目錄或者是任何父目錄。所以,它是面向「工程」使用的,這個工程的源碼樹的根目錄有一個 fabfile.py文件。不管在這個樹的哪裏,當使用 fab 命令的調用的時候,這個 fabfile 文件將被發現。api

可使用命令行參數 -f 來重寫指定名字搜索到的 fabfile文件,或者是加一個 fabricrc 行來設置 fabfile 的值。例如,你想命名你的 fabfilefab_tasks.py,你能夠建立這樣一個文件,而後調用命令 fab -f fab_tasks.py <task name> ,或者是添加以下 fabfile = fab_tasks.py~/.fabricrc文件裏面。ide

若是給定的 fabfile 名字中除了文件名以外還包含路徑(好比:../fabfile.py 或者是 /dir1/dir2/custom_fabfile ),它將被做爲一個文件路徑對待,而且沒有任何排序搜索就直接驗證是否存在。當在這種模式下,波浪線擴展將被應用。所以你能夠參考:~/personal_fabfile.pyui

注:爲了訪問你的 fabfile文件的內容, Fabric 作了一個正常的 import (實際是一個 import) – it does not do any eval-ing or similar. 爲了完成這個工做, Fabric 臨時把發現的 fabfile 文件的路徑添加進 Python 的加載路徑中 (而且而後當即移除了它).net

注:Changed in version 0.9.2: The ability to load package fabfiles命令行

Importing Fabric

由於 Fabric 是 Python 編寫的。你能夠以任何的你想的方式 import 它的組件。儘管如此,爲了封裝以及便利(使得更加容易的包裝 Fabric 的腳本),Fabric 的公共 API 是維護在 fabric.api 模塊中。code

全部的 Fabric 的 Operations, Context Managers, DecoratorsUtils 被包含在這個模塊中,做爲一個單獨的標記命名空間。這可使你的 fabfiles 文件有一個至關簡單以及方便的接口調用。htm

from fabric.api import *

# call run(), sudo(), etc etc

這不是最好的技術實踐(由於一些緣由),你僅僅是使用了一些 Fabric API 的調用。一個更好的方法是精確的使用 from fabric.api import env, run 或者是相似的方法。儘管如此,在大多數重要的 fabfiles ,你能夠經過使用 import 星號來使用全部的或者大部分的 API。

from fabric.api import *

主要包括以下:

from fabric.api import abort, cd, env, get, hide, hosts, local, prompt, \
    put, require, roles, run, runs_once, settings, show, sudo, warn

在這個示例咱們感受到實用主義重寫了最佳實踐。

相關文章
相關標籤/搜索