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()) # Verify search by 'status' contains a valid status. # Convert it to filter by vm_state for compute_api. status = search_opts.pop('status', None) if status is not None: state = common.vm_state_from_status(status) if state is None: msg = _('Invalid server status: %(status)s') % locals() raise exc.HTTPBadRequest(explanation=msg) search_opts['vm_state'] = state if 'changes-since' in search_opts: try: parsed = utils.parse_isotime(search_opts['changes-since']) except ValueError: msg = _('Invalid changes-since value') raise exc.HTTPBadRequest(explanation=msg) search_opts['changes-since'] = parsed # 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. if 'deleted' not in search_opts: if 'changes-since' not in search_opts: # No 'changes-since', so we only want non-deleted servers search_opts['deleted'] = False # NOTE(dprince) This prevents computes' get_all() from returning # instances from multiple tenants when an admin accounts is used. # By default non-admin accounts are always limited to project/user # both here and in the compute API. if not context.is_admin or (context.is_admin and 'all_tenants' not in search_opts): if context.project_id: search_opts['project_id'] = context.project_id else: search_opts['user_id'] = context.user_id instance_list = self.compute_api.get_all(context, search_opts=search_opts) limited_list = self._limit_items(instance_list, req) if is_detail: self._add_instance_faults(context, limited_list) return self._view_builder.detail(req, limited_list) else: return self._view_builder.index(req, limited_list)
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()) # Verify search by 'status' contains a valid status. # Convert it to filter by vm_state for compute_api. status = search_opts.pop('status', None) if status is not None: state = common.vm_state_from_status(status) if state is None: msg = _('Invalid server status: %(status)s') % locals() raise exc.HTTPBadRequest(explanation=msg) search_opts['vm_state'] = state if 'changes-since' in search_opts: try: parsed = timeutils.parse_isotime(search_opts['changes-since']) except ValueError: msg = _('Invalid changes-since value') raise exc.HTTPBadRequest(explanation=msg) search_opts['changes-since'] = parsed # 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. if 'deleted' not in search_opts: if 'changes-since' not in search_opts: # No 'changes-since', so we only want non-deleted servers search_opts['deleted'] = False # NOTE(dprince) This prevents computes' get_all() from returning # instances from multiple tenants when an admin accounts is used. # By default non-admin accounts are always limited to project/user # both here and in the compute API. if not context.is_admin or (context.is_admin and 'all_tenants' not in search_opts): if context.project_id: search_opts['project_id'] = context.project_id else: search_opts['user_id'] = context.user_id instance_list = self.compute_api.get_all(context, search_opts=search_opts) limited_list = self._limit_items(instance_list, req) if is_detail: self._add_instance_faults(context, limited_list) return self._view_builder.detail(req, limited_list) else: return self._view_builder.index(req, limited_list)
def _get_servers(self, req, is_detail): """Returns a list of servers, taking into account any search options specified. """ search_opts = {} search_opts.update(req.str_GET) context = req.environ['nova.context'] remove_invalid_options(context, search_opts, self._get_server_search_options()) # Convert recurse_zones into a boolean search_opts['recurse_zones'] = utils.bool_from_str( search_opts.get('recurse_zones', False)) # If search by 'status', we need to convert it to 'vm_state' # to pass on to child zones. if 'status' in search_opts: status = search_opts['status'] state = common.vm_state_from_status(status) if state is None: reason = _('Invalid server status: %(status)s') % locals() raise exception.InvalidInput(reason=reason) search_opts['vm_state'] = state if 'changes-since' in search_opts: try: parsed = utils.parse_isotime(search_opts['changes-since']) except ValueError: msg = _('Invalid changes-since value') raise exc.HTTPBadRequest(explanation=msg) search_opts['changes-since'] = parsed # 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. if 'deleted' not in search_opts: if 'changes-since' not in search_opts: # No 'changes-since', so we only want non-deleted servers search_opts['deleted'] = False instance_list = self.compute_api.get_all(context, search_opts=search_opts) limited_list = self._limit_items(instance_list, req) servers = [ self._build_view(req, inst, is_detail)['server'] for inst in limited_list ] return dict(servers=servers)
def _get_servers(self, req, is_detail): """Returns a list of servers, taking into account any search options specified. """ search_opts = {} search_opts.update(req.str_GET) context = req.environ['nova.context'] remove_invalid_options(context, search_opts, self._get_server_search_options()) # Convert local_zone_only into a boolean search_opts['local_zone_only'] = utils.bool_from_str( search_opts.get('local_zone_only', False)) # If search by 'status', we need to convert it to 'vm_state' # to pass on to child zones. if 'status' in search_opts: status = search_opts['status'] state = common.vm_state_from_status(status) if state is None: reason = _('Invalid server status: %(status)s') % locals() raise exception.InvalidInput(reason=reason) search_opts['vm_state'] = state if 'changes-since' in search_opts: try: parsed = utils.parse_isotime(search_opts['changes-since']) except ValueError: msg = _('Invalid changes-since value') raise exc.HTTPBadRequest(explanation=msg) search_opts['changes-since'] = parsed # 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. if 'deleted' not in search_opts: if 'changes-since' not in search_opts: # No 'changes-since', so we only want non-deleted servers search_opts['deleted'] = False instance_list = self.compute_api.get_all(context, search_opts=search_opts) limited_list = self._limit_items(instance_list, req) if is_detail: self._add_instance_faults(context, limited_list) return self._view_builder.detail(req, limited_list) else: return self._view_builder.index(req, limited_list)
def _get_servers(self, req, is_detail): """Returns a list of servers, taking into account any search options specified. """ search_opts = {} search_opts.update(req.str_GET) context = req.environ["nova.context"] remove_invalid_options(context, search_opts, self._get_server_search_options()) # Convert recurse_zones into a boolean search_opts["recurse_zones"] = utils.bool_from_str(search_opts.get("recurse_zones", False)) # If search by 'status', we need to convert it to 'vm_state' # to pass on to child zones. if "status" in search_opts: status = search_opts["status"] state = common.vm_state_from_status(status) if state is None: reason = _("Invalid server status: %(status)s") % locals() raise exception.InvalidInput(reason=reason) search_opts["vm_state"] = state if "changes-since" in search_opts: try: parsed = utils.parse_isotime(search_opts["changes-since"]) except ValueError: msg = _("Invalid changes-since value") raise exc.HTTPBadRequest(explanation=msg) search_opts["changes-since"] = parsed # 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. if "deleted" not in search_opts: if "changes-since" not in search_opts: # No 'changes-since', so we only want non-deleted servers search_opts["deleted"] = False instance_list = self.compute_api.get_all(context, search_opts=search_opts) limited_list = self._limit_items(instance_list, req) servers = [self._build_view(req, inst, is_detail)["server"] for inst in limited_list] return dict(servers=servers)
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()) # Verify search by 'status' contains a valid status. # Convert it to filter by vm_state for compute_api. status = search_opts.pop("status", None) if status is not None: state = common.vm_state_from_status(status) if state is None: msg = _("Invalid server status: %(status)s") % locals() raise exc.HTTPBadRequest(explanation=msg) search_opts["vm_state"] = state if "changes-since" in search_opts: try: parsed = timeutils.parse_isotime(search_opts["changes-since"]) except ValueError: msg = _("Invalid changes-since value") raise exc.HTTPBadRequest(explanation=msg) search_opts["changes-since"] = parsed # 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. if "deleted" not in search_opts: if "changes-since" not in search_opts: # No 'changes-since', so we only want non-deleted servers search_opts["deleted"] = False if search_opts.get("vm_state") == "deleted": if context.is_admin: search_opts["deleted"] = True else: msg = _("Only administrators may list deleted instances") raise exc.HTTPBadRequest(explanation=msg) # NOTE(dprince) This prevents computes' get_all() from returning # instances from multiple tenants when an admin accounts is used. # By default non-admin accounts are always limited to project/user # both here and in the compute API. if not context.is_admin or (context.is_admin and "all_tenants" not in search_opts): if context.project_id: search_opts["project_id"] = context.project_id else: search_opts["user_id"] = context.user_id limit, marker = common.get_limit_and_marker(req) instance_list = self.compute_api.get_all(context, search_opts=search_opts, limit=limit, marker=marker) if is_detail: self._add_instance_faults(context, instance_list) response = self._view_builder.detail(req, instance_list) else: response = self._view_builder.index(req, instance_list) req.cache_db_instances(instance_list) return response