打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用 Fabric 批量执行服务器任务 | vpsee.com

我们的服务器和虚拟机的环境配置都由 puppet 管理,但有时候需要临时执行某些任务和操作,比如同时更换500台服务器的密码、同时更新或者重启500台虚拟机、在特定几台服务器上添加或者一个用户、上传一个特定文件/脚本到1000台服务器等等。这些任务用 Puppet 可以做,但是不是最简洁的办法。我们需要一种工具能完成大量服务器上的批量操作,并且要简单可编程,Fabric 就是这样一个基于 Python 的服务器批量管理库/工具,Fabric 使用 ssh(通过 paramiko 库)在多个服务器上批量执行任务,我们只需要用 Python 编写这些任务脚本并指定要执行这些任务的服务器就可以了。

Fabric 依赖 paramiko,所以需要安装这两个:

$ sudo pip install fabric$ sudo pip install paramiko

编写一个简单的 Fabric 例子,在1台服务器上打印系统信息(uname -s):

$ vi fabfile.py#!/usr/bin/pythonfrom fabric.api import rundef host_os():    run('uname -s')

在 vpsee.com 这台主机(host)上使用 root 帐户执行上面的任务 host_os:

$ fab -H root@vpsee.com host_os[root@vpsee.com] Executing task 'host_os'[root@vpsee.com] run: uname -s[root@vpsee.com] Login password for 'root': [root@vpsee.com] out: LinuxDone.Disconnecting from root@vpsee.com... done.

来看一个更复杂点的例子,在多个服务器(grid00, grid02, …, grid05)上更换 root 密码(假设原密码是 root),注意加上 @parallel,这样任务是并行执行的,在大量服务器上会快很多:

#!/usr/bin/python# -*- coding: utf-8 -*-from fabric.api import *import stringfrom random import choiceimport socketimport paramikoenv.user = 'root'env.password = 'root'env.hosts = [ 'grid00', 'grid01', 'grid02', 'grid03', 'grid04', 'grid05']@task@paralleldef passwd(user, passwd=False):    with settings(hide('running', 'stdout', 'stderr'), warn_only=True):        if isup(env.host):            if not passwd:                passwd = genpass()            sudo("echo -e '%s\n%s' | passwd %s" % (passwd, passwd, user))def genpass(length=10):    return ''.join(choice(string.ascii_letters + string.digits) for _ in range(length))def isup(host):    print 'connecting host: %s' % host    timeout = socket.getdefaulttimeout()    socket.setdefaulttimeout(1)    up = True    try:        paramiko.Transport((host, 22))    except Exception, e:        up = False        print '%s down, %s' % (host, e)    finally:        socket.setdefaulttimeout(timeout)        return up

使用 fab -l 查看我们刚编写的 fabfile.py 里面的可用命令,这个命令就是那个函数名 def passwd(user, passwd=False):

$ fab -lAvailable commands:    passwd

使用这个命令批量更换 grid00-grid05 的 root 密码为 test,passwd 传递参数的时候接冒号,并且用户名和密码参数用逗号隔开:

$ fab passwd:root,test[grid00] Executing task 'passwd'[grid01] Executing task 'passwd'[grid02] Executing task 'passwd'[grid03] Executing task 'passwd'[grid04] Executing task 'passwd'[grid05] Executing task 'passwd'connecting host: grid05connecting host: grid04connecting host: grid02connecting host: grid03connecting host: grid01connecting host: grid00Done.

Fabric 的强大之处在于可以用 Python 编写各种任务(函数),这些任务可以指定到任何服务器上(通过 ssh),非常适合管理大量服务器、批量处理任务。另外 Fabric 工作方式非常简单容易理解,就是简单的 ssh 而已,没有内幕没有架构,不像其他工具什么客户端服务器端、什么中间代码、什么 DSL 领域专属语言(嗯,说的就是 puppet, chef)。Fabric 使用起来只需要懂点 Python 就可以了,不需要学命令、api、框架之类的。我们喜欢简单、容易理解的工具。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Python运维工具fabric
Python远程连接服务器用它就够了
局域网服务器
了解这几个python工具库运维自动化提效一倍
在CentOS5.5上安装和配置NFS4.0
python mysqldb 查询返回字典结构
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服