python + fabric 实现批量部署

Fabric是一个Python(2.5-2.7)库,用于简化使用SSH的应用程序部署或系统管理任务。它提供的操作包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。


确保安装了pip
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py


安装fabric
pip install fabric

在当前目录下新建文件fabfile.py,输入内容如下
def hello():
	print("Hello fab!")


执行操作hello:   

fab hello


文件名不为fabfile.py时需进行指定,将fabfile,.py文件重命名为fab.py
fab -f fab.py hello


参数传递
def hello(name):
    print "Hello %s" % (name)


执行操作hello:
fab hello:xiaoming


本地操作
执行本地操作命令使用local
from fabric.api import local


def test():
    local('cd /home/dev')
    local('ls')

执行本地命令 
fab test


远程操作
执行远程操作命令使用run
例如,为远程2台服务器,安装pip
from fabric.api import cd, run, env, hosts


env.hosts = ['192.168.101.131:22', '192.168.101.129:22']
env.user = 'root'
env.password = 'toor'


def install_pip():
    run('mkdir -p /y01')
    cd('/y01')
    run('wget https://bootstrap.pypa.io/get-pip.py')
    run('python get-pip.py')

以上为多台服务器执行相同操作,当多台服务器执行不同操作时:

from fabric.api import env, roles, run, execute

env.roledefs = { 
    'server1' : ['[email protected]:22'],
    'server2' : ['[email protected]:22']
}

env.user = 'root'
env.password = 'toor'

@roles('server1')
def task1():
    run('ls /home')

@roles('server2')
def task2():
    run('du -sh /home')

def test():
    execute(task1)
    execute(task2)


你可能感兴趣的:(Python)