Fabric简明教程

分享到:

Fabric是一个Python(2.5-2.7)的支持库和命令行工具,用于流水线式执行SSH,以实现应用部署或系统管理。详情查看官方网站以及官方文档

Hello

安装

pip install fabric

编写脚本

vim fabfile.py
def hello():
print("Hello world!")

运行脚本

fab hello

常见命令

fab --help
fab -l
# 显示可用的task(命令)
fab -H
# 指定host,支持多个host,以逗号分开
fab -R
# 指定role,支持多个role
fab -P
# 并发数,默认串行
fab -w
# warn_only,默认遇到异常直接abort退出
fab -f
# 指定入口文件,默认fabfile.py

常用函数

lcd('/tmp')
# 切换本地目录
cd('/tmp')
# 切换远程目录
local('pwd')
# 执行本地命令
run('uname -a')
# 执行远程命令
sudo('/etc/init.d/nginx start')
# 执行远程sudo

错误处理

def test():
with settings(warn_only=True):
result = local('./manage.py test my_app', capture=True)
if result.failed and not confirm("Tests failed. Continue anyway?"):
abort("Aborting at user request.")

角色定义

host1 = 'user@192.168.1.1:22'
host2 = 'user@192.168.1.2:22'
host3 = 'user@192.168.1.3:22'
env.hosts = [ host1, host2, host3 ]
env.passwords = {
host1: "pwd_of_host1",
host2: "pwd_of_host2",
host3: "pwd_of_host3",
}

或者

env.roledefs = {
'nginx_user': [host1, host2],
'mysql_user': [host3]
}
env.passwords = {
host1: "pwd_of_host1",
host2: "pwd_of_host2",
host3: "pwd_of_host3",
}

简单实例

from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
host1 = 'user@192.168.1.1:22'
host2 = 'user@192.168.1.2:22'
host3 = 'user@192.168.1.3:22'
env.passwords = {
host1: "pwd_of_host1",
host2: "pwd_of_host2",
host3: "pwd_of_host3",
}
env.roledefs = {
'nginx_user': [host1, host2],
'mysql_user': [host3]
}
def test():
with settings(warn_only=True):
result = local('./manage.py test my_app', capture=True)
print("some processings")
if result.failed and not confirm("Tests failed. Continue anyway?"):
abort("Aborting at user request.")
print red("some error")
def deploy():
test()
local("git add -p && git commit")
local("git push")
@task
@parallel
@roles('nginx')
def nginx_start():
sudo('/etc/init.d/nginx start')
@task
@serial
@roles('nginx')
def nginx_stop():
sudo('/etc/init.d/nginx stop')
@task
@parallel(pool_size=5)
@roles('mysql')
def mysql_start()
sudo('/etc/init.d/mysql start')
来自:http://blog.willwong.cc/posts/fabricjian-ming-jiao-cheng.html#jtss-tsina
昵    称:
验证码:

相关文档: