Esempio n. 1
0
    def _get_available_images(self, request, context):
        project_id = context.get("project_id", None)
        if not hasattr(self, "_public_images"):
            public = {"is_public": True, "status": "active"}
            try:
                public_images, _more = glance.image_list_detailed(request, filters=public)
            except:
                public_images = []
                exceptions.handle(request, _("Unable to retrieve public images."))
            self._public_images = public_images

        # Preempt if we don't have a project_id yet.
        if project_id is None:
            setattr(self, "_images_for_%s" % project_id, [])

        if not hasattr(self, "_images_for_%s" % project_id):
            owner = {"property-owner_id": project_id, "status": "active"}
            try:
                owned_images, _more = glance.image_list_detailed(request, filters=owner)
            except:
                owned_images = []
                exceptions.handle(request, _("Unable to retrieve images for " "the current project."))
            setattr(self, "_images_for_%s" % project_id, owned_images)

        owned_images = getattr(self, "_images_for_%s" % project_id)
        images = owned_images + self._public_images

        # Remove duplicate images
        image_ids = []
        final_images = []
        for image in images:
            if image.id not in image_ids:
                image_ids.append(image.id)
                final_images.append(image)
        return [image for image in final_images if image.container_format not in ("aki", "ari")]
Esempio n. 2
0
 def __init__(self, *args, **kwrds):
     super(CreateFlavorAction, self).__init__(*args, **kwrds)
     try:
         kernel_images = glance.image_list_detailed(
             self.request,
             filters={'disk_format': 'aki'}
         )[0]
         ramdisk_images = glance.image_list_detailed(
             self.request,
             filters={'disk_format': 'ari'}
         )[0]
     except Exception:
         exceptions.handle(self.request,
                           _('Unable to retrieve images list.'))
         kernel_images = []
         ramdisk_images = []
     self.fields['kernel_image_id'].choices = [(img.id, img.name)
                                               for img in kernel_images]
     self.fields['ramdisk_image_id'].choices = [(img.id, img.name)
                                                for img in ramdisk_images]
     # Delete what is not applicable to hardware
     del self.fields['eph_gb']
     del self.fields['swap_mb']
     # Alter user-visible strings
     self.fields['vcpus'].label = _("CPUs")
     self.fields['disk_gb'].label = _("Disk GB")
     # No idea why Horizon exposes this database detail
     del self.fields['flavor_id']
Esempio n. 3
0
 def __init__(self, *args, **kwrds):
     super(CreateFlavorAction, self).__init__(*args, **kwrds)
     try:
         kernel_images = glance.image_list_detailed(self.request, )[0]
         kernel_images = [
             image for image in kernel_images
             if utils.check_image_type(image, 'discovery kernel')
         ]
         ramdisk_images = glance.image_list_detailed(self.request, )[0]
         ramdisk_images = [
             image for image in ramdisk_images
             if utils.check_image_type(image, 'discovery ramdisk')
         ]
     except Exception:
         exceptions.handle(self.request,
                           _('Unable to retrieve images list.'))
         kernel_images = []
         ramdisk_images = []
     self.fields['kernel_image_id'].choices = [(img.id, img.name)
                                               for img in kernel_images]
     self.fields['ramdisk_image_id'].choices = [(img.id, img.name)
                                                for img in ramdisk_images]
     # Delete what is not applicable to hardware
     del self.fields['eph_gb']
     del self.fields['swap_mb']
     # Alter user-visible strings
     self.fields['vcpus'].label = _("CPUs")
     self.fields['disk_gb'].label = _("Disk GB")
     # No idea why Horizon exposes this database detail
     del self.fields['flavor_id']
Esempio n. 4
0
def get_available_images(request, project_id=None, images_cache=None):
    """
    Returns a list of images that are public or owned by the given
    project_id. If project_id is not specified, only public images
    are returned.

    :param images_cache:
    An optional dict-like object in which to
    cache public and per-project id image metadata.
    """
    if images_cache is None:
        images_cache = {}
    public_images = images_cache.get('public_images', [])
    images_by_project = images_cache.get('images_by_project', {})
    if 'public_images' not in images_cache:
        public = {"is_public": True,
                  "status": "active"}
        try:
            images, _more = glance.image_list_detailed(
                request, filters=public)
            [public_images.append(image) for image in images]
            images_cache['public_images'] = public_images
        except Exception:
            exceptions.handle(request,
                              _("Unable to retrieve public images."))

    # Preempt if we don't have a project_id yet.
    if project_id is None:
        images_by_project[project_id] = []

    if project_id not in images_by_project:
        owner = {"property-owner_id": project_id,
                 "status": "active"}
        try:
            owned_images, _more = glance.image_list_detailed(
                request, filters=owner)
            images_by_project[project_id] = owned_images
        except Exception:
            owned_images = []
            exceptions.handle(request,
                              _("Unable to retrieve images for "
                                "the current project."))
    else:
        owned_images = images_by_project[project_id]

    if 'images_by_project' not in images_cache:
        images_cache['images_by_project'] = images_by_project

    images = owned_images + public_images

    # Remove duplicate images
    image_ids = []
    final_images = []
    for image in images:
        if image.id not in image_ids:
            image_ids.append(image.id)
            final_images.append(image)
    return [image for image in final_images
            if image.container_format not in ('aki', 'ari')]
