Exemple #1
0
    def _get_nodes_collection(self,
                              marker,
                              limit,
                              sort_key,
                              sort_dir,
                              expand=False,
                              resource_url=None):

        limit = api_utils.validate_limit(limit)
        sort_dir = api_utils.validate_sort_dir(sort_dir)

        marker_obj = None
        if marker:
            marker_obj = objects.Node.get_by_uuid(pecan.request.context,
                                                  marker)

        if sort_key in self.invalid_sort_key_list:
            raise exception.InvalidParameterValue(
                _("The sort_key value %(key)s is an invalid field for "
                  "sorting") % {'key': sort_key})

        filters = {}
        nodes = objects.Node.list(pecan.request.context,
                                  limit,
                                  marker_obj,
                                  sort_key=sort_key,
                                  sort_dir=sort_dir,
                                  filters=filters)

        parameters = {'sort_key': sort_key, 'sort_dir': sort_dir}
        return NodeCollection.convert_with_locates(nodes,
                                                   limit,
                                                   url=resource_url,
                                                   expand=expand,
                                                   **parameters)
Exemple #2
0
    def _get_fleets_collection(self,
                               marker,
                               limit,
                               sort_key,
                               sort_dir,
                               fields=None):

        limit = api_utils.validate_limit(limit)
        sort_dir = api_utils.validate_sort_dir(sort_dir)

        marker_obj = None
        if marker:
            marker_obj = objects.Fleet.get_by_uuid(pecan.request.context,
                                                   marker)

        if sort_key in self.invalid_sort_key_list:
            raise exception.InvalidParameterValue(
                ("The sort_key value %(key)s is an invalid field for "
                 "sorting") % {'key': sort_key})

        filters = {}
        fleets = objects.Fleet.list(pecan.request.context,
                                    limit,
                                    marker_obj,
                                    sort_key=sort_key,
                                    sort_dir=sort_dir,
                                    filters=filters)

        parameters = {'sort_key': sort_key, 'sort_dir': sort_dir}

        return FleetCollection.convert_with_links(fleets,
                                                  limit,
                                                  fields=fields,
                                                  **parameters)
Exemple #3
0
    def _get_boards_collection(self,
                               status,
                               marker,
                               limit,
                               sort_key,
                               sort_dir,
                               project=None,
                               resource_url=None,
                               fields=None):

        limit = api_utils.validate_limit(limit)
        sort_dir = api_utils.validate_sort_dir(sort_dir)

        marker_obj = None
        if marker:
            marker_obj = objects.Board.get_by_uuid(pecan.request.context,
                                                   marker)

        if sort_key in self.invalid_sort_key_list:
            raise exception.InvalidParameterValue(
                ("The sort_key value %(key)s is an invalid field for "
                 "sorting") % {'key': sort_key})

        filters = {}

        # bounding the request to a project
        if project:
            if pecan.request.context.is_admin:
                filters['project_id'] = project
            else:
                msg = ("Project parameter can be used only "
                       "by the administrator.")
                raise wsme.exc.ClientSideError(msg, status_code=400)
        else:
            filters['project_id'] = pecan.request.context.project_id

        if status:
            filters['status'] = status

        boards = objects.Board.list(pecan.request.context,
                                    limit,
                                    marker_obj,
                                    sort_key=sort_key,
                                    sort_dir=sort_dir,
                                    filters=filters)

        parameters = {'sort_key': sort_key, 'sort_dir': sort_dir}

        return BoardCollection.convert_with_links(boards,
                                                  limit,
                                                  url=resource_url,
                                                  fields=fields,
                                                  **parameters)
Exemple #4
0
def check_for_invalid_fields(fields, object_fields):
    """Check for requested non-existent fields.

    Check if the user requested non-existent fields.

    :param fields: A list of fields requested by the user
    :object_fields: A list of fields supported by the object.
    :raises: InvalidParameterValue if invalid fields were requested.

    """
    invalid_fields = set(fields) - set(object_fields)
    if invalid_fields:
        raise exception.InvalidParameterValue(
            _('Field(s) "%s" are not valid') % ', '.join(invalid_fields))
Exemple #5
0
 def _validate_temp_url_config(self):
     """Validate the required settings for a temporary URL."""
     if not CONF.glance.swift_temp_url_key:
         raise exc.MissingParameterValue(
             _('Swift temporary URLs require a shared secret to be created. '
               'You must provide "swift_temp_url_key" as a config option.'))
     if not CONF.glance.swift_endpoint_url:
         raise exc.MissingParameterValue(
             _('Swift temporary URLs require a Swift endpoint URL. '
               'You must provide "swift_endpoint_url" as a config option.'))
     if not CONF.glance.swift_account:
         raise exc.MissingParameterValue(
             _('Swift temporary URLs require a Swift account string. '
               'You must provide "swift_account" as a config option.'))
     if CONF.glance.swift_temp_url_duration < 0:
         raise exc.InvalidParameterValue(
             _('"swift_temp_url_duration" must be a positive integer.'))
     seed_num_chars = CONF.glance.swift_store_multiple_containers_seed
     if (seed_num_chars is None or seed_num_chars < 0
             or seed_num_chars > 32):
         raise exc.InvalidParameterValue(
             _("An integer value between 0 and 32 is required for"
               " swift_store_multiple_containers_seed."))
