使用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字符串采用这种格式: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自动化你的任务相关推荐
- 15 - 使用 Fabric 自动化部署
在 使用 Nginx 和 Gunicorn 部署 Django 博客 中,我们通过手工方式将代码部署到了服务器.整个过程涉及到十几条命令,输了 N 个字符.一旦我们本地的代码有更新,整个过程又得重复来 ...
- python开发自动化创建一个任务下发到手机_如何利用Fabric自动化你的任务
首先让我们首先看一个例子.我们知道在*NIX下面,uname命令是查看系统的发行版. 可以写这样一个Fabric脚本: from fabric.api import run def host_type ...
- Python3 模块 -- Fabric自动化模版
安装 pip3 install fabric3 创建软连接 find / -type f -name "fab" /usr/local/python3/bin/fab ln -s ...
- Diango博客--18.使用 Fabric 自动化部署 Django 项目
文章目录 1.本地安装 Fabric 2.部署过程回顾 3.完善项目配置 4.修改 BASE_DIR 配置项 5.设置 Supervisor 环境变量 6.编写 Fabric 脚本 7.执行 Fabr ...
- 使用 Fabric 自动化部署 Django 项目
作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在上一篇教程中,我们通过手工方式将代码部署到了服务器.整个过程涉及到十几条命令,输了 ...
- Python自动化运维工具-Fabric部署及使用总结
使用shell命令进行复杂的运维时,代码往往变得复杂难懂,而使用python脚本语言来编写运维程序,就相当于开发普通的应用一样,所以维护和扩展都比较简单,更重要的是python运维工具fabric能自 ...
- Linux集群和自动化运维
Linux/Unix技术丛书 Linux集群和自动化运维 余洪春 著 图书在版编目(CIP)数据 Linux集群和自动化运维/余洪春著. -北京:机械工业出版社,2016.8 (Linux/Unix技 ...
- python有哪些方向、应该怎么学-大牛5大方向分析,完整Python 学习路线墙裂推荐!...
Python的学习,知识涵盖极为广泛,对不同应用目标的学习,进阶的路线有很大的差异,下面由小博,也就是我!给大家带来了干货知识点.有什么问题可以交流~ 分别从常见的测试运维,大数据处理,金融分析,机器 ...
- 项目部署,环境搭建(pip/ makefile)
2019独角兽企业重金招聘Python工程师标准>>> 1 python包管理--pip pip search 你想要的包 # 查询相关包 pip install 包名 [==版本号 ...
最新文章
- ashx是什么文件,如何创建
- 在ISA Server 2004中发布×××服务器
- 4.5 偏斜类-机器学习笔记-斯坦福吴恩达教授
- NIO : selector、channel、buffer的实例
- Tkinter的Message组件
- 如何编译Linux kernel
- android简单小项目实例_300行C代码打造简单的闹钟小程序,适合初学C++同学练手的项目...
- 好用的eclipse快捷键
- 我的世界Java种子大全_种子(世界生成)
- homelede软路由设置方法_软路由LEDE折腾overlay分区扩容之路
- Android移动应用技术打地鼠小游戏(简单App实现)——学习成果
- 腾讯辟谣心悦3玩家“特权”;共享充电宝陷入生死危机
- 大咖面对面 | 喵奏@国家建筑师:梦回大宋,一起来做河里人
- 跟我一起学MiniOA:第一章 1.4 Richfaces控件(连载)
- 解决nasm汇编gdb无法单步调试
- php 字符串放到数组中,在PHP中将字符串转换为数组(Converting string into array in php)...
- 数据结构与算法学习(第九天)(系列结束)
- 【RTX操作系统教程】第4章 RTX操作系统介绍
- win10 计算机组件,win10系统删除那些不必要组件的操作步骤
- InterSystems IRIS、IRIS for Health和HealthShare Health Connect的2021.1版本的预览版现在已经发布!...