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
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}