remote: proxy control requests on running VMs to right host
[invirt/packages/invirt-remote.git] / files / usr / sbin / sipb-xen-remote-control
1 #!/usr/bin/python
2 """
3 Sends remctl commands about a running VM to the host it's running on.
4 """
5
6 from subprocess import PIPE, Popen, call
7 import sys
8 import yaml
9
10 def main(argv):
11     if len(argv) < 3:
12         print >>sys.stderr, "usage: sipb-xen-remote-control <machine> <command>"
13         return 2
14     machine_name = argv[1]
15     command = argv[2]
16
17     p = Popen(['/usr/sbin/sipb-xen-remote-proxy-web', 'listvms'], stdout=PIPE)
18     output = p.communicate()[0]
19     if p.returncode != 0:
20         raise RuntimeError("Command '%s' returned non-zero exit status %d"
21                            % ('sipb-xen-remote-proxy-web', p.returncode)) 
22     vms = yaml.load(output, yaml.CSafeLoader)
23
24     if machine_name not in vms:
25         print >>sys.stderr, "machine '%s' is not on" % machine_name
26         return 2
27     host = vms[machine_name]['host']
28
29     return call(['remctl', host, 'remote', 'control'] + argv[1:])
30
31 if __name__ == '__main__':
32     sys.exit(main(sys.argv))
33
34 # vim:et:sw=4:ts=4