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