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

问题描述 投票:1回答:1

我有一个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。

python fabric
1个回答
0
投票

在Fabric v2中,get 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)

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

© www.soinside.com 2019 - 2024. All rights reserved.