Open remctl pipes in parallel.
authorAnders Kaseorg <andersk@mit.edu>
Mon, 2 Jun 2008 06:41:25 +0000 (02:41 -0400)
committerAnders Kaseorg <andersk@mit.edu>
Mon, 2 Jun 2008 06:41:25 +0000 (02:41 -0400)
svn path=/trunk/packages/sipb-xen-remote-server/; revision=558

files/usr/sbin/sipb-xen-remote-listvms

index f9b3f36..172ca17 100755 (executable)
@@ -12,25 +12,18 @@ from yaml import safe_dump, safe_load
 
 ###
 
-def run(cmd):
-  """
-  Run the given command (a list of program and argument strings) and return the
-  stdout as a string, raising a CalledProcessError if the program exited with a
-  non-zero status.
-  """
-  p = Popen(cmd, stdout=PIPE)
-  stdout = p.communicate()[0]
-  if p.returncode != 0: raise CalledProcessError(p.returncode, cmd)
-  return stdout
-
 def main(argv):
   # Query each of the server for their VMs.
   # TODO get `servers` from a real list of all the VM hosts (instead of
   # hardcoding the list here)
   servers = [ 'black-mesa.mit.edu', 'sx-blade-2.mit.edu' ]
   # XXX
-  results = [ safe_load(run(['remctl', server, 'remote', 'web', 'listvms']))
-              for server in servers ]
+  pipes = [ Popen(['remctl', server, 'remote', 'web', 'listvms'], stdout=PIPE)
+            for server in servers ]
+  outputs = [ p.communicate()[0] for p in pipes ]
+  for p in pipes:
+    if p.returncode != 0: raise CalledProcessError(p.returncode, cmd)
+  results = [ safe_load(o) for o in outputs ]
   results = filter( lambda x: x is not None, results )
 
   # Merge the results and print.