X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-remote.git/blobdiff_plain/d7f33e5a8eba8e45cb5ad588a644a5482e82f7d4:/files/usr/sbin/sipb-xen-remote-create..227cb65ae3d4b0fd6636700595df6f00b18d4f37:/files/usr/sbin/gitweb.js diff --git a/files/usr/sbin/sipb-xen-remote-create b/files/usr/sbin/sipb-xen-remote-create deleted file mode 100755 index f957a59..0000000 --- a/files/usr/sbin/sipb-xen-remote-create +++ /dev/null @@ -1,62 +0,0 @@ -#!/usr/bin/python - -""" -Picks a host to "create" (boot) a VM on, and does so. - -Current load-balancing algorithm: wherever there's more free RAM. - -TODO: use a lock to avoid creating the same VM twice in a race -""" - -from invirt.remote import bcast -from subprocess import PIPE, Popen, call -import sys -import yaml - -def choose_host(): - # Query each of the hosts. - # XXX will the output of 'xm info' always be parseable YAML? - results = bcast('info') - return max((int(o['free_memory']), s) for (s, o) in results)[1] - -def main(argv): - if len(argv) < 3: - print >> sys.stderr, "usage: sipb-xen-remote-create []" - return 2 - operation = argv[1] - machine_name = argv[2] - args = argv[3:] - - if operation == 'install': - options = dict(arg.split('=', 1) for arg in args) - valid_keys = set(('mirror', 'dist', 'arch', 'imagesize', 'noinstall')) - if not set(options.keys()).issubset(valid_keys): - print >> sys.stderr, "Invalid argument. Use the help command to see valid arguments to install" - return 1 - if any(' ' in val for val in options.values()): - print >> sys.stderr, "Arguments to the autoinstaller cannot contain spaces" - return 1 - - 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 in vms: - host = vms[machine_name]['host'] - print >> sys.stderr, ("machine '%s' is already running on host %s" - % (machine_name, host)) - return 1 - - host = choose_host() - print 'Creating on host %s...' % host - sys.stdout.flush() - return call(['remctl', host, 'remote', 'control', - machine_name, operation] + args) - -if __name__ == '__main__': - sys.exit(main(sys.argv)) - -# vim:et:sw=4:ts=4