设为首页 收藏本站
查看: 595|回复: 0

[经验分享] Python 系统管理利器Fabric

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-7 08:18:23 | 显示全部楼层 |阅读模式
一、简介
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/ ... ease-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程序的命令行入口,提供了丰富的参数调用



在这里分享一个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'
#}
############################################



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-110328-1-1.html 上篇帖子: python 日志入库mongodb 下篇帖子: python-selenium Page Object设计模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表