如何在fabric v2中使用带有多个主机的get方法?

时间:2018-01-16 15:48:19

标签: python fabric

我有一个fabfile,可以在主机上运行多个任务。这导致在每个主机中创建文件result.txt

现在我想在本地获取所有这些文件。这就是我试过的:

from invoke import task
@task
def getresult(ctx):
    ctx.get('result.txt')

我跑步:

fab -H host1 host2 host3 getresult

最后,我的本地计算机中只有一个文件result.txt(它似乎是命令行最后一个主机的副本)。我想获得所有文件。

有没有办法用fabric v2做到这一点?我没有在文档中找到任何内容。似乎这在fabric v1中是可能的,但我不确定v2。

1 个答案:

答案 0 :(得分:0)

在Fabric v2中,获取API签名为:

get(remote, local=None, preserve_mode=True)

因此,当您没有指定必须在本地存储的名称时,它将使用与远程位置相同的名称。因此,它会被执行的每个主机覆盖,并且你最后会被最后一个主机覆盖。

解决此问题的一种方法是提及本地文件名并为其添加随机后缀或前缀。这样的事情。

from invoke import task
import random

@task
def getresult(ctx):
    ctx.get('result.txt', 'result%s.txt' % random.random()*100)

这样,每次执行时,它都会以唯一的名称存储文件。 如果您可以在方法中找到使用它的方法,甚至可以将主机名添加到文件中。