Esempio n. 5
0
def get_available_images(request, project_id=None, images_cache=None):
    """Returns a list of images that are public or owned by the given
    project_id. If project_id is not specified, only public images
    are returned.

    :param images_cache: An optional dict-like object in which to
     cache public and per-project id image metadata.

    """
    if images_cache is None:
        images_cache = {}
    public_images = images_cache.get('public_images', [])
    images_by_project = images_cache.get('images_by_project', {})
    if 'public_images' not in images_cache:
        public = {"is_public": True, "status": "active"}
        try:
            images, _more, _prev = glance.image_list_detailed(request,
                                                              filters=public)
            [public_images.append(image) for image in images]
            images_cache['public_images'] = public_images
        except Exception:
            exceptions.handle(request, _("Unable to retrieve public images."))

    # Preempt if we don't have a project_id yet.
    if project_id is None:
        images_by_project[project_id] = []

    if project_id not in images_by_project:
        owner = {"property-owner_id": project_id, "status": "active"}
        try:
            owned_images, _more, _prev = glance.image_list_detailed(
                request, filters=owner)
            images_by_project[project_id] = owned_images
        except Exception:
            owned_images = []
            exceptions.handle(
                request,
                _("Unable to retrieve images for "
                  "the current project."))
    else:
        owned_images = images_by_project[project_id]

    if 'images_by_project' not in images_cache:
        images_cache['images_by_project'] = images_by_project

    images = owned_images + public_images

    # Remove duplicate images
    image_ids = []
    final_images = []
    for image in images:
        if image.id not in image_ids:
            image_ids.append(image.id)
            final_images.append(image)
    return [
        image for image in final_images
        if image.container_format not in ('aki', 'ari')
    ]
Esempio n. 6
0
def get_available_images(request, project_id=None, images_cache=None):
    """Returns a list of images that are available in a certain context.
    Project_id is here only for backwards compatibility. The function shall return
    public, private and shared images.

    :param images_cache: An optional dict-like object in which to
    cache image metadata.

    """

    if images_cache is None:
        images_cache = {}

    all_images = images_cache.get('all_images', [])

    if 'all_images' not in images_cache:
        try:
            images, _more, _prev = glance.image_list_detailed(request)
            [all_images.append(image) for image in images]
            images_cache['all_images'] = images
        except Exception:
            exceptions.handle(request, _("Unable to retrieve images."))

    return [
        image for image in all_images
        if image.container_format not in ('aki', 'ari')
    ]
Esempio n. 7
0
def get_murano_images(request, region=None):
    images = []
    try:
        # https://bugs.launchpad.net/murano/+bug/1339261 - glance
        # client version change alters the API. Other tuple values
        # are _more and _prev (in recent glance client)
        with helpers.current_region(request, region):
            images = glance.image_list_detailed(request)[0]
    except Exception:
        LOG.error("Error to request image list from glance ")
        exceptions.handle(request, _("Unable to retrieve public images."))
    murano_images = []
    # filter out the snapshot image type
    images = filter(
        lambda x: x.properties.get("image_type", '') != 'snapshot', images)
    for image in images:
        # Additional properties, whose value is always a string data type, are
        # only included in the response if they have a value.
        murano_property = getattr(image, 'murano_image_info', None)
        if murano_property:
            try:
                murano_metadata = json.loads(murano_property)
            except ValueError:
                LOG.warning("JSON in image metadata is not valid. "
                            "Check it in glance.")
                messages.error(request, _("Invalid murano image metadata"))
            else:
                image.murano_property = murano_metadata
                murano_images.append(image)
    return murano_images
