当前位置:  开发笔记 > 编程语言 > 正文

如何使Fabric执行遵循env.hosts列表顺序?

如何解决《如何使Fabric执行遵循env.hosts列表顺序?》经验,为你挑选了1个好方法。

我有以下fabfile.py:

from fabric.api import env, run

host1 = '192.168.200.181'
host2 = '192.168.200.182'
host3 = '192.168.200.183'

env.hosts = [host1, host2, host3]

def df_h():
    run("df -h | grep sda3")

我得到以下输出:

[192.168.200.181] run: df -h | grep sda3
[192.168.200.181] out: /dev/sda3             365G  180G  185G  50% /usr/local/nwe
[192.168.200.183] run: df -h | grep sda3
[192.168.200.183] out: /dev/sda3             365G   41G  324G  12% /usr/local/nwe
[192.168.200.182] run: df -h | grep sda3
[192.168.200.182] out: /dev/sda3             365G   87G  279G  24% /usr/local/nwe

Done.
Disconnecting from 192.168.200.182... done.
Disconnecting from 192.168.200.181... done.
Disconnecting from 192.168.200.183... done.

请注意,执行顺序与env.hosts规范不同.

为什么这样工作?有没有办法使执行顺序与env.hosts列表中指定的相同?



1> Travis Brads..:

不保留订单的确切原因是env.hosts可以指定要操作的主机的三个"级别" - env.hosts,命令行和每个功能 - 它们合并在一起.在fabric/main.py上线309,你可以看到他们所使用的set()类型以消除主机的三种可能的名单重复.由于set()没有订单,主机将以"随机"顺序作为列表返回.

这是方法的一个很好的理由.这是从列表中删除重复项的非常有效的机制,对于结构来说,顺序无关紧要.您要求fabric在各种主机上执行一系列完全并行的原子操作.根据并行原子动作的本质,顺序不会影响动作成功执行的能力.如果订单确实很重要,那么就需要采用不同的策略,结构将不再是工作的正确工具.

也就是说,您是否需要按顺序进行这些操作?也许如果你遇到某种由执行命令引起的问题,我们可以帮助你解决这个问题.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有