Fix bugs
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 11 Mar 2013 22:21:55 +0000 (18:21 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Mon, 11 Mar 2013 22:21:55 +0000 (18:21 -0400)
PLC/Methods/AddSliceToNodes.py
PLC/Slices.py
config/default_config

index 1db307c..ff6ec5c 100644 (file)
@@ -57,7 +57,6 @@ class AddSliceToNodes(Method):
             # allow users at site to add node to slice, ignoring whitelist
             node.check_whitelist(slice, self.caller)
             if slice['slice_id'] not in node['slice_ids']:
-                tags = sliver_tags.get(node['node_id'])
                 slice.add_node(node, commit = False)
 
         slice.sync()
index cf1dc86..6c60b4d 100644 (file)
@@ -119,11 +119,7 @@ class Slice(AlchemyObj):
                                               'node_id': node['node_id']})
             slice_node.sync()
 
-    def spawn_instance(self, nodes, caller):
-        # defaults
-        default_image = self.api.config.nova_defualt_image
-        defualt_flavor = self.api.config.nova_default_flavor
-
+    def spawn_instances(self, nodes, caller):
         # use the caller's nova keypair
         keypairs = self.api.client_shell.nova.keypairs.list()
         if not keypairs:
@@ -150,26 +146,50 @@ class Slice(AlchemyObj):
             sliver_tags[node_id][slice_tag['tagname']] = slice_tag 
 
         def get_image(node):
-            if sliver_tags[node['node_id']].get('image'):
-                image = sliver_tags[node['node_id']].get('image')
-            else:
-                image = default_image
+            image = self.api.config.nova_default_image
+            slice_image = sliver_tags[None].get('image')
+            sliver_image = sliver_tags[node['node_id']].get('image') 
+            if sliver_image is not None:   # sliver tag
+                image = sliver_image.get('value')
+            elif slice_image is not None:     # sliver tag
+                image = slice_image.get('value')
+            return image
 
         def get_flavor(node):
-            if sliver_tags[node['node_id']].get('flavor'):
-                flavor = sliver_tags[node['node_id']].get('flavor')
-            else:
-                flavor = default_image            
+            flavor = self.api.config.nova_default_flavor
+            slice_flavor = sliver_tags[None].get('flavor')
+            sliver_flavor = sliver_tags[node['node_id']].get('flavor')
+            if sliver_flavor is not None:  # sliver tag
+                flavor = sliver_flavor.get('value') 
+            elif slice_flavor is not None:   # slice tag
+                flavor = slice_flavor.get('value')
+
+            return flavor
 
-        for node in node:
+        def get_security_group(node):
+            security_group = self.api.config.nova_default_security_group
+            slice_security_group = sliver_tags[None].get('security_group')
+            sliver_security_group = sliver_tags[node['node_id']].get('security_group')
+            if sliver_security_group is not None:  # sliver tag
+                security_group = slice_security_group.get('value')
+            elif slice_security_group is not None:   # slice tag
+                security_group = slice_security_group.get('value')
+            return security_group
+
+        for node in nodes:
             if self['slice_id'] not in node['slice_ids']:
                 image = get_image(node)
                 flavor = get_flavor(node)
-                flavor_id = api.client_shell.nova.flavors.find(name=flavor)
-                image_id = api.client_shell.glance.get_image(name=image)
-                api.client_shell.nova.servers.create(flavor=flavor_id,
+                security_group = get_security_group(node)
+                flavor_id = self.api.client_shell.nova.flavors.find(name=flavor)
+                images = self.api.client_shell.glance.get_images(name=image)
+                if not images:
+                    raise PLCInvalidArgument('Image bot found')
+                image_id = images[0]['id']
+                self.api.client_shell.nova.servers.create(flavor=flavor_id,
                                                      image=image_id,
                                                      key_name = key_name,
+                                                     security_group = security_group,
                                                      files=files,
                                                      name=self['name'])              
  
index 84a20c4..0ba356a 100644 (file)
@@ -18,6 +18,7 @@ admin_tenant=admin
 url=http://localhost:5000/v2.0/
 default_image=None
 default_flavor=m1.small
+default_security_group=default
 
 [db]
 user=plcuser