Merge branch 'master' into sqlalchemy
[sfa.git] / sfa / openstack / osaggregate.py
index 7e6a53d..60e3d56 100644 (file)
@@ -5,6 +5,7 @@ from sfa.rspecs.elements.hardware_type import HardwareType
 from sfa.rspecs.elements.node import Node
 from sfa.rspecs.elements.sliver import Sliver
 from sfa.rspecs.elements.login import Login
+from sfa.rspecs.elements.disk_image import DiskImage
 from sfa.rspecs.elements.services import Services
 from sfa.util.xrn import Xrn
 from sfa.util.osxrn import OSXrn
@@ -28,7 +29,7 @@ class OSAggregate:
             # this is an isntance type dict
             name = instance['name']
             type = instance['name'] 
-        elif isinstnace(instance, nova.db.sqlalchemy.models.Instance):
+        elif isinstance(instance, nova.db.sqlalchemy.models.Instance):
             # this is an object that describes a running instance
             name = instance.display_name
             type = instance.instance_type.name
@@ -81,6 +82,20 @@ class OSAggregate:
         else:
             zones = [zone.name for zone in zones]
 
+        # available sliver/instance/vm types
+        instances = self.driver.shell.db.instance_type_get_all().values()
+        # available images
+        images = self.driver.shell.image_manager.detail()
+        disk_images = []
+        for image in images:
+            if image['container_format'] == 'ami': 
+                img = DiskImage()
+                img['name'] = image['name']
+                img['description'] = image['name']
+                img['os'] = image['name']
+                img['version'] = image['name']
+                disk_images.append(img)    
+        
         rspec_nodes = []
         for zone in zones:
             rspec_node = Node()
@@ -91,8 +106,12 @@ class OSAggregate:
             rspec_node['exclusive'] = 'false'
             rspec_node['hardware_types'] = [HardwareType({'name': 'plos-pc'}),
                                                 HardwareType({'name': 'pc'})]
-            instances = self.driver.shell.db.instance_type_get_all().values()
-            slivers = [self.instance_to_sliver(inst) for inst in instances]
+            slivers = []
+            for instance in instances:
+                sliver = self.instance_to_sliver(instance)
+                sliver['disk_images'] = disk_images
+                slivers.append(sliver)
+        
             rspec_node['slivers'] = slivers
             rspec_nodes.append(rspec_node) 
 
@@ -155,4 +174,12 @@ class OSAggregate:
                     self.driver.shell.db.key_pair_destroy(username, key.name)
             
     def verify_instances(self, slicename, rspec):
-        pass 
+        rsepc = RSpec(rspec)
+        nodes = rspec.version.get_nodes_with_slivers()
+        old_instances = self.driver.shell.db.instance_get_all_by_project(name)
+        for node in nodes:
+            for slivers in node.get('slivers', []):
+                pass
+                # get instance type
+                # get image
+                # start instance