fix AttributeError
[sfa.git] / sfa / openstack / osaggregate.py
index 5cfe86a..a40abc0 100644 (file)
@@ -1,3 +1,5 @@
+import base64
+
 from nova.exception import ImageNotFound
 from nova.api.ec2.cloud import CloudController
 from sfa.util.faults import SfaAPIError
@@ -164,15 +166,15 @@ class OSAggregate:
                     self.driver.shell.db.key_pair_destroy(username, key.name)
 
 
-    def create_security_group(self, slicename, fw_rules):
-        group_name = slicename
+    def create_security_group(self, group_name, fw_rules=[]):
         security_group = SecurityGroup(self.driver)
         security_group.create_security_group(group_name)
         for rule in fw_rules:
-            security_group.add_rule_to_group(group_name, rule.get('protocol'), 
-                                             rule.get('cidr_ip'), 
-                                             rule.get('port_range'), 
-                                             rule.get('icmp_type_code'))
+            security_group.add_rule_to_group(group_name, 
+                                             protocol = rule.get('protocol'), 
+                                             cidr_ip = rule.get('cidr_ip'), 
+                                             port_range = rule.get('port_range'), 
+                                             icmp_type_code = rule.get('icmp_type_code'))
 
     def add_rule_to_security_group(self, group_name, **kwds):
         security_group = SecurityGroup(self.driver)
@@ -227,7 +229,14 @@ class OSAggregate:
             if isinstance(instance_types, list):
                 # iterate over sliver/instance types
                 for instance_type in instance_types:
-                    group_name = self.create_security_group(slicename, instance_type.get('fw_rules', []))
+                    fw_rules = instance_type.get('fw_rules', [])
+                    # Each sliver get's its own security group.  
+                    # Keep security group names unique by appending some random 
+                    # characters on end.
+                    group_name = "_".join([slicename, 
+                                           instance_type['name'],
+                                           base64.b64encode(os.urandom(6))])  
+                    self.create_security_group(group_name, fw_rules)
                     ami_id = default_ami_id
                     aki_id = default_aki_id
                     ari_id = default_ari_id
@@ -248,3 +257,28 @@ class OSAggregate:
                                           user_data=pubkeys, 
                                           group_name=group_name)
 
+
+    def delete_instances(self, project_name):
+        project = self.driver.shell.get_project(project_name)
+        if not project:
+            return 1
+        instances = self.driver.shell.db.instance_get_all_by_project(project_name)
+        security_group_manager = SecurityGroup(self)
+        for instance in instances:
+            # deleate this instance's security groups
+            for security_group in instance.security_groups:
+                # dont delete the default security group
+                if security_group.name != 'default': 
+                    security_group_manager.delete_security_group(security_group.name)
+            # destroy instance
+            self.driver.shell.db.instance_destroy(instance.instance_id)
+        return 1
+
+    def stop_instances(self, project_name):
+        instances = self.driver.shell.db.instance_get_all_by_project(project_name)
+        for instance in instances:
+            self.driver.shell.db.instance_stop(instance.instance_id)
+        return 1
+
+    def update_instances(self, project_name):
+        pass