#!/usr/bin/python
"""
Sends remctl commands about a running VM to the host it's running on.
"""

from subprocess import PIPE, Popen, call
import sys
import yaml

def main(argv):
    if len(argv) < 3:
        print >>sys.stderr, "usage: invirt-remote-control <machine> <command>"
        return 2
    machine_name = argv[1]
    command = argv[2]

    p = Popen(['/usr/sbin/invirt-remote-proxy-web', 'listvms'], stdout=PIPE)
    output = p.communicate()[0]
    if p.returncode != 0:
        raise RuntimeError("Command '%s' returned non-zero exit status %d"
                           % ('invirt-remote-proxy-web', p.returncode)) 
    vms = yaml.load(output, yaml.CSafeLoader)

    if machine_name not in vms:
        print >>sys.stderr, "machine '%s' is not on" % machine_name
        return 1
    host = vms[machine_name]['host']

    p = Popen(['remctl', host, 'remote', 'control'] + argv[1:],
              stdout=PIPE, stderr=PIPE)
    (out, err) = p.communicate()
    if p.returncode == 1:
        print >>sys.stderr, "machine '%s' is not on" % machine_name
        return 1
    elif p.returncode == 34:
        print >>sys.stderr, "ERROR: invalid command"
        return 34
    sys.stderr.write(err)
    sys.stdout.write(out)
    return p.returncode

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

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