Python 系统管理利器Fabric

简介:

一、简介

Fabric是基于Python 2.5及以上版本实现的SSH命令行工具,简化了SSH了应用程序部署及系统管理任务,它提供了系统基础的操作组件,可以实现本地或远程shell命令,包括命令执行文件上传下载及完整执行日志输出等功能。Fabric在paramiko的基础上做了更高一层的封装,操作起来会更简单.


Fabric官方文档:http://www.fabfile.org/

API文档:http://docs.fabfile.org/en/1.10/

基础案例文档:http://docs.fabfile.org/en/1.10/tutorial.html

Fabric中文文档:http://fabric-docs-cn.readthedocs.org/zh_CN/latest/


二、安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(1) 安装epel源
rpm -ivh http: //dl .fedoraproject.org /pub/epel/6/x86_64/epel-release-6-8 .noarch.rpm
sed  -i  's/^#//'  /etc/yum .repos.d /epel .repo
sed  -i  's/mirrorlist/#mirrorlist/'  /etc/yum .repos.d /epel .repo
 
(2)安装依赖包
yum  install  gcc gcc-c++ python-devel openssl-devel openssl zlin zlib-devel -y
 
(3)安装pip
yum  install  python-pip -y
 
(4)安装fabric
pip  install  fabric
 
(5)测试fabric是否安装正确
python -c  'import fabric'


三、Fabric的应用

注意事项:fab命令引用默认文件名为fabfile.py,如果使用非默认文件名称,则需要通过-f来执行,如

fab -H 192.168.1.100,192.168.1.105 -f host_type.py host_type

如果管理机与目标主机未配置秘钥认证信任,将会提示输入目标主机对应账号登录密码。

fab作为fabric程序的命令行入口,提供了丰富的参数调用


工作中的应用场景:由于目前我们用的都是云平台,比如阿里云、腾讯云、之前还用过一段时间的ucloud等等,用起来效果还是挺好的,有时候为了更方便的管理,对系统进行优化,安装一些agent(zabbix,saltstack,network等),这个时候我们就可以用fabric进行操作,感觉效果挺好的。

由于fabric是单线程工作的,之前我想将其改成多线程,但是没有成功,如果有朋友应该怎么修改,也请麻烦告诉我一声,谢谢啦,多交朋友多脉圈,哈哈


在这里分享一个febric的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env python
#encoding: utf-8
 
from fabric.api  import  *  
from fabric.colors  import  *
from fabric.context_managers  import  *  
from fabric.contrib.console  import  confirm  
import  os
   
#定义目标主机信息  
env .user= 'root'  
env .hosts=[ '192.168.0.141' ,]  
env .password= 'redhat'  
 
#定义目录结构
LocalDir =  "/home/saltroot/gameroot"
RemoteDir =  "/home/saltclient/gameroot/"
LocalFile = os.path. join (LocalDir, "script.tar.gz" )
RemoteFile = os.path. join (RemoteDir, "script.tar.gz" )
  
#打包文件  
def tar_task():  
     with lcd(LocalDir):  
         local ( "tar -zcf script.tar.gz script" )  
   
#上传文件  
def put_task():  
     run( "mkdir -p %s"  % RemoteDir)
     with settings(warn_only=True):        #put上传出现异常时继续执行,非终止
         result = put(LocalFile,RemoteFile)  
     if  result.failed and not confirm( "put file failed, Continue[Y/N]?" ):  
         abort( "Aborting file put task!" )    #出现异常时,确认是否继续,(Y继续)
   
#校对文件  
def check_task():  
     with settings(warn_only=True):  
         lmd5= local ( "md5sum %s"  % LocalFile,capture=True). split ( ' ' )[0]  
         rmd5=run( "md5sum %s"  % RemoteFile). split ( ' ' )[0]  
     if  lmd5==rmd5:                #对比本地及远程文件的md5信息
         print yellow( "OK" )
     else :  
         print red( "ERROR" )
 
