Fabric实战

Fabric简介

fabric是基于python实现的ssh命令行工具,可以实现对服务器的远程shell命令,它是在paramiko库的基础上做了进一步的封装,功能更强大。

fabric官网:http://www.fabfile.org/

Fabric安装

pip install fabric  # pip安装

在centos 6.5系统上直接pip安装会有版本的问题:
[[email protected] home]# fab -h
Traceback (most recent call last):
  File "/usr/bin/fab", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in <module>
    working_set.require(__requires__)
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: paramiko>=1.10

解决方法:
[[email protected] home]# pip uninstall fabric paramiko
[[email protected] home]# pip install paramiko==1.10
[[email protected] home]# pip install fabric
[[email protected] home]# fab -help  # centos 6.5上的Crypto库版本太低的问题,可以忽略不计
/usr/lib64/python2.6/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.
  _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", PowmInsecureWarning)
Usage: fab [options] <command>[:arg1,arg2=val2,host=foo,hosts=‘h1;h2‘,...] ...

解决方法:
[[email protected] home]# vim /usr/lib64/python2.6/site-packages/Crypto/Util/number.py      # 大概56、57行处,注释掉这两行代码
       56 if _fastmath is not None and not _fastmath.HAVE_DECL_MPZ_POWM_SEC:
       57     _warn("Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.", Pow     mInsecureWarning)

[[email protected] home]# fab -help   # 现在就不会有warning了
Usage: fab [options] <command>[:arg1,arg2=val2,host=foo,hosts=‘h1;h2‘,...] ...

注:fabric源码安装依赖第三方的setuptools、Crypto、paramiko包的支持

入门例子

[[email protected] home]# mkdir -p fabric   # 创建fabric的开发目录
[[email protected] home]# cd fabric/
[[email protected] fabric]# pwd
/home/fabric

[[email protected] fabric]# vim fabfile.py     # 编写fabfile文件
#!/usr/bin/env python
from fabric.api import run,env,parallel
env.hosts = [                                    # 定义hosts
        ‘[email protected]‘,
        ‘[email protected]‘
        ]
env.password = ‘99cloud‘              # root密码
@parallel(pool_size=5)                  # 并发执行
def host_type():
   run(‘uname -s‘)                           # run方法可以执行shell命令
   
[[email protected] fabric]# fab host_type                            #   执行fab命令
[[email protected]] Executing task ‘host_type‘
[[email protected]] Executing task ‘host_type‘
[[email protected]] run: uname -s
[[email protected]] run: uname -s
[[email protected]3] out: Linux
[[email protected]] out: 
[[email protected]] out: Linux
[[email protected]] out: 
Done.

fab常用参数

-l:显示定义好的任务函数名
-f:fab入口文件,默认入口文件名是fabfile.py
-g:指定网关(中转)设备,比如堡垒机IP
-H:指定目标主机,多台主机用逗号隔开
-P:异步并行方式执行多主机任务,默认串行执行
-R:指定role,以role区分不同任务执行
-t:设置主机连接超时时间(单位:秒)
-T:设置远程主机命令执行超时时间(单位:秒)
-w:命令执行失败发出告警,而不是默认终止任务

fabfile编写

env对象的可以对fabfile进行全局设定。
env.host    定义目标主机,用IP或主机名,如env.hosts = [‘172.16.0.1‘,‘172.16.0.2‘]
env.exclude_hosts    排除指定主机,如env.exclude_hosts = [‘172.16.0.250‘]
env.user    定义用户名,如env.user = ‘root‘
env.password    定义密码,如env.password = ‘xxxxxx‘
env.passwords   与password区别在于不同主机不同密码的应用场景,配置passwords时需要配置用户、主机、端口等信息,如:env.passwords = {
                          ‘[email protected]‘: ‘xxx‘,
                          ‘[email protected]‘: ‘xxxxx‘
                                    }
env.gateway    定义网关(堡垒机)IP,如env.gateway = ‘172.16.0.254‘
env.age    自定义全局变量,格式: env.+ 变量名称,如 env.age = 
env.roledefs 定义角色分组,如web组与db组主机区分开来,如:
env.roledefs = {
    ‘webservers‘: [‘172.16.0.1‘, ‘172.16.0.2‘],
    ‘dbservers‘: [‘172.16.0.10‘, ‘172.16.0.11‘]
}
引用的时候,使用python修饰符的形式进行引用,env.roledefs不要和env.hosts共用

Fabric常用API

fabric提供了很强大的fabric.api命令集

1. 直接执行 shell 命令
# run(‘cat /var/crawl/client.xml|grep \‘)
# run(‘cmd 2′)
# run(‘cmd 3′)

2. 切换目录并执行
# with cd(‘/var/crawl’):
# run(‘echo hi >>test.txt’)

3. 判断文件或者目录是否存在
# ifexists(‘var/crawl/client.xml’):
# print ‘Config file exists’
# else:
# print ‘Config file not exist’

4. 从远端服务器下载文件
#get(‘/remote/path/to/file’,‘/local/path/’)

5. 上传文件到远端服务器
#put(‘/local/path/to/file’,‘/remote/path’)

6. 嵌套运行
# with prefix(‘cd~/shark-0.9.1/bin/’):
# with prefix(‘chmod +x *.sh’):
# run(‘shark-shell.sh’)

7. sudo
# sudo(“mkdir/var/www/new_docroot”, user=”www-data”)

