source: trunk/packages/sipb-xen-remote-server/files/usr/sbin/sipb-xen-remote-listvms @ 558

Last change on this file since 558 was 558, checked in by andersk, 16 years ago

Open remctl pipes in parallel.

  • Property svn:executable set to *
File size: 1.0 KB
Line 
1#!/usr/bin/env python2.5
2
3"""
4Collates the results of listvms from multiple VM servers.  Part of the xvm
5suite.
6"""
7
8from itertools import chain
9from subprocess import CalledProcessError, PIPE, Popen
10from sys import argv, stdout
11from yaml import safe_dump, safe_load
12
13###
14
15def main(argv):
16  # Query each of the server for their VMs.
17  # TODO get `servers` from a real list of all the VM hosts (instead of
18  # hardcoding the list here)
19  servers = [ 'black-mesa.mit.edu', 'sx-blade-2.mit.edu' ]
20  # XXX
21  pipes = [ Popen(['remctl', server, 'remote', 'web', 'listvms'], stdout=PIPE)
22            for server in servers ]
23  outputs = [ p.communicate()[0] for p in pipes ]
24  for p in pipes:
25    if p.returncode != 0: raise CalledProcessError(p.returncode, cmd)
26  results = [ safe_load(o) for o in outputs ]
27  results = filter( lambda x: x is not None, results )
28
29  # Merge the results and print.
30  merged = {}
31  for result in results: merged.update(result)
32  print safe_dump(merged, default_flow_style=False)
33
34if __name__ == '__main__':
35  main(argv)
36
37# vim:et:sw=2:ts=2
Note: See TracBrowser for help on using the repository browser.