Merge branch 'upstreammaster'
[sfa.git] / sfa / openstack / image.py
1 from nova.exception import ImageNotFound
2 from sfa.rspecs.elements.disk_image import DiskImage
3
4 class Image:
5
6     def __init__(self, driver):
7         self.driver = driver
8
9     @staticmethod
10     def disk_image_to_rspec_object(image):
11         img = DiskImage()
12         img['name'] = image['ami']['name']
13         img['description'] = image['ami']['name']
14         img['os'] = image['ami']['name']
15         img['version'] = image['ami']['name']
16         return img
17
18     def get_available_disk_images(self):
19         # get image records
20         disk_images = []
21         for image in self.driver.shell.image_manager.detail():
22             if image['container_format'] == 'ami':
23                 disk_images.append(self.get_machine_image_details(image))
24         return disk_images
25
26     def get_machine_image_details(self, image):
27         """
28         Returns a dict that contains the ami, aki and ari details for the specified
29         ami image.
30         """
31         disk_image = {}
32         if image['container_format'] == 'ami':
33             kernel_id = image['properties']['kernel_id']
34             ramdisk_id = image['properties']['ramdisk_id']
35             disk_image['ami'] = image
36             disk_image['aki'] = self.driver.shell.image_manager.show(kernel_id)
37             disk_image['ari'] = self.driver.shell.image_manager.show(ramdisk_id)
38         return disk_image
39
40     def get_disk_image(self, id=None, name=None):
41         """
42         Look up a image bundle using the specifeid id or name
43         """
44         disk_image = None
45         try:
46             if id:
47                 image = self.driver.shell.image_manager.show(id)
48             elif name:
49                 image = self.driver.shell.image_manager.show_by_name(name)
50             if image['container_format'] == 'ami':
51                 disk_image = self.get_machine_image_details(image)
52         except ImageNotFound:
53                 pass
54         return disk_image
55
56