gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 02:35:36 25 4
gpt4 key购买 nike

我有以下 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 列表中指定的顺序相同?

最佳答案

未从 env.hosts 中保留顺序的确切原因是可以指定要操作的主机的三个“级别”——env.hosts、命令行和每个功能——合并在一起。在 line 309 上的 fabric/main.py 中,您可以看到他们使用 set() 类型来删除三个可能的主机列表中的重复项。由于 set() 没有顺序,主机将作为“随机”顺序的列表返回。

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

也就是说,是否有特定原因需要这些操作按顺序进行?或许,如果您因执行顺序而遇到某种问题,我们可以帮助您解决。

关于python - 如何使 Fabric 执行遵循 env.hosts 列表顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1956717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com