Esempio n. 8
0
    def update(self, request, initial):
        try:
            # public filter removed
            images, _more = glance.image_list_detailed(request)
        except:
            images = []
            exceptions.handle(request, _("Unable to retrieve public images."))

        image_mapping, image_choices = {}, []
        for image in images:
            murano_property = image.properties.get('murano_image_info')
            if murano_property:
                # convert to dict because
                # only string can be stored in image metadata property
                try:
                    murano_json = ast.literal_eval(murano_property)
                except ValueError:
                    messages.error(request,
                                   _("Invalid value in image metadata"))
                else:
                    title = murano_json.get('title')
                    image_id = murano_json.get('id')
                    if title and image_id:
                        image_mapping[smart_text(title)] = smart_text(image_id)

        for name in sorted(image_mapping.keys()):
            image_choices.append((image_mapping[name], name))
        if image_choices:
            image_choices.insert(0, ("", _("Select Image")))
        else:
            image_choices.insert(0, ("", _("No images available")))

        self.choices = image_choices
Esempio n. 9
0
    def update(self, request, initial):
        try:
            # public filter removed
            images, _more = glance.image_list_detailed(request)
        except:
            images = []
            exceptions.handle(request,
                              _("Unable to retrieve public images."))

        image_mapping, image_choices = {}, []
        for image in images:
            murano_property = image.properties.get('murano_image_info')
            if murano_property:
                # convert to dict because
                # only string can be stored in image metadata property
                try:
                    murano_json = ast.literal_eval(murano_property)
                except ValueError:
                    messages.error(request,
                                   _("Invalid value in image metadata"))
                else:
                    title = murano_json.get('title')
                    image_id = murano_json.get('id')
                    if title and image_id:
                        image_mapping[smart_text(title)] = smart_text(image_id)

        for name in sorted(image_mapping.keys()):
            image_choices.append((image_mapping[name], name))
        if image_choices:
            image_choices.insert(0, ("", _("Select Image")))
        else:
            image_choices.insert(0, ("", _("No images available")))

        self.choices = image_choices
Esempio n. 10
0
def get_filter_properties(request):
    try:
        #images, _more, _prev = glance.image_list_detailed(request)
        images, _more, _prev = glance.image_list_detailed(request)
        return images
    except Exception:
        exceptions.handle(request, _("Unable to retrieve public images."))
def get_murano_images(request):
    images = []
    try:
        # https://bugs.launchpad.net/murano/+bug/1339261 - glance
        # client version change alters the API. Other tuple values
        # are _more and _prev (in recent glance client)
        images = glance.image_list_detailed(request)[0]
    except Exception:
        LOG.error("Error to request image list from glance ")
        exceptions.handle(request, _("Unable to retrieve public images."))
    murano_images = []
    # filter out the snapshot image type
    images = filter(lambda x: x.properties.get("image_type", '') != 'snapshot',
                    images)
    for image in images:
        # Additional properties, whose value is always a string data type, are
        # only included in the response if they have a value.
        murano_property = getattr(image, 'murano_image_info', None)
        if murano_property:
            try:
                murano_metadata = json.loads(murano_property)
            except ValueError:
                LOG.warning("JSON in image metadata is not valid. "
                            "Check it in glance.")
                messages.error(request, _("Invalid murano image metadata"))
            else:
                image.murano_property = murano_metadata
                murano_images.append(image)
    return murano_images
Esempio n. 12
0
 def populate_image_choices(self, request, context):
     images = glance.image_list_detailed(self.request)[0]
     images = [image for image in images
               if tuskar_utils.check_image_type(image,
                                                'overcloud provisioning')]
     choices = [(i.id, i.name) for i in images]
     return [('', _('Unknown'))] + choices
Esempio n. 13
0
 def populate_image_choices(self, request, context):
     images = glance.image_list_detailed(self.request)[0]
     images = [
         image for image in images
         if tuskar_utils.check_image_type(image, 'overcloud provisioning')
     ]
     choices = [(i.id, i.name) for i in images]
     return [('', _('Unknown'))] + choices
Esempio n. 14
0
 def _get_images(self, request, filter):
     try:
         images, _more = glance.image_list_detailed(request, filters=filter)
     except Exception:
         images = []
         exceptions.handle(request,
                           _("Unable to retrieve images with filter %s.") %
                           filter)
     return images
