我有一个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。
在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)
这样,每次执行时,它都会以唯一的名称存储文件。如果可以在方法中找到使用它的方法,甚至可以将主机名添加到文件中。