8. 获取返回值并执行命令
# files = run(‘ls’)
# run(‘ls -l’, files)

9.   lcd  切换本地目录,如 lcd(‘/home‘)
10. prompt 获得用户输入信息,如prompt(‘please input user password:‘)
11. confirm 获得提示信息确认,如confirm(‘Ok[Y/N]?‘)
12. reboot 重启远程主机,如 reboot()
13  @task  函数修饰符,标识的函数为fab可调用的
14  @runs_once  函数修饰符,标识的函数只会执行一次
15  @parallel(pool_size=200)  函数标识符,标识的函数可以并发执行

参考

刘天斯 《python自动化运维技术与最佳实践》

http://blog.csdn.net/sijiazhaiyuan/article/details/23884873  运维工具fabric使用总结

时间: 2024-11-04 17:29:01

Fabric实战的相关文章

学习Hyperledger Fabric 实战联盟链

第1章 区块链技术基础本章介绍了区块链技术的相关基础技术要点,纯技术理论角度阐释区块链底层相关概念及所用技术 第2章 Hyperledger Fabric入门本章简单介绍了Hyperledger组织相关的区块链框架及工具,以及Fabric相关的项目介绍,并搭建了第一个Fabric区块链网络,让大家能够快速体验区块链的魅力 第3章 Hyperledger Fabric系统架构本章概括了Fabric的体系架构,包括服务组件,网络拓扑以及Fabric的典型交易流程,让大家对Fabric先有一个整体的概

【fabric实战指南二】Fabric v1.0 部署过程原理详解

区块链兄弟社区,区块链技术专业问答先行者,中国区块链技术爱好者聚集地 作者:吴寿鹤 来源:区块链兄弟 原文链接:http://www.blockchainbrother.com/article/18 著权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 编译fabric tools 我们会编译以下几个工具: github.com/hyperledger/fabric/common/configtx/tool/configtxgen github.com/hyperledger/fa

Hyperledger Fabric 实战(十二): Fabric 源码本地调试

借助开发网络调试 fabric 源码本地调试 准备工作 IDE Goland Go 1.9.7 fabric-samples 模块 chaincode-docker-devmode fabric 源码 步骤 添加本地域名 127.0.0.1 peer 127.0.0.1 orderer 用 ide 打开 $GOPATH 下的fabric源码目录 在源码目录下添加 dev-network 把 sampleconfig 下的所有文件复制到 dev-network 修改 core.yaml 中 fil

Web自动化测试 Selenium基础到企业应用

如需下述哪一个课程,加QQ: 3475362830,非免费,几大洋,非诚勿扰! java (Java仿微信全栈 高性能后台+移动客户端 )NettySpringboot仿微信聊天全栈实战 从0开发到上线部署(完整版) HBase+SpringBoot实战分布式文件存储 Java并发编程与高并发解决方案(完整无密) IT段子手详解MyBatis遇到Spring 秒学Java SSM开发大众点评 难度中级 Activiti6(1).0工作流引擎深度解析与实战 HBase+SpringBoot实战分布

HyperLeger Fabric开发(九)——HyperLeger Fabric部署实战(单机)

HyperLeger Fabric开发(九)--HyperLeger Fabric部署实战(单机) 系统环境:RHEL 7.3操作系统Fabric release 1.3 一.crypto-config.yaml文件 1.Orderer节点组织 (1)单节点 OrdererOrgs: - Name: Orderer Domain: example.com Specs: - Hostname: orderer (2)多节点 OrdererOrgs: ??- Name: Orderer ????Do

实战:区块链hyperledger fabric 初体验 - 3: 链码实例安装、实例化、调用及代码

本文链码实例为Fabric 官方实例examples/chaincode/go/chaincode_example02,实现简单的转账功能 进入到cli容器里面 $ docker exec -it fabric-cli bash 1. 链码安装 以在org1, peer0 为例 1.1 设置环境变量 export CORE_PEER_LOCALMSPID=Org2MSPexport CORE_PEER_ADDRESS=peer1.org2.example.com:7051export CORE_

实战:区块链hyperledger fabric 初体验 - 2: 测试网络

1.make gen_config generate the crypto-config and channel-artifacts. $ hyperledger/docker-compose-files/hyperledger_fabric/v1.0.5 $ make gen_config 2.进入到cli容器里面 $ docker exec -it fabric-cli bash 3.Create Application Channel with default name of busine

&lt;zz&gt;PYTHON FABRIC实现远程操作和部署

from http://www.cnblogs.com/liujianzuo888/articles/6230691.html fabric title是开发,但是同时要干开发测试还有运维的活 (o(╯□╰)o) 近期接手越来越多的东西,发布和运维的工作相当机械,加上频率还蛮高,导致时间浪费还是优点多. 修复bug什么的,测试,提交版本库(2分钟),ssh到测试环境pull部署(2分钟),rsync到线上机器A,B,C,D,E(1分钟),分别ssh到ABCDE五台机器,逐一重启(8-10分钟)

Python网络编程实战之一个人开发环境搭建

本节介绍在Debian下利用Python进行网络编程时,需要安装的一些实用的工具包. 0x01  安装开发必备软件包 $ sudo aptitude -y install build-essential     ##"-y"的作用是:在安装过程中,如果遇到Y或N的提问,一律以Yes作为默认的答案 $ sudo aptitude -y install libsqlite3-dev $ sudo aptitude -y install libreadline6-dev $ sudo apt