fabric - Machine Manager

Python Fabirc 是一個類似 Ruby capistrano 的自動化部署跟系統管理工具,安裝指令是 pip install -U fabric 或者 easy_install fabric 都可以。fabric 的使用也非常的簡單,只要寫好一個檔名是 fabfile.py 的檔案,在同一個資料夾底下打 fab --list 就可以看到有哪些參數可以下(就是 fabfile.py 裡面的 function)。

以下是一個簡單的範例 template

import fabric
from fabric.api import run, env
from fabric.operations import put
env.warn_only = True
# Broken machine
env.skip_bad_hosts = True
env.parallel = True
env.pool_size = 5
env.timeout = 5

message = """
fabric.state.output["status"] = False
"""
fabric.state.output["running"] = False
fabric.state.output["user"] = False
fabric.state.output["warnings"] = False
fabric.state.output["stderr"] = False


def web():
    for x in xrange(1,9):
        env.hosts.append('192.168.0.' + str(x))
    for x in xrange(11,19):
        env.hosts.append('192.168.0..' + str(x))
    for x in xrange(31, 39):
        env.hosts.append('192.168.0.' + str(x))


def cache():
    for x in xrange(1, 9):
        env.hosts.append('192.168.1.' + str(x))


def all():
    web()
    cache()


# define needed functions here.
def host_info():
    print 'Checking lsb_release of host: ',  env.host
    run('lsb_release -a')


def uptime():
    run('uptime')

def date():
    run('date')

然後我們打 fab –list 應該會顯示

Available commands:

    all
    cache
    date
    host_info
    uptime
    web

如果我們要知道 web 的 uptime 是多少就可以這樣使用 fab web uptime,那如果要知道 cache 的 host_info 就可以下 fab cache host_info,相同的如果要知道全部的機器的時間準不準就打 fab all date,使用了 fabric 之後管理就變簡單了吧!

進階的還有用 put 指令來做類似 rsync 的工作,請參閱 fabric 的文件即可。