Esempio n. 15
0
    def _get_available_images(self, request, context):
        project_id = context.get('project_id', None)
        if not hasattr(self, "_public_images"):
            public = {"is_public": True, "status": "active"}
            try:
                public_images, _more = glance.image_list_detailed(
                    request, filters=public)
            except:
                public_images = []
                exceptions.handle(request,
                                  _("Unable to retrieve public images."))
            self._public_images = public_images

        # Preempt if we don't have a project_id yet.
        if project_id is None:
            setattr(self, "_images_for_%s" % project_id, [])

        if not hasattr(self, "_images_for_%s" % project_id):
            owner = {"property-owner_id": project_id, "status": "active"}
            try:
                owned_images, _more = glance.image_list_detailed(request,
                                                                 filters=owner)
            except:
                owned_images = []
                exceptions.handle(
                    request,
                    _("Unable to retrieve images for "
                      "the current project."))
            setattr(self, "_images_for_%s" % project_id, owned_images)

        owned_images = getattr(self, "_images_for_%s" % project_id)
        images = owned_images + self._public_images

        # Remove duplicate images
        image_ids = []
        final_images = []
        for image in images:
            if image.id not in image_ids:
                image_ids.append(image.id)
                final_images.append(image)
        return [
            image for image in final_images
            if image.container_format not in ('aki', 'ari')
        ]
Esempio n. 16
0
    def get_data(self):
        images = []
        try:
            images, _more = glance.image_list_detailed(self.request)
        except Exception:
            msg = _('Unable to retrieve list of images')
            uri = reverse('horizon:murano:images:index')

            exceptions.handle(self.request, msg, redirect=uri)
        return filter_murano_images(images, request=self.request)
Esempio n. 17
0
 def _get_images(self, request, filter):
     try:
         images, _more, _prev = (glance.image_list_detailed(request,
                                                            filters=filter))
     except Exception:
         images = []
         exceptions.handle(
             request,
             _("Unable to retrieve images with filter %s.") % filter)
     return images
Esempio n. 18
0
def get_kernel_images(request):
    try:
        kernel_images = glance.image_list_detailed(
            request,
            )[0]
        kernel_images = [image for image in kernel_images
                         if utils.check_image_type(image, 'deploy kernel')]
    except Exception:
        exceptions.handle(request,
                          _('Unable to retrieve kernel image list.'))
        kernel_images = []
    return kernel_images
Esempio n. 19
0
    def __init__(self, request, *args, **kwargs):
        super(MarkImageForm, self).__init__(request, *args, **kwargs)

        images = []
        try:
            images, _more = glance.image_list_detailed(request)
        except Exception:
            LOG.error('Failed to request image list from Glance')
            exceptions.handle(request, _('Unable to retrieve list of images'))

        self.fields['image'].choices = [(i.id, i.name) for i in images]
        self.fields['existing_titles'].initial = \
            [image.title for image in filter_murano_images(images)]
Esempio n. 20
0
    def get_data(self):
        images = []
        try:
            # https://bugs.launchpad.net/murano/+bug/1339261 - glance
            # client version change alters the API. Other tuple values
            # are _more and _prev (in recent glance client)
            images = glance.image_list_detailed(self.request)[0]
        except Exception:
            msg = _('Unable to retrieve list of images')
            uri = reverse('horizon:murano:images:index')

            exceptions.handle(self.request, msg, redirect=uri)
        return forms.filter_murano_images(images, request=self.request)
Esempio n. 21
0
def get_ramdisk_images(request):
    try:
        ramdisk_images = glance.image_list_detailed(
            request,
            )[0]
        ramdisk_images = [image for image in ramdisk_images
                          if utils.check_image_type(
                              image, 'deploy ramdisk')]
    except Exception:
        exceptions.handle(request,
                          _('Unable to retrieve ramdisk image list.'))
        ramdisk_images = []
    return ramdisk_images
def find_basevm_by_sha256(request, sha256_value):
    from openstack_dashboard.api import glance

    public = {"is_public": True, "status": "active"}
    public_images, _more = glance.image_list_detailed(request, filters=public)
    for image in public_images:
        properties = getattr(image, "properties")
        if properties == None or len(properties) == 0:
            continue
        if properties.get(CLOUDLET_TYPE.PROPERTY_KEY_CLOUDLET_TYPE) != \
                CLOUDLET_TYPE.IMAGE_TYPE_BASE_DISK:
            continue
        base_sha256_uuid = properties.get(CLOUDLET_TYPE.PROPERTY_KEY_BASE_UUID)
        if base_sha256_uuid == sha256_value:
            return image
    return None
