5

当我使用 Fabric 管理数十台服务器时,我通常不关心在每台服务器上运行的命令的细节,而是想整理来自每台主机的少量信息,并在最后进行总结。

Fabric 本身是否支持此功能?(我搜索了文档无济于事,但也许我错过了一些东西)。

否则我想可以手动聚合这些信息,然后添加一个退出处理程序,但这感觉像是一个常见的用例。

例如,我有一些脚本可以在多个服务器上进行一些基本的安全检查,我想在最后创建一个报告,而不是滚动浏览每个服务器的输出。我不想限制 Fabric 的输出,因为如果有问题我想回滚以查明它。

4

2 回答 2

3

现在,这可能有点过时了,自从您提出这个问题以来,Fabric 肯定已经发展了很多……但是,正如 Morgan 所说,您基本上只需要一个包装脚本来包含主力,然后它就是来自的“只是 Python”那里。这在执行模型文档中有简要说明。

例如,您可能会想到包装“正常运行时间”之类的一种方式(尽管显然,这可能会变得更加复杂):

@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 完成所有获取数据并返回数据的工作。

于 2015-03-17T22:51:27.317 回答
2

它只是 python,所以你可以打印任何你想要的东西,也可以制作你自己的装饰器来包装任务并将其吐出。就目前而言,尽管核心或贡献中没有任何东西可以做到这一点。

于 2012-05-29T22:09:44.453 回答