xml data can either be an attribute in a element tag or many text nodes (this represe...
authorTony Mack <tmack@cs.princeton.edu>
Wed, 11 Mar 2009 16:16:10 +0000 (16:16 +0000)
committerTony Mack <tmack@cs.princeton.edu>
Wed, 11 Mar 2009 16:16:10 +0000 (16:16 +0000)
geni/aggregate.py

index 6c3d930..7e047e3 100644 (file)
@@ -4,6 +4,7 @@ import datetime
 import time
 import xmlrpclib
 
+from types import StringTypes, ListType
 from geni.util.geniserver import GeniServer
 from geni.util.geniclient import *
 from geni.util.cert import Keypair, Certificate
@@ -343,13 +344,18 @@ class Aggregate(GeniServer):
         slice = slices[0]
 
         # find out where this slice is currently running
-        nodes = self.shell.GetNodes(self.auth, slice['node_ids'], ['hostname'])
-        hostnames = [node['hostname'] for node in nodes]
+        nodelist = self.shell.GetNodes(self.auth, slice['node_ids'], ['hostname'])
+        hostnames = [node['hostname'] for node in nodelist]
 
         # get netspec details
         nodespecs = spec.getDictsByTagName('NodeSpec')
-        nodes = [nodespec['name'] for nodespec in nodespecs]    
-       
+        nodes = []
+        for nodespec in nodespecs:
+            if isinstance(nodespec['name'], list):
+                nodes.extend(nodespec['name'])
+            elif isinstance(nodespec['name'], StringTypes:
+                nodes.append(nodespec['name'])
+                
         # save slice state locally
         # we can assume that spec object has been validated so its safer to 
         # save this instead of the unvalidated rspec the user gave us