Esempio n. 23
0
    def __init__(self, request, *args, **kwargs):
        super(MarkImageForm, self).__init__(request, *args, **kwargs)

        images = []
        try:
            # https://bugs.launchpad.net/murano/+bug/1339261 - glance
            # client version change alters the API. Other tuple values
            # are _more and _prev (in recent glance client)
            images = glance.image_list_detailed(request)[0]
        except Exception:
            LOG.error('Failed to request image list from Glance')
            exceptions.handle(request, _('Unable to retrieve list of images'))

        self.fields['image'].choices = [(i.id, i.name) for i in images]
        self.fields['existing_titles'].initial = \
            [image.title for image in filter_murano_images(images)]
Esempio n. 24
0
def find_basevm_by_sha256(request, sha256_value):
    from openstack_dashboard.api import glance

    public = {"is_public": True, "status": "active"}
    public_images, _more = glance.image_list_detailed(request, filters=public)
    for image in public_images:
        properties = getattr(image, "properties")
        if properties == None or len(properties) == 0:
            continue
        if properties.get(CLOUDLET_TYPE.PROPERTY_KEY_CLOUDLET_TYPE) != \
                CLOUDLET_TYPE.IMAGE_TYPE_BASE_DISK:
            continue
        base_sha256_uuid = properties.get(CLOUDLET_TYPE.PROPERTY_KEY_BASE_UUID)
        if base_sha256_uuid == sha256_value:
            return image
    return None
Esempio n. 25
0
    def __init__(self, request, *args, **kwargs):
        super(MarkImageForm, self).__init__(request, *args, **kwargs)

        images = []
        try:
            # https://bugs.launchpad.net/murano/+bug/1339261 - glance
            # client version change alters the API. Other tuple values
            # are _more and _prev (in recent glance client)
            images = glance.image_list_detailed(request)[0]
        except Exception:
            LOG.error('Failed to request image list from Glance')
            exceptions.handle(request, _('Unable to retrieve list of images'))

        self.fields['image'].choices = [(i.id, i.name) for i in images]
        self.fields['existing_titles'].initial = \
            [image.title for image in filter_murano_images(images)]
Esempio n. 26
0
def get_murano_images(request):
    images = []
    try:
        # public filter removed
        images, _more = glance.image_list_detailed(request)
    except:
        LOG.error("Error to request image list from glance ")
        exceptions.handle(request, _("Unable to retrieve public images."))
    murano_images = []
    for image in images:
        murano_property = image.properties.get('murano_image_info')
        if murano_property:
            try:
                murano_metadata = json.loads(murano_property)
            except ValueError:
                LOG.warning("JSON in image metadata is not valid. "
                            "Check it in glance.")
                messages.error(request, _("Invalid murano image metadata"))
            else:
                image.murano_property = murano_metadata
                murano_images.append(image)
    return murano_images
Esempio n. 27
0
def get_murano_images(request):
    images = []
    try:
        # https://bugs.launchpad.net/murano/+bug/1339261 - glance
        # client version change alters the API. Other tuple values
        # are _more and _prev (in recent glance client)
        images = glance.image_list_detailed(request)[0]
    except Exception:
        LOG.error("Error to request image list from glance ")
        exceptions.handle(request, _("Unable to retrieve public images."))
    murano_images = []
    for image in images:
        murano_property = image.properties.get("murano_image_info")
        if murano_property:
            try:
                murano_metadata = json.loads(murano_property)
            except ValueError:
                LOG.warning("JSON in image metadata is not valid. " "Check it in glance.")
                messages.error(request, _("Invalid murano image metadata"))
            else:
                image.murano_property = murano_metadata
                murano_images.append(image)
    return murano_images
Esempio n. 28
0
def _guess_default_image_ids(request):
    try:
        images = glance.image_list_detailed(request)[0]
    except Exception:
        horizon.exceptions.handle(request,
                                  _('Unable to retrieve images list.'))
        kernel_images = []
        ramdisk_images = []
    else:
        has_type = tuskar_ui.utils.utils.check_image_type
        kernel_images = [
            image for image in images
            if has_type(image, 'discovery kernel')
            and image.name == DEFAULT_KERNEL_IMAGE_NAME
        ]
        ramdisk_images = [
            image for image in images
            if has_type(image, 'discovery ramdisk')
            and image.name == DEFAULT_RAMDISK_IMAGE_NAME
        ]
    if not kernel_images or not ramdisk_images:
        raise ValueError("No default images")
    return kernel_images[0].id, ramdisk_images[0].id
