#!/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 " 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