如何利用Fabric自动化你的任务
首先让我们首先看一个例子。我们知道在*NIX下面, 可以写这样一个Fabric脚本: from fabric.api import run def host_type(): run('uname -s') 将上面的脚本保存为fabfile.py,就可以通过 $ fab -H localhost,linuxbox host_type [localhost] run: uname -s [localhost] out: Darwin [linuxbox] run: uname -s [linuxbox] out: Linux 执行过程中可能需要你输入系统密码。 安装 如果你看到这里了,说明你开始对Fabric感兴趣了。但是上述操作在你那里无法执行,因为你还没有安装Fabric。安装Fabric很简单,可以用 任务函数 很好,安装Fabric并没有难住你。可能你已经成功的执行了前面的任务,现在让我们更深入一些。 Fabric中的任务就是一个python函数,姑且让我们称之为“任务函数”。既然是python函数,那么对函数的一些用法也适用于任务函数。比如传递参数、互相调用、返回值等等。 首先看一个传递参数的例子: def hello(name="world"): print("Hello %s!" % name) 在执行任务的时候,可以通过 $ fab hello:name=Holbrook Hello Holbrook! 组合任务的例子如下: from fabric.api import run def host_type(): run('uname -s') def hello(name="world"): print("Hello %s!" % name) def composite(name="world"): hello(name) host_type() Fabric提供的命令 前面我们见过了fabric.api模块中的 如下: from fabric.api import local def 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还提供了很多的命令,比如文件操作等。 管理服务器连接 前面的例子中,都需要在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 mytask:hosts="host1;host2" 为了更方便的执行批量任务,Fabric中还定义了Role,有兴趣可以阅读其官方文档。 管理SSH密码、用户、端口 尽管更推荐使用SSH公钥认证,但是Fabric还是提供了管理密码的机制。Fabric提供了两层密码。 如果你的server有相同的密码,可以在 上面的host字符串采用这种格式:username@hostname:port。所以,在指定ssh密码的同时,也就指定了ssh用户。同密码一样,你也可以在 使用Fabric,你可以管理一系列host的SSH连接(包括主机名,用户,密码),定义一系列的任务函数,然后灵活的指定在哪些host上执行哪些任务。这非常使用于需要管理大量host的场景,比如运维,私有云管理,应用自动化部署等。 总结 本文只是一篇入门文档,远没有体现出Fabric的强大。实际上,Fabric还包括大量的功能,比如Role的定义,远程交互及异常处理,并发执行,文件操作等,并且不仅仅局限于命令行方式,可以在你的应用中调用Fabric。 以上就是本文的全部内容了,希望本文的内容能够引起你对Fabric的兴趣,并在你的实际应用中解决问题。如果有疑问大家可以留言交流。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |