#!/usr/bin/env python2.5 """ Collates the results of listvms from multiple VM servers. Part of the xvm suite. """ from itertools import chain from subprocess import CalledProcessError, PIPE, Popen from sys import argv, stdout from yaml import safe_dump, safe_load ### def main(argv): # Query each of the server for their VMs. # TODO get `servers` from a real list of all the VM hosts (instead of # hardcoding the list here) servers = [ 'black-mesa.mit.edu', 'sx-blade-2.mit.edu' ] # XXX pipes = [ Popen(['remctl', server, 'remote', 'web', 'listvms'], stdout=PIPE) for server in servers ] outputs = [ p.communicate()[0] for p in pipes ] for p in pipes: if p.returncode != 0: raise CalledProcessError(p.returncode, cmd) results = [ safe_load(o) for o in outputs ] results = filter( lambda x: x is not None, results ) # Merge the results and print. merged = {} for result in results: merged.update(result) print safe_dump(merged, default_flow_style=False) if __name__ == '__main__': main(argv) # vim:et:sw=2:ts=2