Fabric批量远程执行操作

最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了Python的一个框架FabricFabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务。

它提供的主要功能包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。

安装
在我的CentOS上,运行下面的命令就可以简单安装

yum install Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install fabric.noarch

测试脚本
在当前目录下创建fabfile.py文件,fabric默认总是使用fabfile.py作为它的配置文件,当然也可以使用-f来指定使用的配置文件,内容如下:

def hello():
    print("Hello fab!")1
然后运行”fab hello”,可以得到如下结果
Hello fab!

下面看看参数怎样传递

def hello(name):
    print 'Hello %s!'%name

然后运行”fab hello:name=fab”,可以得到如下结果
Hello fab!

执行本地操作
from fabric.api import *
def test():
    local('cd /tmp')
    local('ls -l')

执行远程操作
from fabric.api import *
env.hosts=['kongxx@host1:22','kongxx@host2:22']
env.password='Letmein'
def test():
    with('cd /tmp'):
        run('ls -l')

其中env.hosts定义了要远程执行的机器列表,env.password是要登录远程机器的密码。

批量远程启停服务
基本命令知道咋用了,下面就看看怎样实现我需要的功能,由于我需要批量在200多台机器上批量启动服务和执行命令,所有这些机器都配置了免密码登录,这样就不需要配置env.password了

机器列表文件
首先准备了一个机器列表文件,比如把所有机器名写在/tmp/hosts文件中,每行一个机器名,类似如下

host1
host2
host3
...1
fabfile.py文件
from fabric.api import *
import os

def set_hosts():
    f=open('/tmp/hosts', 'r')
    env.hosts=f.readlines()
    f.close()

@parallel(pool_size=5)
def start():
    print("start service")
    prepare_hosts()
    run('/etc/init.d/myservice start')

@parallel(pool_size=5)
def stop():
    print("stop service")
    prepare_hosts()
    run('/etc/init.d/myservice stop')

@parallel(pool_size=5)
def status():
    print("check service status")
    prepare_hosts()
    run('/etc/init.d/myservice status')

这里由于机器比较多,因此使用了“@parallel(pool_size=5)”来使fabric使用并发方式执行,当然也可以使用命令行参数指定使用并发方式“fab -P -z 5 ”。
运行下面命令即可批量执行启动、停止、查询状态操作

fab set_hosts start|stop|status

Fabric自动化运维工具实现远程SSH部署及系统管理   

使用Fabric部署网站应用 

使用 Vagrant 和 Fabric 用于集成测试

Fabric:Python远程部署工具

CentOS/Ubuntu下安装Python-Pip和Fabric 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/cfe44f8e3139b89ea40cf047ad64793f.html