资讯专栏INFORMATION COLUMN

Fabric 实践:local 并发执行

kviccn / 693人阅读

摘要:环境服务器目标服务器组一共台服务器需求我需要把我服务器上的某些文件同步到集群,但是我又需要并发执行,而不是通过循环或者是串行的方式。

环境:
fabric 服务器:10.10.1.1
目标服务器组:test.com (10.10.1.2-21)一共 20 台服务器

需求:

我需要把我 fabric 服务器上的某些文件同步到 test.com 集群,但是我又需要并发执行,而不是通过 for 循环或者是串行的方式。

先直接上代码再针对性的解释:

#!/usr/bin/python env
#-*- coding: utf-8 -*-

from fabric.api import env
from fabric.api import run
from fabric.api import put
from fabric.api import execute
from fabric.api import roles
from fabric.api import parallel
from fabric.api import cd
from fabric.api import lcd
from fabric.api import task
from fabric.api import local
from fabric.api import settings
from fabric.api import hide
from fabric.colors import red ### 使输出有色彩
from fabric.colors import green

### 下面这个角色在我实际的使用中,我是不需要填写的,因为我实际使用是从 CMDB 动态获取集群的服务器列表的。为了测试,所以弄了下面的

env.user = "test"
env.password = "test"
env.roledefs = {
   "test.com":["10.10.1.2","10.10.1.3","10.10.1.4","10.10.1.5",......],# 省略下,
}


######### reload data and rsync data###########
def rsync_test(host): ### 传入 host 主机 IP 参数
    with settings(hide("running","stdout"), warn_only=True): ## hide 是表示不输入信息到 sreen,可以写 "everything","stderr","running" 等等
        with lcd("/tmp/"):
           result = local("rsync -Pav test "%s":/tmp/" % host) ### 根据不同的主机 rsync 到不同的主机服务器
           if result.return_code == 0: ##可以根据上面数据是否成功执行下一步操作。
               print (green("-------------------------"))
               print (red("*******主机 %s 同步数据成功******" % host))
               print (green("-------------------------"))
           else:
               print (green("-------------------------"))
               print (red("*******主机 %s 同步数据失败******" % host))
               print (green("-------------------------"))

@task
@roles("test.com")
@parallel(pool_size=16)
def execute_rsync():
    execute(rsync_test, env.host) ### 读取 @roles("test.com") 里面的主机,并把 host 传递给 rsync_test 函数,并且 @parallel(pool_size=16) 来并发


@roles("test.com")
@parallel(pool_size=5)
def echo_hello():
    run("echo "hello world!"")

执行任务:

fab execute_rsync

输出是:

#### 省略抹除了一些信息

同步数据成功******
-------------------------

Done.

real    0m1.263s
user    0m0.793s
sys     0m0.689s

如果没有使用并发的话,执行时间为:

-------------------------

Done.

real    0m3.680s
user    0m0.664s
sys     0m0.512s

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37483.html

相关文章

  • SSH连接与自动化部署工具paramiko与Fabric

    摘要:是基于实现的远程安全连接,支持认证及密钥方法。利用函数发送到,通过函数获取回显。如下全局属性设定对象的作用是定义的全局设定,支持多个属性及自定义属性。相比确实简化了不少。出现异常时,发出警告,继续执行,不要终止。 paramiko paramiko是基于Python实现的SSH2远程安全连接,支持认证及密钥方法。可以实现远程命令执行,文件传输,中间SSH代理等功能,相对于Pexpect...

    ermaoL 评论0 收藏0
  • Hyperledger Fabric周周记:起源

    摘要:作为系列的新篇章,我选择从超级账本的开始。为什么选择超级账本作为起点我在之前的文章中曾说过会从超级账本入手开始区块链的学习和实践,同时也给出了个人的理由。检查事务提议的响应。为了降低区块链应用的开发难度,超级账本项目又引入了。 本着以教带学,Learning by Doing的想法,我于上周加入了Bob组织的HiBlock区块链技术布道群。这个群可不太好混,群规要求每个成员必需每周有输...

    hatlonely 评论0 收藏0
  • 在Centos6.3安装Python Fabric运行环境

    摘要:背景在下安装的时候,总是安装不成功,在执行命令的时候,总是会抛出错误。解决方案安装替代系统默认的再安装包系统默认自带的版本是下载安装包在的官网下载页面下载的源码包。在下安装就省事很多。附上执行简单部署的一份代码例子,仅供参考。 背景 在Centos6.3下安装fabric的时候,总是安装不成功,在执行fab命令的时候,总是会抛出错误。 Traceback (most recent ...

    HackerShell 评论0 收藏0
  • 区块链开发中使用的最流行的编程语言

    摘要:我们目前正处于一个新兴的区块链开发行业中。,一种在以太坊开发人员中流行的新的简单编程语言,因为它是用于开发以太坊智能合约的语言。它是全球至少万开发人员使用的世界上最流行的编程语言之一。以太坊,主要是针对工程师使用进行区块链以太坊开发的详解。 我们目前正处于一个新兴的区块链开发行业中。区块链技术处于初期阶段,然而这种颠覆性技术已经成功地风靡全球,并且最近经历了一场与众不同的繁荣。由于许多...

    2shou 评论0 收藏0

发表评论

0条评论

kviccn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<