fix bugs in disk_image_to_rspec_object(), get_machine_image_details()
[sfa.git] / sfa / openstack / osaggregate.py
index b0249a6..cf5a3b4 100644 (file)
@@ -15,49 +15,49 @@ from sfa.rspecs.version_manager import VersionManager
 
 def disk_image_to_rspec_object(image):
     img = DiskImage()
-    img['name'] = image['name']
-    img['description'] = image['name']
-    img['os'] = image['name']
-    img['version'] = image['name']
+    img['name'] = image['ami']['name']
+    img['description'] = image['ami']['name']
+    img['os'] = image['ami']['name']
+    img['version'] = image['ami']['name']
     return img
     
 
+def instance_to_sliver(instance, slice_xrn=None):
+    # should include?
+    # * instance.image_ref
+    # * instance.kernel_id
+    # * instance.ramdisk_id
+    import nova.db.sqlalchemy.models
+    name=None
+    type=None
+    sliver_id = None
+    if isinstance(instance, dict):
+        # this is an isntance type dict
+        name = instance['name']
+        type = instance['name']
+    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
+    else:
+        raise SfaAPIError("instnace must be an instance_type dict or" + \
+                           " a nova.db.sqlalchemy.models.Instance object")
+    if slice_xrn:
+        xrn = Xrn(slice_xrn, 'slice')
+        sliver_id = xrn.get_sliver_id(instance.project_id, instance.hostname, instance.id)
+
+    sliver = Sliver({'slice_id': sliver_id,
+                     'name': name,
+                     'type': 'plos-' + type,
+                     'tags': []})
+    return sliver
+            
+
 class OSAggregate:
 
     def __init__(self, driver):
         self.driver = driver
 
-    def instance_to_sliver(self, instance, slice_xrn=None):
-        # should include? 
-        # * instance.image_ref
-        # * instance.kernel_id
-        # * instance.ramdisk_id 
-        import nova.db.sqlalchemy.models
-        name=None
-        type=None
-        sliver_id = None
-        if isinstance(instance, dict):
-            # this is an isntance type dict
-            name = instance['name']
-            type = instance['name'] 
-        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
-        else:
-            raise SfaAPIError("instnace must be an instance_type dict or" + \
-                               " a nova.db.sqlalchemy.models.Instance object")
-        if slice_xrn:
-            xrn = Xrn(slice_xrn, 'slice')
-            sliver_id = xrn.get_sliver_id(instance.project_id, instance.hostname, instance.id)     
-    
-        sliver = Sliver({'slice_id': sliver_id,
-                         'name': name,
-                         'type': 'plos-' + type,
-                         'tags': []})
-        return sliver
-
-
     def get_machine_image_details(self, image):
         """
         Returns a dict that contains the ami, aki and ari details for the specified
@@ -65,9 +65,11 @@ class OSAggregate:
         """
         disk_image = {}
         if image['container_format'] == 'ami':
+            kernel_id = image['properties']['kernel_id']
+            ramdisk_id = image['properties']['ramdisk_id']
             disk_image['ami'] = image
-            disk_image['aki'] = self.driver.shell.image_manager.show(image['kernel_id'])
-            disk_image['ari'] = self.driver.shell.image_manager.show(image['ramdisk_id'])
+            disk_image['aki'] = self.driver.shell.image_manager.show(kernel_id)
+            disk_image['ari'] = self.driver.shell.image_manager.show(ramdisk_id)
         return disk_image
         
     def get_disk_image(self, id=None, name=None):
@@ -117,7 +119,7 @@ class OSAggregate:
             rspec_node['component_id'] = xrn.urn
             rspec_node['component_name'] = xrn.name
             rspec_node['component_manager_id'] = Xrn(self.driver.hrn, 'authority+cm').get_urn()   
-            sliver = self.instance_to_sliver(instance)
+            sliver = instance_to_sliver(instance)
             disk_image = self.get_disk_image(instance.image_ref)
             sliver['disk_images'] = [disk_image_to_rspec_object(disk_image)]
             rspec_node['slivers'] = [sliver]
@@ -137,7 +139,7 @@ class OSAggregate:
         # available images
         disk_images = self.get_available_disk_images()
         disk_image_objects = [disk_image_to_rspec_object(image) \
-                               for image in disk_image]  
+                               for image in disk_images]  
         rspec_nodes = []
         for zone in zones:
             rspec_node = Node()
@@ -150,7 +152,7 @@ class OSAggregate:
                                                 HardwareType({'name': 'pc'})]
             slivers = []
             for instance in instances:
-                sliver = self.instance_to_sliver(instance)
+                sliver = instance_to_sliver(instance)
                 sliver['disk_images'] = disk_image_objects
                 slivers.append(sliver)