Exemple #6
0
    def update_service(self, service_id, values):
        # NOTE(dtantsur): this can lead to very strange errors
        if 'uuid' in values:
            msg = _("Cannot overwrite UUID for an existing Service.")
            raise exception.InvalidParameterValue(err=msg)

        try:
            return self._do_update_service(service_id, values)
        except db_exc.DBDuplicateEntry as e:
            if 'name' in e.columns:
                raise exception.DuplicateName(name=values['name'])
            elif 'uuid' in e.columns:
                raise exception.ServiceAlreadyExists(uuid=values['uuid'])
            else:
                raise e
Exemple #7
0
def _paginate_query(model, limit=None, marker=None, sort_key=None,
                    sort_dir=None, query=None):
    if not query:
        query = model_query(model)
    sort_keys = ['id']
    if sort_key and sort_key not in sort_keys:
        sort_keys.insert(0, sort_key)
    try:
        query = db_utils.paginate_query(query, model, limit, sort_keys,
                                        marker=marker, sort_dir=sort_dir)
    except db_exc.InvalidSortKey:
        raise exception.InvalidParameterValue(
            _('The sort_key value "%(key)s" is an invalid field for sorting')
            % {'key': sort_key})

    return query.all()
Exemple #8
0
    def update_injection_plugin(self, plugin_injection_id, values):

        if 'uuid' in values:
            msg = _("Cannot overwrite UUID for an existing Plugin.")
            raise exception.InvalidParameterValue(err=msg)
        try:
            return self._do_update_injection_plugin(
                plugin_injection_id, values)

        except db_exc.DBDuplicateEntry as e:
            if 'name' in e.columns:
                raise exception.DuplicateName(name=values['name'])
            elif 'uuid' in e.columns:
                raise exception.PluginAlreadyExists(uuid=values['uuid'])
            else:
                raise e
Exemple #9
0
    def _get_ports_collection(self,
                              marker,
                              limit,
                              sort_key,
                              sort_dir,
                              fields=None,
                              with_public=False,
                              all_ports=False):

        limit = api_utils.validate_limit(limit)
        sort_dir = api_utils.validate_sort_dir(sort_dir)

        marker_obj = None
        if marker:
            marker_obj = objects.Port.get_by_uuid(pecan.request.context,
                                                  marker)

        if sort_key in self.invalid_sort_key_list:
            raise exception.InvalidParameterValue(
                ("The sort_key value %(key)s is an invalid field for "
                 "sorting") % {'key': sort_key})

        filters = {}
        #        if all_ports and not pecan.request.context.is_admin:
        #            msg = ("all_ports parameter can only be used  "
        #                   "by the administrator.")
        #            raise wsme.exc.ClientSideError(msg,
        #                                           status_code=400)
        #        else:
        #            if not all_ports:
        #                filters['owner'] = pecan.request.context.user_id
        #                if with_public:
        #                    filters['with_public'] = with_public

        ports = objects.Port.list(pecan.request.context,
                                  limit,
                                  marker_obj,
                                  sort_key=sort_key,
                                  sort_dir=sort_dir,
                                  filters=filters)

        parameters = {'sort_key': sort_key, 'sort_dir': sort_dir}

        return PortCollection.convert_with_links(ports,
                                                 limit,
                                                 fields=fields,
                                                 **parameters)
Exemple #10
0
    def post(self, plugin_ident, PluginAction):

        if not PluginAction.action:
            raise exception.MissingParameterValue(("Action is not specified."))

        if not PluginAction.parameters:
            PluginAction.parameters = {}

        rpc_board = api_utils.get_rpc_board(self.board_ident)
        rpc_plugin = api_utils.get_rpc_plugin(plugin_ident)

        try:
            cdict = pecan.request.context.to_policy_values()
            cdict['owner'] = rpc_board.owner
            policy.authorize('iot:plugin_action:post', cdict, cdict)

            if not rpc_plugin.public:
                cdict = pecan.request.context.to_policy_values()
                cdict['owner'] = rpc_plugin.owner
                policy.authorize('iot:plugin_action:post', cdict, cdict)
        except exception:
            return exception

        rpc_board.check_if_online()

        if objects.plugin.want_customs_params(PluginAction.action):
            valid_keys = list(rpc_plugin.parameters.keys())
            if not all(k in PluginAction.parameters for k in valid_keys):
                raise exception.InvalidParameterValue(
                    "Parameters are different from the valid ones")

        result = pecan.request.rpcapi.action_plugin(pecan.request.context,
                                                    rpc_plugin.uuid,
                                                    rpc_board.uuid,
                                                    PluginAction.action,
                                                    PluginAction.parameters)
        return result