#初始化
def agent_task():
     with  cd (RemoteDir):
         run( "tar -zxf script.tar.gz" )
         with  cd ( "script/" ):
             run( "./init.sh" )
 
#4个功能一起实现  
@task                          #限定只有go函数对fab可见
def go():  
     print yellow( "program start ..." )
     tar_task()  
     put_task()  
     check_task()  
     agent_task()
     print green( "program sucessful ..." )
 
     
############################################
# 命令执行方式
# fab go
# 额外的命令
# @roles('new') 
# def show():
#    print green('success')
#    print red('fail')
#    print yellow('yellow')
#定义业务角色
#env.user='root'  
#env.roledefs = {
#    'new': ['192.168.0.100',],
#    'ios': ['192.168.0.130','192.168.0.101'],
#    'Andorid': ['192.168.0.200', '192.168.0.201', '192.168.0.230']
#}
#
#env.passwords = {
#    'root@192.168.0.100:22': 'redhat',
#    'root@192.168.0.120:22': 'redhat'
#}
############################################




     本文转自zys467754239 51CTO博客,原文链接:http://blog.51cto.com/467754239/1692077,如需转载请自行联系原作者



相关文章
|
3月前
|
机器学习/深度学习 监控 算法
基于mediapipe深度学习的手势数字识别系统python源码
本内容涵盖手势识别算法的相关资料,包括:1. 算法运行效果预览(无水印完整程序);2. 软件版本与配置环境说明,提供Python运行环境安装步骤;3. 部分核心代码,完整版含中文注释及操作视频;4. 算法理论概述,详解Mediapipe框架在手势识别中的应用。Mediapipe采用模块化设计,包含Calculator Graph、Packet和Subgraph等核心组件,支持实时处理任务,广泛应用于虚拟现实、智能监控等领域。
|
28天前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
126 3
|
6月前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的商城管理系统源码+运行步骤
基于Python+Vue开发的商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的网上商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
194 7
|
2月前
|
算法 数据可视化 数据挖掘
基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
本内容展示了基于EM算法的高斯混合模型(GMM)聚类实现,包含完整Python代码、运行效果图及理论解析。程序使用三维数据进行演示,涵盖误差计算、模型参数更新、结果可视化等关键步骤,并附有详细注释与操作视频,适合学习EM算法与GMM模型的原理及应用。
|
前端开发 关系型数据库 MySQL
基于python“花开富贵”花园管理系统
感谢大学同学的陪伴与帮助,在我独立编写毕业论文期间,大学同学的鼓励与耐心的帮助使得我少走很多弯路,节省毕业论文的编写时间,也让我有更多精力去完善我开发的系统。 在整个系统开发过程中,我周围的同学和朋友给了我很多意见,所以我很快就确认了系统的商业思想。在次,我由衷的向他们表示感激。
35 0
|
5月前
|
前端开发 JavaScript 关系型数据库
基于python的租房网站-房屋出租租赁系统(python+django+vue)源码+运行
该项目是基于python/django/vue开发的房屋租赁系统/租房平台,作为本学期的课程作业作品。欢迎大家提出宝贵建议。
159 6
|
5月前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的美容预约管理系统源码+运行
基于Python+Vue开发的美容预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的美容诊所预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
88 9
|
5月前
|
JavaScript 前端开发 关系型数据库
基于Python+Vue开发的体育场馆预约管理系统源码+运行
本项目为大学生课程设计作业,采用Python和Vue技术构建了一个体育场馆预约管理系统(实现前后端分离)。系统的主要目标在于帮助学生理解和掌握Python编程知识,同时培养其项目规划和开发能力。参与该项目的学习过程,学生能够在实际操作中锻炼技能,为未来的职业发展奠定良好的基础。
128 3
|
5月前
|
前端开发 JavaScript 关系型数据库
基于Python+Vue开发的摄影网上预约管理系统源码+运行
基于Python+Vue开发的摄影网上预约管理系统(前后端分离),影楼婚纱摄影,这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的在线摄影预约管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
92 8

热门文章

最新文章

推荐镜像

更多