Exemple #1
0
    def _get_flavors(self, req):
        """Helper function that returns a list of flavor dicts."""
        filters = {}
        sort_key = req.params.get('sort_key') or 'flavorid'
        sort_dir = req.params.get('sort_dir') or 'asc'
        limit, marker = common.get_limit_and_marker(req)

        context = req.environ['nova.context']
        if context.is_admin:
            # Only admin has query access to all flavor types
            filters['is_public'] = self._parse_is_public(
                    req.params.get('is_public', None))
        else:
            filters['is_public'] = True
            filters['disabled'] = False

        if 'minRam' in req.params:
            try:
                filters['min_memory_mb'] = int(req.params['minRam'])
            except ValueError:
                msg = _('Invalid minRam filter [%s]') % req.params['minRam']
                raise webob.exc.HTTPBadRequest(explanation=msg)

        if 'minDisk' in req.params:
            try:
                filters['min_root_gb'] = int(req.params['minDisk'])
            except ValueError:
                msg = _('Invalid minDisk filter [%s]') % req.params['minDisk']
                raise webob.exc.HTTPBadRequest(explanation=msg)

        try:
            limited_flavors = flavors.get_all_flavors_sorted_list(context,
                filters=filters, sort_key=sort_key, sort_dir=sort_dir,
                limit=limit, marker=marker)
        except exception.MarkerNotFound:
            msg = _('marker [%s] not found') % marker
            raise webob.exc.HTTPBadRequest(explanation=msg)

        return limited_flavors
Exemple #2
0
    def _get_servers(self, req, is_detail):
        """Returns a list of servers, based on any search options specified."""

        search_opts = {}
        search_opts.update(req.GET)

        context = req.environ["nova.context"]
        remove_invalid_options(context, search_opts, self._get_server_search_options())
        search_filter_name = search_opts.get("name", None)
        # search_filter_id = search_opts.get('id', None)
        # By default, compute's get_all() will return deleted instances.
        # If an admin hasn't specified a 'deleted' search option, we need
        # to filter out deleted instances by setting the filter ourselves.
        # ... Unless 'changes-since' is specified, because 'changes-since'
        # should return recently deleted images according to the API spec.
        limit, marker = common.get_limit_and_marker(req)
        # Sorting by multiple keys and directions is conditionally enabled
        # if self.ext_mgr.is_loaded('os-server-sort-keys'):
        #    sort_keys, sort_dirs = common.get_sort_params(req.params)

        try:
            instance_list = self.conn.describe_instances(
                limit=limit, status=["pending", "running", "stopped", "suspended"]
            )
            data = instance_list["instance_set"]
            res = []
            for instance in xrange(instance_list.get("total_count", 0)):
                if search_filter_name == data[instance].get("instance_name") or search_filter_name == data[
                    instance
                ].get("instance_id"):
                    res = [{"id": data[instance].get("instance_id"), "name": data[instance].get("instance_id")}]
                    break
                else:
                    try:
                        eip_addr = collections.OrderedDict(
                            [(u"Elastic IP", [{"version": 4, "addr": data[instance]["eip"]["eip_addr"]}])]
                        )
                    except:
                        eip_addr = ""
                    res.append(
                        {
                            "id": data[instance].get("instance_id"),
                            "name": data[instance].get("instance_name"),
                            "status": data[instance].get("status"),
                            "tenant_id": "",
                            "user_id": "",
                            "metadata": {},
                            "hostId": "",
                            "image": data[instance]["image"]["image_id"],
                            "flavor": "",
                            "created": data[instance]["create_time"],
                            "updated": data[instance]["status_time"],
                            "addresses": eip_addr,
                            "accessIPv4": "",
                            "accessIPv6": "",
                            "links": "",
                        }
                    )

        except exception.MarkerNotFound:
            msg = _("marker [%s] not found") % marker
            raise webob.exc.HTTPBadRequest(explanation=msg)

        return {"servers": res}