Fabric 批量安装ZeroMQ

来源:互联网 发布:淘宝不满意怎么退货 编辑:程序博客网 时间:2024/05/01 11:46

Fabric是一个用Python开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行Python脚本就可以轻松部署。关于Fabric的安装可以直接参考官网的内容(Fabric 官网)

部署ZeroMQ,本就是一件麻烦的事情,所以写了一个脚本,用来实现多机统一部署

import sys, os, timeimport fabricfrom fabric.api import *    netifs = {}now = time.strftime('%Y%m%d-%H%M%S', time.localtime(time.time()))def host(str=''):    if str == '-':        list = _to_list(sys.stdin)    else:        list = str.split('\n')    env.hosts = _to_hosts(list)    env.passwords = _to_passwords(list)    print env.passwords    netifs = _to_netifs(list)    print env.hostsdef _to_list(handle):    list = []    while True:        line = handle.readline().strip()        if line:            list.append(line)        else:            return listdef _to_hosts(list):    hosts = []    for line in list:        kvp = line.split('|')        hosts.append(kvp[1])    return hostsdef _to_passwords(list):    passwords = {}    for line in list:        kvp = line.split('|')        passwords[kvp[1]] = kvp[2]    return passwords        def _to_netifs(list):    passwords = {}    for line in list:        kvp = line.split('|')        netifs[kvp[1]] = kvp[0]    return netifsdef rsync_zmq():    run('mkdir -p /data/soft')    put("/data1/deploy1/deploy/bandwidth/zeromq/zeromq-2.2.0.tar.gz","/data/soft/zeromq-2.2.0.tar.gz")def rsync_jzmq():    run('mkdir -p /data/soft')    put("/data1/deploy1/deploy/bandwidth/zeromq/jzmq-2.2.2.zip","/data/soft/jzmq-2.2.2.zip")def yum_install(name):    run('yum -y install ' + name )    def install_zmq():    run('tar -zxvf /data/soft/zeromq-2.2.0.tar.gz -C /data/soft')    with cd('/data/soft/zeromq-2.2.0'):         run('./autogen.sh')         run('./configure')         run('make install')    with cd('/data/soft/zeromq-2.2.0/perf'):         run('./inproc_lat  100 20')def install_jzmq():    run('unzip -o -d /data/soft/ /data/soft/jzmq-2.2.2.zip')    with cd('/data/soft/jzmq-2.2.2'):         run('chmod +x autogen.sh')         run('chmod +x configure')         run('dos2unix *.sh')         run('./autogen.sh')         run('./configure -with-zeromq=/data/soft/zeromq-2.2.0')         run('make install')    run('echo -e "/usr/local/lib" >> /etc/ld.so.conf')    run('sudo ldconfig')def install_zmq_auto():    rsync_zmq()    rsync_jzmq()    yun_install('libuuid-devel')    install_zmq()    install_jzmq()

执行方式:

echo "eth0|服务器ip|密码|描述信息" | fab -f deploy host:- rsync_soft
cat server.db |fab -f zeromq.py host:- install_zmq

上面的语句可以单独对一台机器执行相应的方法,也可以将服务器信息写入文件,统一执行

Fabric提供几个简单的API来完成所有的部署,最常用的是local()和run(),分别在本地和远程执行命令,put()可以把本地文件上传到远程,当需要在远程指定当前目录时,只需用with cd('/path/to/dir/'):即可。

默认情况下,当命令执行失败时,Fabric会停止执行后续命令。有时,我们允许忽略失败的命令继续执行,比如run('rm /tmp/abc')在文件不存在的时候有可能失败,这时可以用with settings(warn_only=True):执行命令,这样Fabric只会打出警告信息而不会中断执行。

Fabric是如何在远程执行命令的呢?其实Fabric所有操作都是基于SSH执行的,必要时它会提示输入口令,所以非常安全。更好的办法是在指定的部署服务器上用证书配置无密码的ssh连接。


0 0
原创粉丝点击