Esempio n. 29
0
def get_murano_images(request):
    images = []
    try:
        # https://bugs.launchpad.net/murano/+bug/1339261 - glance
        # client version change alters the API. Other tuple values
        # are _more and _prev (in recent glance client)
        images = glance.image_list_detailed(request)[0]
    except Exception:
        LOG.error("Error to request image list from glance ")
        exceptions.handle(request, _("Unable to retrieve public images."))
    murano_images = []
    for image in images:
        murano_property = image.properties.get('murano_image_info')
        if murano_property:
            try:
                murano_metadata = json.loads(murano_property)
            except ValueError:
                LOG.warning("JSON in image metadata is not valid. "
                            "Check it in glance.")
                messages.error(request, _("Invalid murano image metadata"))
            else:
                image.murano_property = murano_metadata
                murano_images.append(image)
    return murano_images
Esempio n. 30
0
    def __init__(self, request, *args, **kwargs):
        super(MarkImageForm, self).__init__(request, *args, **kwargs)

        images = []
        try:
            # https://bugs.launchpad.net/murano/+bug/1339261 - glance
            # client version change alters the API. Other tuple values
            # are _more and _prev (in recent glance client)
            images = glance.image_list_detailed(request)[0]
        except Exception:
            LOG.error('Failed to request image list from Glance')
            exceptions.handle(request, _('Unable to retrieve list of images'))

        # filter out the image format aki and ari
        images = filter(
            lambda x: x.container_format not in ('aki', 'ari'), images)

        # filter out the snapshot image type
        images = filter(
            lambda x: x.properties.get("image_type", '') != 'snapshot', images)

        self.fields['image'].choices = [(i.id, i.name) for i in images]
        self.fields['existing_titles'].initial = \
            [image.title for image in filter_murano_images(images)]
Esempio n. 31
0
 def populate_base_image_choices(self, request, context):
     public_images, _more = glance.image_list_detailed(request)
     return [(image.id, image.name) for image in public_images
             if ("image.final" in image.name or "hadoop" in image.name
                 or "hdp" in image.name)]
Esempio n. 32
0
 def get_data(self):
     return glance.image_list_detailed(self.request)[0]
Esempio n. 33
0
 def populate_base_image_choices(self, request, context):
     public_images, _more = glance.image_list_detailed(request)
     return [(image.id, image.name) for image in public_images
             if ("image.final" in image.name
                 or "hadoop" in image.name
                 or "hdp" in image.name)]
Esempio n. 34
0
def get_available_images(request, project_id=None, images_cache=None):
    """Returns a list of available images

    Returns a list of images that are public, shared, community or owned by
    the given project_id. If project_id is not specified, only public and
    community images are returned.

    :param images_cache: An optional dict-like object in which to
    cache public and per-project id image metadata.
    """

    if images_cache is None:
        images_cache = {}
    public_images = images_cache.get('public_images', [])
    community_images = images_cache.get('community_images', [])
    images_by_project = images_cache.get('images_by_project', {})
    shared_images = images_cache.get('shared_images', [])
    if 'public_images' not in images_cache:
        public = {"is_public": True,
                  "status": "active"}
        try:
            images, _more, _prev = glance.image_list_detailed(
                request, filters=public)
            public_images += images
            images_cache['public_images'] = public_images
        except Exception:
            exceptions.handle(request,
                              _("Unable to retrieve public images."))

    # Preempt if we don't have a project_id yet.
    if project_id is None:
        images_by_project[project_id] = []

    if project_id not in images_by_project:
        owner = {"property-owner_id": project_id,
                 "status": "active"}
        try:
            owned_images, _more, _prev = glance.image_list_detailed(
                request, filters=owner)
            images_by_project[project_id] = owned_images
        except Exception:
            owned_images = []
            exceptions.handle(request,
                              _("Unable to retrieve images for "
                                "the current project."))
    else:
        owned_images = images_by_project[project_id]

    if 'community_images' not in images_cache:
        community = {"visibility": "community",
                     "status": "active"}
        try:
            images, _more, _prev = glance.image_list_detailed(
                request, filters=community)
            community_images += images
            images_cache['community_images'] = community_images
        except Exception:
            exceptions.handle(request,
                              _("Unable to retrieve community images."))

    if 'shared_images' not in images_cache:
        shared = {"visibility": "shared",
                  "status": "active"}
        try:
            shared_images, _more, _prev = \
                glance.image_list_detailed(request, filters=shared)
            images_cache['shared_images'] = shared_images
        except Exception:
            exceptions.handle(request,
                              _("Unable to retrieve shared images."))

    if 'images_by_project' not in images_cache:
        images_cache['images_by_project'] = images_by_project

    images = owned_images + public_images + community_images + shared_images

    image_ids = []
    final_images = []
    for image in images:
        if image.id not in image_ids and \
                image.container_format not in ('aki', 'ari'):
            image_ids.append(image.id)
            final_images.append(image)
    return final_images
