Fabric入门

目录

前言

Fabric是一个用Python写的SSH连接工具,可用于应用开发、部署和系统管理。
我的项目需要使用SSH远程登录到服务器中执行某个命令,可以使用Fabric实现整个流程。但我只需要在一台服务器上执行命令,使用Fabric有些浪费,完全可以使用更轻的框架。好在Fabric很容易上手,就暂定用它执行命令。
以下内容来自Fabric的官方文档《Overview and Tutorial

什么是Fabric

Fabric提供一套SSH组件,包括Python库和命令行工具,用于应用开发和系统管理。简单说,Fabric有下面两种工具:

  • 通过命令行远程执行Python函数
  • 使用Python函数通过ssh远程执行shell命令

Hello, fab

创建一个fabfile.py文件

在命令行中使用fab命令运行

任务参数

为上面函数添加参数

运行,参数格式 :,=,….

下面方式具有同样效果

本地命令

使用{py}fabric.api.local{/py}函数在本机运行shell命令,从这里我们将开始看到Fabric的强大功能。
fabfile.py

运行结果如下

组织fabfile

比如分成多个子任务

输出与之前一样

故障

Fabirc检查命令操作的返回值,如果没有正常退出则终止。
在fabfile.py中加入一个肯定会出错的命令。

运行出错

可以看到,运行出错后,不再运行后续任务

故障处理

环境变量warn_only,可以将abort转为warning,并提供灵活的处理方式
fabfile

出错时,会根据用户输入决定是否运行后面的程序
运行
vagrant@precise64:/vagrant/sms_log_agent_monitor$ fab prepare_deploy
[localhost] local: date
2015年 02月 15日 星期日 07:10:39 UTC
[localhost] local: who
vagrant pts/0 2015-02-15 01:15 (10.0.2.2)
vagrant pts/1 2015-02-11 12:03 (10.0.2.2)
vagrant pts/2 2015-02-14 13:11 (10.0.2.2)
vagrant pts/4 2015-02-14 13:16 (10.0.2.2)
vagrant pts/5 2015-02-15 02:56 (10.0.2.2)
[localhost] local: asdagasdg
/bin/sh: 1: asdagasdg: not found
Warning: local() encountered an error (return code 127) while executing ‘asdagasdg’
Test failed. Continue anyway? [Y/n] Y
[localhost] local: uname -a
Linux precise64 3.8.0-44-generic #66~precise1-Ubuntu SMP Tue Jul 15 04:01:04 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
Done.

建立连接

Fabric最强大的功能,通过SSH远程执行任务
修改任务

执行任务,会提示输入host,使用ssh连接形式user@host:port

也可以在命令行中给出host。

运行结果

远程交互

Fabric可以与远端进行对话,看下面的例子
fabfile.py

运行

提前定义连接

最常见的方法,设置env.hosts列表
在fabfile模块头部设置env.hosts

运行

总结

本文介绍了Fabric的基本功能:

  • 定义任务,并用fab命令执行
  • 使用local运行本地命令
  • 使用settings修改环境变量
  • 处理命令出错,提醒用户,手动中止
  • 定义host列表,使用run远程执行命令。

附录

Python 3 中需要使用经过修改的 Fabric,使用如下语句安装: