From: Greg Price Date: Sun, 22 Jun 2008 00:49:47 +0000 (-0400) Subject: remote: proxy control requests on running VMs to right host X-Git-Tag: sipb-xen-remote-server/0.2~8 X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-remote.git/commitdiff_plain/2176cbdb63ce8467dcb5282f7f59a14e5d6154b3 remote: proxy control requests on running VMs to right host svn path=/trunk/packages/sipb-xen-remote-server/; revision=625 --- diff --git a/files/usr/sbin/sipb-xen-remote-control b/files/usr/sbin/sipb-xen-remote-control new file mode 100755 index 0000000..1ad8721 --- /dev/null +++ b/files/usr/sbin/sipb-xen-remote-control @@ -0,0 +1,34 @@ +#!/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: sipb-xen-remote-control " + return 2 + machine_name = argv[1] + command = argv[2] + + p = Popen(['/usr/sbin/sipb-xen-remote-proxy-web', 'listvms'], stdout=PIPE) + output = p.communicate()[0] + if p.returncode != 0: + raise RuntimeError("Command '%s' returned non-zero exit status %d" + % ('sipb-xen-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 2 + host = vms[machine_name]['host'] + + return call(['remctl', host, 'remote', 'control'] + argv[1:]) + +if __name__ == '__main__': + sys.exit(main(sys.argv)) + +# vim:et:sw=4:ts=4 diff --git a/files/usr/sbin/sipb-xen-remote-proxy b/files/usr/sbin/sipb-xen-remote-proxy index cb81f08..91dceda 100755 --- a/files/usr/sbin/sipb-xen-remote-proxy +++ b/files/usr/sbin/sipb-xen-remote-proxy @@ -13,6 +13,11 @@ esac case "$TYPE/$SERVICE" in web/listvms ) shift; sipb-xen-remote-listvms "$@" ;; + control/create ) + remctl black-mesa remote "$TYPE" "$@" ;; + control/* ) + # Everything but create must go where the VM is already running. + sipb-xen-remote-control "$@" ;; * ) remctl black-mesa remote "$TYPE" "$@" ;; esac