当我使用Fabric管理数十台服务器时,我经常不关心每台服务器上运行的命令的细节,而是想整理来自每台主机的一小部分信息,并将其呈现在摘要中结束。
Fabric是否支持此功能? (我搜索文档无济于事,但也许我错过了一些东西)。
否则我想可以手动聚合这些信息,然后添加一个退出处理程序,但这感觉就像是一个常见的用例。
作为一个例子,我有一些脚本在许多服务器上进行一些基本的安全检查,我想在最后创建一个报告,而不是滚动每个服务器的输出。我不想限制Fabric的输出,因为如果有问题我想回滚以确定它。
答案 0 :(得分:3)
现在可能有点过时了,自从你提出这个问题以来,Fabric肯定已经发展了很多......但是,正如摩根所说,你基本上只需要一个包装脚本来包含主力,然后它就会#39 ; s"只是Python"从那里。在execution model文档中简要介绍了这一点。
例如,您可能会想到包装"正常运行时间" (但显然,这可能会变得更加复杂):
@parallel
def _get_uptime():
'''Retrieve and return uptime for each host'''
with hide('stdout'):
up = run( 'uptime' )
return( up.rstrip() )
@runs_once
def uptime_sorted():
'''System: System uptime (sorted) - Use parallel for best effect'''
print( cyan( "[%(host)s] Executing on %(host)s as %(user)s" % env ) )
system_uptimes = execute( _get_uptime )
for sys,up in sorted( system_uptimes.iteritems() ):
print "%s: %s" % ( sys, up )
这使uptime_sorted成为您的输入任务。和_get_uptime完成获取数据并返回数据的所有工作。
答案 1 :(得分:2)
它只是python,所以你可以打印任何你喜欢的东西,以及让你自己的装饰师包装任务并吐出来。尽管如此,核心和贡献中没有任何东西可以做到这一点。