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字符串采用这种格式:username@hostname:port。所以,在指定ssh密码的同时,也就指定了ssh用户。同密码一样,你也可以在env.user中指定一个默认的用户。如果都没有指定,执行fab命令时会提示你输入密码。

小结

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

转载于:https://www.cnblogs.com/sideny/p/3388283.html

使用Fabric自动化你的任务相关推荐

  1. 15 - 使用 Fabric 自动化部署

    在 使用 Nginx 和 Gunicorn 部署 Django 博客 中,我们通过手工方式将代码部署到了服务器.整个过程涉及到十几条命令,输了 N 个字符.一旦我们本地的代码有更新,整个过程又得重复来 ...

  2. python开发自动化创建一个任务下发到手机_如何利用Fabric自动化你的任务

    首先让我们首先看一个例子.我们知道在*NIX下面,uname命令是查看系统的发行版. 可以写这样一个Fabric脚本: from fabric.api import run def host_type ...

  3. Python3 模块 -- Fabric自动化模版

    安装 pip3 install fabric3 创建软连接 find / -type f -name "fab" /usr/local/python3/bin/fab ln -s ...

  4. Diango博客--18.使用 Fabric 自动化部署 Django 项目

    文章目录 1.本地安装 Fabric 2.部署过程回顾 3.完善项目配置 4.修改 BASE_DIR 配置项 5.设置 Supervisor 环境变量 6.编写 Fabric 脚本 7.执行 Fabr ...

  5. 使用 Fabric 自动化部署 Django 项目

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在上一篇教程中,我们通过手工方式将代码部署到了服务器.整个过程涉及到十几条命令,输了 ...

  6. Python自动化运维工具-Fabric部署及使用总结

    使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...

  7. Linux集群和自动化运维

    Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技 ...

  8. python有哪些方向、应该怎么学-大牛5大方向分析,完整Python 学习路线墙裂推荐!...

    Python的学习,知识涵盖极为广泛,对不同应用目标的学习,进阶的路线有很大的差异,下面由小博,也就是我!给大家带来了干货知识点.有什么问题可以交流~ 分别从常见的测试运维,大数据处理,金融分析,机器 ...

  9. 项目部署,环境搭建(pip/ makefile)

    2019独角兽企业重金招聘Python工程师标准>>> 1 python包管理--pip pip search 你想要的包 # 查询相关包 pip install 包名 [==版本号 ...

最新文章

  1. ashx是什么文件,如何创建
  2. 在ISA Server 2004中发布×××服务器
  3. 4.5 偏斜类-机器学习笔记-斯坦福吴恩达教授
  4. NIO : selector、channel、buffer的实例
  5. Tkinter的Message组件
  6. 如何编译Linux kernel
  7. android简单小项目实例_300行C代码打造简单的闹钟小程序,适合初学C++同学练手的项目...
  8. 好用的eclipse快捷键
  9. 我的世界Java种子大全_种子(世界生成)
  10. homelede软路由设置方法_软路由LEDE折腾overlay分区扩容之路
  11. Android移动应用技术打地鼠小游戏(简单App实现)——学习成果
  12. 腾讯辟谣心悦3玩家“特权”;共享充电宝陷入生死危机
  13. 大咖面对面 | 喵奏@国家建筑师:梦回大宋,一起来做河里人
  14. 跟我一起学MiniOA:第一章 1.4 Richfaces控件(连载)
  15. 解决nasm汇编gdb无法单步调试
  16. php 字符串放到数组中,在PHP中将字符串转换为数组(Converting string into array in php)...
  17. 数据结构与算法学习(第九天)(系列结束)
  18. 【RTX操作系统教程】第4章 RTX操作系统介绍
  19. win10 计算机组件,win10系统删除那些不必要组件的操作步骤
  20. InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现在已经发布!...

热门文章

  1. 8.2 matlab曲线对象和曲面对象(曲线对象、曲面对象、光照处理、图形对象的反射特性)
  2. Roman to Integer
  3. 合并两个有序链表(C++)
  4. 梯形积分法【OpenMP实现】多个版本
  5. 14.6 设置后台线程
  6. mysql报错3534_win7下安装MYSQL报错:MYSQL 服务无法启动的3534问题
  7. 设计模式之委派模式及适配器模式
  8. Laravel 多域名共享session
  9. (转)SSH批量分发管理非交互式expect
  10. Dynamic CRM 2013学习笔记(四十三)流程6 - 自定义流程活动