#!/usr/bin/python

"""
Collates the results of listvms from multiple VM servers.  Part of the xvm
suite.
"""

from subprocess import PIPE, Popen
import sys
import yaml

###

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 RuntimeError("Command '%s' returned non-zero exit status %d"
                               % ('remctl', p.returncode)) 
    results = [yaml.load(o, yaml.CSafeLoader) 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 yaml.dump(merged, Dumper=yaml.CSafeDumper, default_flow_style=False)

if __name__ == '__main__':
    main(sys.argv)

# vim:et:sw=4:ts=4
