delete an instances security groups when deleting the instance
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 15 Aug 2012 23:44:15 +0000 (19:44 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Wed, 15 Aug 2012 23:44:15 +0000 (19:44 -0400)
sfa/openstack/nova_driver.py
sfa/openstack/osaggregate.py

index 3ddf783..d1d2c1a 100644 (file)
@@ -458,11 +458,13 @@ class NovaDriver(Driver):
 
     def delete_sliver (self, slice_urn, slice_hrn, creds, options):
         aggregate = OSAggregate(self)
+        tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
         project_name = hrn_to_os_slicename(slice_hrn)
-        return aggregate.delete_instances(project_name)   
+        return aggregate.delete_instances(project_name, tenant_name)   
 
     def update_sliver(self, slice_urn, slice_hrn, rspec, creds, options):
         name = hrn_to_os_slicename(slice_hrn)
+        tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
         aggregate = OSAggregate(self)
         return aggregate.update_instances(name)
     
@@ -473,9 +475,10 @@ class NovaDriver(Driver):
         return 1
 
     def stop_slice (self, slice_urn, slice_hrn, creds):
+        tenant_name = OSXrn(xrn=slice_hrn, type='slice').get_tenant_name()
         name = OSXrn(xrn=slice_urn).name
         aggregate = OSAggregate(self)
-        return aggregate.stop_instances(name) 
+        return aggregate.stop_instances(name, tenant_name
 
     def reset_slice (self, slice_urn, slice_hrn, creds):
         raise SfaNotImplemented ("reset_slice not available at this interface")
index 9018d2f..257edbc 100644 (file)
@@ -259,18 +259,18 @@ class OSAggregate:
             if not instances:
                 continue
             for instance in instances:
-                metadata = {}
-                flavor_id = self.driver.shell.nova_manager.flavors.find(name=instance['name'])
-                image = instance.get('disk_image')
-                if image and isinstance(image, list):
-                    image = image[0]
-                image_id = self.driver.shell.nova_manager.images.find(name=image['name'])
-                fw_rules = instance.get('fw_rules', [])
-                group_name = self.create_security_group(instance_name, fw_rules)
-                metadata['security_groups'] = group_name
-                if node.get('component_id'):
-                    metadata['component_id'] = node['component_id']
                 try: 
+                    metadata = {}
+                    flavor_id = self.driver.shell.nova_manager.flavors.find(name=instance['name'])
+                    image = instance.get('disk_image')
+                    if image and isinstance(image, list):
+                        image = image[0]
+                    image_id = self.driver.shell.nova_manager.images.find(name=image['name'])
+                    fw_rules = instance.get('fw_rules', [])
+                    group_name = self.create_security_group(instance_name, fw_rules)
+                    metadata['security_groups'] = group_name
+                    if node.get('component_id'):
+                        metadata['component_id'] = node['component_id']
                     self.driver.shell.nova_manager.servers.create(flavor=flavor_id,
                                                             image=image_id,
                                                             key_name = key_name,
@@ -283,7 +283,8 @@ class OSAggregate:
                            
 
 
-    def delete_instances(self, instance_name):
+    def delete_instances(self, instance_name, tenant_name):
+        self.driver.shell.nova_manager.connect(tenant=tenant_name)
         instances = self.driver.shell.nova_manager.servers.findall(name=instance_name)
         security_group_manager = SecurityGroup(self.driver)
         for instance in instances:
@@ -297,7 +298,8 @@ class OSAggregate:
             self.driver.shell.nova_manager.servers.delete(instance)
         return 1
 
-    def stop_instances(self, instance_name):
+    def stop_instances(self, instance_name, tenant_name):
+        self.driver.shell.nova_manager.connect(tenant=tenant_name)
         instances = self.driver.shell.nova_manager.servers.findall(name=instance_name)
         for instance in instances:
             self.driver.shell.nova_manager.servers.pause(instance)