Esempio n. 35
0
    def get_internalinstances_data(self):
        request = self.tab_group.request
        instances = []
        marker = self.request.GET.get(
            project_tables.InstancesTable._meta.pagination_param, None)

#        # Gather our instances
        try:
            instances, self._more = nova.server_list(
                self.request,
                search_opts={'marker': marker,
                             'paginate': True})
        except Exception:
            self._more = False
            instances = []
            exceptions.handle(self.request,
                              _('Unable to retrieve instances.'))
        # Gather our flavors and images and correlate our instances to them
        if instances:
            try:
                flavors = nova.flavor_list(self.request)
            except Exception:
                flavors = []
                exceptions.handle(self.request, ignore=True)

            try:
                # TODO(gabriel): Handle pagination.
                images, more = glance.image_list_detailed(self.request)
            except Exception:
                images = []
                exceptions.handle(self.request, ignore=True)

            full_flavors = SortedDict([(str(flavor.id), flavor)
                                       for flavor in flavors])
            image_map = SortedDict([(str(image.id), image)
                                    for image in images])

            # Loop through instances to get flavor info.
            for instance in instances:
                if hasattr(instance, 'image'):
                    # Instance from image returns dict
                    if isinstance(instance.image, dict):
                        if instance.image.get('id') in image_map:
                            instance.image = image_map[instance.image['id']]
                    else:
                        # Instance from volume returns a string
                        instance.image = {'name':
                                instance.image if instance.image else _("-")}

                try:
                    flavor_id = instance.flavor["id"]
                    if flavor_id in full_flavors:
                        instance.full_flavor = full_flavors[flavor_id]
                    else:
                        # If the flavor_id is not in full_flavors list,
                        # get it via nova api.
                        instance.full_flavor = nova.flavor_get(
                            self.request, flavor_id)
                except Exception:
                    msg = _('Unable to retrieve instance size information.')
                    exceptions.handle(self.request, msg)
        return instances
Esempio n. 36
0
    def _get_available_images(self, request, context):
        if not hasattr(self, '_images_cache'):
            images_cache = {}

        if images_cache is None:
            images_cache = {}

        public_images = images_cache.get('public_images', [])
        images_by_project = images_cache.get('images_by_project', {})
        if 'public_images' not in images_cache:
            public = {"is_public": True, "status": "active"}

            try:
                images, _more, _prev = glance.image_list_detailed(
                    request, filters=public)
                [public_images.append(image) for image in images]
                images_cache['public_images'] = public_images
            except Exception:
                exceptions.handle(request,
                                  _("Unable to retrieve public images."))

        # Preempt if we don't have a project_id yet.
        project_id = context.get('project_id', None)
        if project_id is None:
            images_by_project[project_id] = []

        if project_id not in images_by_project:
            owner = {"property-owner_id": project_id, "status": "active"}
            try:
                owned_images, _more, _prev = glance.image_list_detailed(
                    request, filters=owner)
                images_by_project[project_id] = owned_images
            except Exception:
                owned_images = []
                exceptions.handle(
                    request,
                    _("Unable to retrieve images for "
                      "the current project."))
        else:
            owned_images = images_by_project[project_id]

        if 'images_by_project' not in images_cache:
            images_cache['images_by_project'] = images_by_project

        images = owned_images + public_images
        base_vms = list()
        for image in images:
            if hasattr(image, 'properties') == True:
                properties = getattr(image, 'properties')
                cloudlet_type = properties.get('cloudlet_type', None)
                if cloudlet_type == 'cloudlet_base_disk':
                    base_vms.append(image)

        image_ids = []
        final_images = []
        for image in base_vms:
            if image.id not in image_ids:
                image_ids.append(image.id)
                final_images.append(image)
        return [
            image for image in final_images
            if image.container_format not in ('aki', 'ari')
        ]
