转:使用Fabric自动化你的任务

转:http://www.cnblogs.com/holbrook/archive/2012/03/05/2380398.html

fabric是什么?

Fabric是一个Python库,可以通过SSH在多个host上批量执行任务。你可以编写任务脚本,然后通过Fabric在本地就可以使用SSH在大量远程服务器上自动运行。这些功能非常适合应用的自动化部署,或者执行系统管理任务。
让我们首先看一个例子。我们知道在*NIX下面,uname命令是查看系统的发行版。可以写这样一个Fabric脚本:

from fabric.api import rundef host_type():    run(‘uname -s‘)

将上面的脚本保存为fabfile.py,就可以通过fab命令在多个主机上执行host_type脚本了:
$ fab -H localhost,linuxbox host_type
[localhost] run: uname -s
[localhost] out: Darwin
[linuxbox] run: uname -s
[linuxbox] out: Linux

执行过程中可能需要你输入系统密码。

安装

如果你看到这里了,说明你开始对Fabric感兴趣了。但是上述操作在你那里无法执行,因为你还没有安装Fabric。安装Fabric很简单,可以用pip或者easy_install,也可以下载原代码安装。

任务函数

很好,安装Fabric并没有难住你。可能你已经成功的执行了前面的任务,现在让我们更深入一些。

Fabric中的任务就是一个python函数,姑且让我们称之为“任务函数”。既然是python函数,那么对函数的一些用法也适用于任务函数。比如传递参数、互相调用、返回值等等。首先看一个传递参数的例子:

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

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

组合任务的例子如下:

from fabric.api import rundef host_type():    run(‘uname -s‘)

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

def composite(name="world"):    hello(name)    host_type()

Fabric提供的命令

前面我们见过了fabric.api模块中的run函数,其功能是在远端主机上执行命令。fabric.api中还提供了local函数,用于执行本地(Fabric所在的主机)命令。如下:

from fabric.api import localdef lslocal():    local(‘ls‘)

类似远端命令和本地命令,Fabric也区分远端目录和本地目录。Fabric提供的对远端和本地目录的操作分别是cd和lcd。如果你用过命令行的ftp,这很容易理解。让我们看一个例子:

def filepath():    remote_dir = ‘/opt/xxx‘    with cd(remote_dir):        run("touch README")

上面代码的功能是进入远端的/opt/xxx目录,并创建一个README文件。

Fabric还提供了很多的命令,比如文件操作等,可以参考Fabric的operations模块

管理服务器连接

前面的例子中,都需要在fab命令行参数中指定server。当要管理大量服务器时很麻烦。Fabric提供了环境变量的字典env,其中就包含了hosts字典项,可以定义需要连接的server。如下:

from fabric.api import env, run

env.hosts = [‘host1‘, ‘host2‘]def mytask():    run(‘ls /var/www‘)

也可以为每个任务单独指定要执行该任务的host列表:

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中指定的两个host执行mytask任务了。如果你懒得写函数,在fab命令行中指定也是一样的:
fab mytask:hosts="host1;host2"

为了更方便的执行批量任务,Fabric中还定义了Role,有兴趣可以阅读其官方文档。

管理SSH密码、用户、端口

尽管更推荐使用SSH公钥认证,但是Fabric还是提供了管理密码的机制。Fabric提供了两层密码。
如果你的server有相同的密码,可以在env.password中设置默认的密码;如果server密码不同,还可以在env.passwords中设置(host,password)对,为每个server设置单独的ssh密码。
上面的host字符串采用这种格式:[email protected]:port。所以,在指定ssh密码的同时,也就指定了ssh用户。同密码一样,你也可以在env.user中指定一个默认的用户。如果都没有指定,执行fab命令时会提示你输入密码。

小结

使用Fabric,你可以管理一系列host的SSH连接(包括主机名,用户,密码),定义一系列的任务函数,然后灵活的指定在哪些host上执行哪些任务。这非常使用于需要管理大量host的场景,比如运维,私有云管理,应用自动化部署等。
本文只是一篇入门文档,远没有体现出Fabric的强大。实际上,Fabric还包括大量的功能,比如Role的定义,远程交互及异常处理,并发执行,文件操作等,并且不仅仅局限于命令行方式,可以在你的应用中调用Fabric。

时间: 2024-08-30 02:34:40

转:使用Fabric自动化你的任务的相关文章

fabric自动化运维应用

最近看了一个fabric,果然是好东西,突然想利用fabric做一个代码版半自动化的运维管理程序,很想全自动化,可是本人前端太菜了,要花大把时间去搞前端,实在没时间,哎,只能简单用python先写一个自己玩一下,感觉一下, 逻辑架构如下: 刚学python,不熟先写着玩一下,如有问题还望路过的高手,指教一下,写完后会把源码上传到github上,供大家参考.待续.... fabric自动化运维应用

