from nova.exception import ImageNotFound from sfa.rspecs.elements.disk_image import DiskImage class Image: def __init__(self, image=None): if image is None: image = {} self.id = None self.container_format = None self.kernel_id = None self.ramdisk_id = None self.properties = None self.name = None self.description = None self.os = None self.version = None if image: self.parse_image(image) def parse_image(self, image): if isinstance(image, dict): self.id = image['id'] self.name = image['name'] self.container_format = image['container_format'] self.properties = image['properties'] if 'kernel_id' in self.properties: self.kernel_id = self.properties['kernel_id'] if 'ramdisk_id' in self.properties: self.ramdisk_id = self.properties['ramdisk_id'] def to_rspec_object(self): img = DiskImage() img['name'] = self.name img['description'] = self.name img['os'] = self.name img['version'] = self.name return img class ImageManager: def __init__(self, driver): self.driver = driver @staticmethod def disk_image_to_rspec_object(image): img = Image(image) return img.to_rspec_object() def get_available_disk_images(self): # get image records disk_images = [] for img in self.driver.shell.image_manager.get_images_detailed(): image = Image(img) if image.container_format in ['ami', 'ovf']: disk_images.append(image) return disk_images def get_disk_image(self, id=None, name=None): """ Look up a image bundle using the specifeid id or name """ disk_image = None try: if id: image = self.driver.shell.nova_manager.images.find(id=id) elif name: image = self.driver.shell.nova_manager.images.find(name=name) except ImageNotFound: pass return Image(image)