Esempio n. 37
0
def get_available_images(request, project_id=None, images_cache=None):
    """Returns a list of images that are public, shared or owned by
    the given project_id. If project_id is not specified, only public
    images are returned.

    :param images_cache: An optional dict-like object in which to
    cache public and per-project id image metadata.

    """
    if images_cache is None:
        images_cache = {}
    public_images = images_cache.get('public_images', [])
    images_by_project = images_cache.get('images_by_project', {})
    #mj - https://bugs.launchpad.net/horizon/+bug/1655259 - fixed in pike
    shared_images = images_cache.get('shared_images', [])
    if 'public_images' not in images_cache:
        public = {"is_public": True, "status": "active"}
        try:
            images, _more, _prev = glance.image_list_detailed(request,
                                                              filters=public)
            [public_images.append(image) for image in images]
            images_cache['public_images'] = public_images
        except Exception:
            exceptions.handle(request, _("Unable to retrieve public images."))

    # Preempt if we don't have a project_id yet.
    if project_id is None:
        images_by_project[project_id] = []

    if project_id not in images_by_project:
        owner = {"property-owner_id": project_id, "status": "active"}
        try:
            owned_images, _more, _prev = glance.image_list_detailed(
                request, filters=owner)
            images_by_project[project_id] = owned_images
        except Exception:
            owned_images = []
            exceptions.handle(
                request,
                _("Unable to retrieve images for "
                  "the current project."))
    else:
        owned_images = images_by_project[project_id]

    #mj - https://bugs.launchpad.net/horizon/+bug/1655259 - fixed in pike
    if 'shared_images' not in images_cache:
        shared = {"visibility": "shared", "status": "active"}
        try:
            shared_images, _more, _prev = \
                glance.image_list_detailed(request, filters=shared)
            images_cache['shared_images'] = shared_images
        except Exception:
            exceptions.handle(request, _("Unable to retrieve shared images."))

    if 'images_by_project' not in images_cache:
        images_cache['images_by_project'] = images_by_project

    images = owned_images + public_images + shared_images
    #end bug fix block

    image_ids = []
    final_images = []
    for image in images:
        if image.id not in image_ids and \
                image.container_format not in ('aki', 'ari'):
            image_ids.append(image.id)
            final_images.append(image)
    return final_images
Esempio n. 38
0
def get_available_images(request, project_id=None, images_cache=None):
    """Returns a list of available images

    Returns a list of images that are public, shared, community or owned by
    the given project_id. If project_id is not specified, only public and
    community images are returned.

    :param images_cache: An optional dict-like object in which to
    cache public and per-project id image metadata.
    """
    if images_cache is None:
        images_cache = {}
    public_images = images_cache.get('public_images', [])
    community_images = images_cache.get('community_images', [])
    images_by_project = images_cache.get('images_by_project', {})
    shared_images = images_cache.get('shared_images', [])
    if 'public_images' not in images_cache:
        public = {"is_public": True, "status": "active"}
        try:
            images, _more, _prev = glance.image_list_detailed(request,
                                                              filters=public)
            public_images += images
            images_cache['public_images'] = public_images
        except Exception:
            exceptions.handle(request, _("Unable to retrieve public images."))

    # Preempt if we don't have a project_id yet.
    if project_id is None:
        images_by_project[project_id] = []

    if project_id not in images_by_project:
        owner = {"property-owner_id": project_id, "status": "active"}
        try:
            owned_images, _more, _prev = glance.image_list_detailed(
                request, filters=owner)
            images_by_project[project_id] = owned_images
        except Exception:
            owned_images = []
            exceptions.handle(
                request,
                _("Unable to retrieve images for "
                  "the current project."))
    else:
        owned_images = images_by_project[project_id]

    if 'community_images' not in images_cache:
        community = {"visibility": "community", "status": "active"}
        try:
            images, _more, _prev = glance.image_list_detailed(
                request, filters=community)
            community_images += images
            images_cache['community_images'] = community_images
        except Exception:
            exceptions.handle(request,
                              _("Unable to retrieve community images."))

    if 'shared_images' not in images_cache:
        shared = {"visibility": "shared", "status": "active"}
        try:
            shared_images, _more, _prev = \
                glance.image_list_detailed(request, filters=shared)
            images_cache['shared_images'] = shared_images
        except Exception:
            exceptions.handle(request, _("Unable to retrieve shared images."))

    if 'images_by_project' not in images_cache:
        images_cache['images_by_project'] = images_by_project

    images = owned_images + public_images + community_images + shared_images

    image_ids = []
    final_images = []
    for image in images:
        print(image.name)
        if image.id not in image_ids and \
                image.container_format not in ('aki', 'ari') and not ("Plesk" in image.name):
            image_ids.append(image.id)
            final_images.append(image)
    return final_images