利用fabric自动化发布代码

这几天,在测试环境开发python程序,但是生产的测试环境上和测试环境不一样,发布的程序涉及到3个角色,node,web和monitor,里面的配置文件要根据生产环境进行替换,用手工替换几次以后,感觉太过麻烦了,就想利用fabric进行编写脚本自动化.为什么想到用fabric?因为入门简单,文档多! 脚本的思路大致说下: 1)在本地服务器通过svn checkout命令把最新的代码,下载下来! 2)然后对里面的配置文件进行个性化的替换,然后打包成 tar.gz形式 3)分发到不同角色的服务器上,

fabric自动化部署django

使用fabric部署django应用 使用fabric部署django应用 本文是我的网站易读中文网自动化部署的脚本实现,以下代码在ubuntu和debian中测试通过 由于网站使用的是python技术,鉴于python的强大,在自自动部署上有fabric这个一个强大的工具,阅读本文除了略懂python,fabric,还需要安装fabtools,安装这个是为了简化一些基本的操作(为不太懂linux的人找的借口而已),里面封装了非常多的命令.下面我一步一步的将我网站的自动部署过程写下来 首先是fa

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

Fabric是基于python(2.5-2.7)库和命令行来实现SSH远程应用部署及系统管理的工具,使用它,在批量管理远程主机时,不需要一台一台的输入密码登陆,可以把所以主机的用户名和密码写在一个文件里面来操作,下文中有具体实例. Fabric的安装 yum install python-setuptools python-dev* pycrypto wget https://pypi.python.org/packages/source/F/Fabric/Fabric-1.10.0.tar.g

fabric自动化安装mysql-server

1.创建文件auto_install_mysql.py vim auto_install_mysql.py --------------------------------------------> 1 #!/usr/bin/env python 2 3 from fabric.colors import * 4 from fabric.api import * 5 env.user='root' 6 env.roledefs = { 7 'dbserver': ['172.16.1.207']

使用Fabric自动化安装zabbix服务器端和客户端,附安装脚本

前一段是公司的一个项目环境,由以前的单节点环境升级到到现在集群环境,并且服务器都在同一个机房,考虑部署了一套zabbix监控系统,由于第一次部署的服务器有点多,所以将安装流程写成了脚本模式,分别是server端和client端,方便安装,采用的是Python的Fabric模块写的脚本:分享一下,希望对初次批量部署监控的朋友有帮助. 脚本注意事项: (1.虚拟主机路径,最好使用 nginx or apache 默认路径,安装成功以后在手动修改: (2.php参数需要手动调整,未调整安装以后会有警告

利用Python Fabric配置主机间SSH互信和添加公钥

本文主要讲述如何利用Python的Fabric模块编写一个脚本用于配置多个主机间SSH互信以及如何将管理员自己的公钥批量添加到多个主机中. 脚本说明 该脚本只提供如题所述的少量功能,用于帮助熟悉Python的Fabric和SSH几项简单的基本配置,原本的目的是想通过Python和Fabric实现对主机进行一些批量操作,如完成主机的初始化等.因为SSH的配置具有通用性和必要性,所以便有了此文,希望对Linux运维和使用Python.Fabric自动化部署感兴趣的人有所帮助. 该脚本将继续维护,直至

Linux系统运维与架构设计

一 本章概览 介绍Linux系统运维与架构设计的方方面面 二 Linux基础入门 认识计算机核心硬件和服务器 Linux发展历史.系统组成.应用领域以及发行版 搭建运维环境:VMWareWorkStation.SecureCRT的使用 Linux系统的基本使用 Shell入门以及命令概述 三 Linux系统管理 文件目录管理 用户管理 权限管理 VIM编辑器的使用 文档压缩打包 程序包管理 网络管理 文件系统管理 内存管理 系统管理(监控.环境变量) 安全管理(selinux,iptables)

django开发环境搭建(参考流程)

django开发环境搭建(参考流程) 2013-08-08 01:09:06 分类: LINUX 原文地址:django开发环境搭建(参考流程) 作者:bailiangcn 对于一个初学者,在实际的开发环境中,应该采用什么的样的工具来开发django呢? 我想环境至少应该具备的特性有: 多版本python环境的支持 版本控制 自动测试框架 数据库支持迁移 部署的自动化 参考文档 主要参考的文档-英文 virtualenv介绍 VirtualEnv 和Pip 构建Python的虚拟工作环境 使用V