Fabric v2中如何使用get方法从多主机获取文件?
解决Fabric v2多主机下载文件覆盖问题
当然支持啦!你遇到的问题是因为默认情况下,ctx.get() 会把所有主机的文件都下载到本地同一个路径,后面主机的文件会直接覆盖前面的。要保留每台主机的独立文件,只需要在下载时给文件加上对应主机的标识即可。
修改你的fabfile代码如下:
from invoke import task @task def getresult(ctx): # 用当前主机名重命名本地文件,避免多主机文件互相覆盖 local_filename = f'result_{ctx.host}.txt' ctx.get('result.txt', local=local_filename)
执行原命令 fab -H host1 host2 host3 getresult 之后,本地就会生成 result_host1.txt、result_host2.txt、result_host3.txt 三个独立文件,分别对应每台主机的结果文件。
Fabric v2确实没有在基础API里自动处理多主机文件的重命名逻辑,它更偏向让开发者灵活控制文件路径;而Fabric v1可能默认会将文件下载到以主机名命名的子目录中,或者有类似的自动区分机制。不过v2通过ctx.host就能轻松获取当前执行任务的主机名,手动实现区分也很简单。
内容的提问来源于stack exchange,提问作者Tom Cornebize
相关产品推荐
相关产品推荐

