the big cleanup: deprecate federica driver
[sfa.git] / sfa / openstack / image.py
1 from nova.exception import ImageNotFound
2 from sfa.rspecs.elements.disk_image import DiskImage
3
4
5 class Image:
6
7     def __init__(self, image=None):
8         if image is None:
9             image = {}
10         self.id = None
11         self.container_format = None
12         self.kernel_id = None
13         self.ramdisk_id = None
14         self.properties = None
15         self.name = None
16         self.description = None
17         self.os = None
18         self.version = None
19
20         if image:
21             self.parse_image(image)
22
23     def parse_image(self, image):
24         if isinstance(image, dict):
25             self.id = image['id']
26             self.name = image['name']
27             self.container_format = image['container_format']
28             self.properties = image['properties']
29             if 'kernel_id' in self.properties:
30                 self.kernel_id = self.properties['kernel_id']
31             if 'ramdisk_id' in self.properties:
32                 self.ramdisk_id = self.properties['ramdisk_id']
33
34     def to_rspec_object(self):
35         img = DiskImage()
36         img['name'] = self.name
37         img['description'] = self.name
38         img['os'] = self.name
39         img['version'] = self.name
40         return img
41
42
43 class ImageManager:
44
45     def __init__(self, driver):
46         self.driver = driver
47
48     @staticmethod
49     def disk_image_to_rspec_object(image):
50         img = Image(image)
51         return img.to_rspec_object()
52
53     def get_available_disk_images(self):
54         # get image records
55         disk_images = []
56         for img in self.driver.shell.image_manager.get_images_detailed():
57             image = Image(img)
58             if image.container_format in ['ami', 'ovf']:
59                 disk_images.append(image)
60         return disk_images
61
62     def get_disk_image(self, id=None, name=None):
63         """
64         Look up a image bundle using the specifeid id or name
65         """
66         disk_image = None
67         try:
68             if id:
69                 image = self.driver.shell.nova_manager.images.find(id=id)
70             elif name:
71                 image = self.driver.shell.nova_manager.images.find(name=name)
72         except ImageNotFound:
73             pass
74         return Image(image)