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(二)
「 文章如果对你有帮助,请点个赞哦^^ 」 
若无特殊注明,文章均为本站原创或整理发布。
转载请注明本文地址:https://om.fangxiaoxiong.com/2911.html