自动化部署工具Fabric(一)

Fabric是对paramiko的封装,它依赖paramiko经行SSH交互。paramiko只是提供了SSH连接等一些库,具体依然需要我们自己处理。然而使用Fabric不需要自己处理SSH连接,任务分发等一些基础的工作,我们只需要专注于自己的需求上面。

Fabric的设计思路就是使用现成的API来完成所有的部署工作。如命令执行,文件上传,并行执行,异常处理等。

1.安装

注意:

Fabric1.x支持python(2.5~2.7),而Fabric2.x支持Python (2.7, 3.4+);

但是Fabric2.x移除了fabric.api,使用方法会有较大的差异,导入模块时会发生如下错误。

......
ModuleNotFoundError: No module named 'fabric.api'
pip install fabric3
#如果不指定fabric版本号将会默认安装fabric2
#默认安装路径可能在/usr/local/pythonx.x.x/bin/,需要自行创建软链接到/usr/bin/

本文环境:

[root@Ansible Python]# python --version
Python 3.7.7
[root@Ansible Python]# fab --version
Fabric3 1.14.post1
Paramiko 2.7.2

2.常用参数

-l:查看任务列表
-f:指定fabfile文件,默认调用fabfile.py
-g:指定网络设备,如堡垒机
-H:指定目标服务器
-P:并行执行任务,默认为串行
-R:以角色名区分不同的服务
-t:连接超时时间
-w:任务执行失败时警告,默认结束
--:Fabric提供的便捷操作,可以实现不屑一行代码进行远程操作

3.使用

Fabric提供了一个名为env的字典,该字典保存了相关的配置信息,如env.hosts保存主机信息,env.port保存SSH服务端口号,env.user保存连接远程服务器用户名。

创建一个py文件,该文件包含一到多个函数,这些函数称为task。

#fabfile
from fabric.api import run,sudo,env
env.hosts = ['192.168.244.155']

def hostname():
    run('hostname')

def ls(path='.'):
    sudo('ls {}'.format(path))
#使用
[root@Ansible Python]# fab -f fab1.py -l
Available commands:

    hostname
    ls

[root@Ansible Python]# fab -f fab1.py hostname
[192.168.244.155] Executing task 'hostname'
[192.168.244.155] run: hostname
[192.168.244.155] out: localhost.localdomain
...

4.Fabrict提供的命令

1)run:在远程服务器上执行shell命令

run("mkdir /root/test")

2)sudo:与run类似,使用管理员权限执行shell命令

注:如果执行命令后有一个常驻服务进程,需要设置pty=False,从而避免Fabric退出导致进程退出。

sudo("/etc/init.d/mysqld restart",pty=False)

3)local:用与执行本地命令

4)get:从远程服务器下载文件

get(remote_path="/root/file",local_path="./file")

5)put:将本地文件上传到远程服务器,可以通过mode参数修改权限

get("/local/file","/remote/file",mode=0755)

6)reboot:重启服务器

reboot()
#10秒后重启
reboot(wait=10)

7)prompt:执行任务中进行交互

prompt("Input something:")

5.Fabric提供的上下文管理器

1)cd:切换远程目录

with cd("..."):
run("...")

2)lcd:切换本地目录

3)path:配置远程服务器的PATH环境变量

append:默认行为,PATH=$PATH:<path>

prepend:PATH=<path>:$PATH

replace:PATH=<path>

4)prefix:前缀

#每个run命令执行之前都先执行prefix的命令
with cd("..."):
with prefix("...")
run("...")
run("...")

5)shell_env:设置shell脚本环境变量

6)setting:用于临时覆盖env变量

7)remote_tunnel:通过ssh的端口转发建立转发通道

8)hide:隐藏指定日志类型的输出,共七种日志类型。status,aborts,warnings,running,stdout,stderr,user。

with cd("..."):
hide("stdout,running")
run("...")

9)show:显示指定类型输出

10)quiet:隐藏全部输出

11)warn_only=True:命令执行失败时,仅显示告警,不会中断。

输出的封装:

output:stdout,stderr

everything:stdout,stderr,warnings,running,user

commands:stdout,running


文章二:自动化部署工具Fabric(二)


「 文章如果对你有帮助,请点个赞哦^^ 」 

0