FABRIC远程批量管理(入门)-阿里云开发者社区

开发者社区> 技术小胖子> 正文

FABRIC远程批量管理(入门)

简介:
+关注继续查看

一、什么是fabric

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

    简单来说,它可以通过SSH在多个host上批量执行任务。你可以编写任务脚本,然后通过Fabric在本地就可以使用SSH在大量远程服务器上自动运行。这些功能非常适合应用的自动化部署,或者执行系统管理任务。

    

二、先看一个例子,用fabric实现批量修改机器密码:

    编写一个名字为fabfile.py的脚本:

$ vim fabfile.py

1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
from fabric.api import run
from fabric.context_managers import env
#指定需要修改密码的host
env.hosts = ['10.13.25.2','10.13.25.3','10.13.25.4']
env.user = 'root'
env.password = 'mypassword'
env.parallel = True
def chpasswd():
#用chpasswd修改用户密码
    run("echo 'root:newpassword'| chpasswd")

执行:$fab chpasswd

会看到以下返回结果,执行完成修改成功:

$ fab sysbench

[10.13.25.2] Executing task 'sysbench'

[10.13.25.3] Executing task 'sysbench'

[10.13.25.4] Executing task 'sysbench'

[10.13.25.4] run: echo 'root:newpassword'| chpasswd

[10.13.25.3] run: echo 'root:newpassword'| chpasswd

[10.13.25.2] run: echo 'root:newpassword'| chpasswd


Done.

会看到fabric的返回结果在前面都有相对应的IP地址,由于env.parallel的值为True,任务可以在多台机器上同时进行。

官方文档中建议,为了安全起见,最好是使用 SSH KEY 的方式来批量执行主机。

三、安装

    fabric的安装很简单,可以直接用镜像源中自带的包;

E.g.:

1
$sudo apt-get install fabric

官方的建议用pip或者easy_install(老版本,尤可用),需要先装python-pip;你也可以直接下载源码;

E.g.:

1
2
$sudo apt-get install python-pip
$sudo pip install fabric


四、fabric的使用

1、Fabric有默认的执行文件名"fabfile.py",也可以用-f参数指定;

E.g.:

fab -f chpasswd.py chpasswd

2、Fabric区分远程目录和本地目录,fabric提供的对远端和本地目录的操作分别是cd和lcd,我们可以用普通用户登陆上去pwd测试一下;

 E.g.:$ vim fabfile.py

1
2
3
4
5
6
7
8
9
10
#!/usr/bin/env python
from fabric.api import run
from fabric.context_managers import env
from fabric.context_managers import cd
env.hosts = ['10.13.25.2','10.13.25.3','10.13.25.4']
env.user = 'xjx'
env.password = 'xjx123'
env.parallel = True
def pwdtest():
    run('pwd')

$ fab pwdtest 

[10.13.25.2] Executing task 'pwdtest'

[10.13.25.3] Executing task 'pwdtest'

[10.13.25.4] Executing task 'pwdtest'

[10.13.25.4] run: pwd

[10.13.25.3] run: pwd

[10.13.25.2] run: pwd

[10.13.25.3] out: /home/xjx

[10.13.25.3] out:


[10.13.25.2] out: /home/xjx

[10.13.25.2] out:


[10.13.25.4] out: /home/xjx

[10.13.25.4] out:



Done.

可以看到默认登陆上去的路径是home目录,很容易被忽略这一点;如果想要切换目录引入'cd'命令,如下使用;

E.g切换到/usr/local目录:

1
with cd('/usr/local')

3、Fabric里的任务就是一个python函数,既然是python函数,那么对函数的一些用法也适用于任务函数。比如传递参数、互相调用、返回值等等;

1
2
def hello(name="world"):
    print("Hello %s!" % name)

在执行任务的时候,可以通过fab的命令行参数为任务函数传递参数:
$ fab hello:name=XJX

Hello XJX

4、环境字典

Fabric中通过一个Python字典的子类来设置环境,它是一个全局的单例 fabric.state.env ,包含在 fabric.api中。Fabric的大部分行为可以通过修改 env 变量来控制。如果不希望全局生效,可以通过 settings 上下文管理器来改变代码块的环境设置。env 可以像字典那样使用,同时也支持按属性方式访问。env 变量的完整列表见官方文档 Full list of env vars ,推荐使用 settings 和 cd 这样的上下文管理器来修改它们。

5、定义主机列表

主机字符串就是 user@host:port 形式的字符串, user 和/或 port 可以省略。 hosts 变量定义主机列表,还可以用roledefs 分组定义主机。

1
2
3
4
5
from fabric.api import env
env.roledefs = {
    'web': ['www1''www2''www3'],
    'dns': ['ns1''ns2'],
}

构造主机列表有多种方式:

a.可以通过命令行以全局的方式,使用 --hosts/-H 和 --roles/-R 参数。

1
2
3
4
from fabric.api import env, run
env.hosts.extend(['host3''host4'])
def mytask():
    run('ls /var/www')

fab -H host1,host2 mytask 将在 host1 、 host2 、 host3 、 host4 上执行 mytask 。


b.可以通过全局 env 。

1
2
3
4
from fabric.api import env, run
env.hosts = ['host1''host2']
def mytask():
    run('ls /var/www')

fab mytask 将在 host1 和 host2 上执行 mytask 。

c.

1
2
3
4
5
from fabric.api import env, run
def set_hosts():
    env.hosts = ['host1''host2']
    def mytask():
    run('ls /var/www')

fab set_hosts mytask 将先执行本地任务 set_hosts ,然后在两个主机上执行 mytask 。

6、local 执行本地shell命令。 run 执行远程命令;Fabric会自动处理错误,遇到错误时,默认和shell的行为相同。可以通过检查命令运行的结果来改变错误的处理方式;





      本文转自Jx战壕  51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1730780,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
智能媒体管理产品“文档标准型”使用介绍
智能媒体管理(Intelligent Media Management, IMM) 是阿里云的云服务,它通过 文档标准型 实例提供了 Cloud Native 架构的文档转换/预览功能,本文介绍功能使用、计费相关的配置。
1842 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5730 0
【项目管理】产品研发中使用原型的注意事项
软件原型以试探性的方式逐步逼近解决方案,它使需求更加真实,用例更加鲜活,是我们能进一步理解需求。但即使做一个简单的原型,也需要时间和资金。虽然原型可以降低软件项目失败的风险,但原型本身也会有风险。
633 0
13668
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载