Beispiel #1
0
    def post(self, Board):
        """Create a new Board.

        :param Board: a Board within the request body.
        """
        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:board:create', cdict, cdict)

        if not Board.name:
            raise exception.MissingParameterValue(("Name is not specified."))
        if not Board.code:
            raise exception.MissingParameterValue(("Code is not specified."))
        if not Board.location:
            raise exception.MissingParameterValue(
                ("Location is not specified."))

        if Board.name:
            if not api_utils.is_valid_board_name(Board.name):
                msg = ("Cannot create board with invalid name %(name)s")
                raise wsme.exc.ClientSideError(msg % {'name': Board.name},
                                               status_code=400)

        new_Board = objects.Board(pecan.request.context, **Board.as_dict())

        new_Board.owner = pecan.request.context.user_id
        new_Board.project = pecan.request.context.project_id

        new_Location = objects.Location(pecan.request.context,
                                        **Board.location[0].as_dict())

        new_Board = pecan.request.rpcapi.create_board(pecan.request.context,
                                                      new_Board, new_Location)

        return Board.convert_with_links(new_Board)
Beispiel #2
0
    def post(self, Node):
        """Create a new Node.

        :param Node: a Node within the request body.
        """
        if not Node.name:
            raise exception.MissingParameterValue(_("Name is not specified."))
        if not Node.code:
            raise exception.MissingParameterValue(_("Code is not specified."))
        if not Node.location:
            raise exception.MissingParameterValue(
                _("Location is not specified."))

        if Node.name:
            if not api_utils.is_valid_node_name(Node.name):
                msg = _("Cannot create node with invalid name %(name)s")
                raise wsme.exc.ClientSideError(msg % {'name': Node.name},
                                               status_code=400)

        new_Node = objects.Node(pecan.request.context, **Node.as_dict())
        new_Node.create()

        new_Location = objects.Location(pecan.request.context,
                                        **Node.location[0].as_dict())
        new_Location.node_id = new_Node.id
        new_Location.create()

        return Node.convert_with_locates(new_Node)
Beispiel #3
0
    def post(self, Plugin):
        """Create a new Plugin.

        :param Plugin: a Plugin within the request body.
        """
        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:plugin:create', cdict, cdict)

        if not Plugin.name:
            raise exception.MissingParameterValue(("Name is not specified."))

        if Plugin.name:
            if not api_utils.is_valid_name(Plugin.name):
                msg = ("Cannot create plugin with invalid name %(name)s")
                raise wsme.exc.ClientSideError(msg % {'name': Plugin.name},
                                               status_code=400)

        new_Plugin = objects.Plugin(pecan.request.context, **Plugin.as_dict())

        new_Plugin.owner = cdict['user']
        new_Plugin = pecan.request.rpcapi.create_plugin(
            pecan.request.context, new_Plugin)

        return Plugin.convert_with_links(new_Plugin)
Beispiel #4
0
    def post(self, Service):
        """Create a new Service.

        :param Service: a Service within the request body.
        """
        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:service:create', cdict, cdict)

        if not Service.name:
            raise exception.MissingParameterValue(("Name is not specified."))

        if Service.name:
            if not api_utils.is_valid_name(Service.name):
                msg = ("Cannot create service with invalid name %(name)s")
                raise wsme.exc.ClientSideError(msg % {'name': Service.name},
                                               status_code=400)

        new_Service = objects.Service(pecan.request.context,
                                      **Service.as_dict())

        new_Service.project = cdict['project_id']
        new_Service = pecan.request.rpcapi.create_service(
            pecan.request.context, new_Service)

        return Service.convert_with_links(new_Service)
Beispiel #5
0
    def post(self, Fleet):
        """Create a new Fleet.

        :param Fleet: a Fleet within the request body.
        """
        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:fleet:create', cdict, cdict)

        if not Fleet.name:
            raise exception.MissingParameterValue(("Name is not specified."))

        if Fleet.name:
            if not api_utils.is_valid_name(Fleet.name):
                msg = ("Cannot create fleet with invalid name %(name)s")
                raise wsme.exc.ClientSideError(msg % {'name': Fleet.name},
                                               status_code=400)

        new_Fleet = objects.Fleet(pecan.request.context, **Fleet.as_dict())

        new_Fleet.project = cdict['project_id']
        new_Fleet = pecan.request.rpcapi.create_fleet(pecan.request.context,
                                                      new_Fleet)

        return Fleet.convert_with_links(new_Fleet)
Beispiel #6
0
    def put(self, Injection):
        """inject a plugin into a board.

        :param plugin_ident: UUID or logical name of a plugin.
        :param board_ident: UUID or logical name of a board.
        """

        if not Injection.plugin:
            raise exception.MissingParameterValue(("Plugin is not specified."))

        if not Injection.onboot:
            Injection.onboot = False

        rpc_board = api_utils.get_rpc_board(self.board_ident)
        rpc_plugin = api_utils.get_rpc_plugin(Injection.plugin)

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

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

        rpc_board.check_if_online()
        result = pecan.request.rpcapi.inject_plugin(pecan.request.context,
                                                    rpc_plugin.uuid,
                                                    rpc_board.uuid,
                                                    Injection.onboot)
        return result
Beispiel #7
0
    def delete(self, port):

        if not port:
            raise exception.MissingParameterValue(("Port is not specified."))

        rpc_board = api_utils.get_rpc_board(self.board_ident)
        rpc_port = api_utils.get_rpc_port(port)

        rpc_board.check_if_online()

        result = pecan.request.rpcapi.remove_port_from_board(
            pecan.request.context, rpc_board.uuid, rpc_port.uuid)

        return result
Beispiel #8
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."))
Beispiel #9
0
    def put(self, Network):

        if not Network.network:
            raise exception.MissingParameterValue(
                ("Network is not specified."))

        rpc_board = api_utils.get_rpc_board(self.board_ident)

        rpc_board.check_if_online()

        result = pecan.request.rpcapi.\
            create_port_on_board(pecan.request.context, rpc_board.uuid,
                                 Network.network, Network.subnet,
                                 Network.security_groups)
        return result
Beispiel #10
0
    def action(self, service_ident, ServiceAction):

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

        rpc_board = api_utils.get_rpc_board(self.board_ident)
        rpc_service = api_utils.get_rpc_service(service_ident)

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

        except exception:
            return exception

        rpc_board.check_if_online()

        result = pecan.request.rpcapi.action_service(pecan.request.context,
                                                     rpc_service.uuid,
                                                     rpc_board.uuid,
                                                     ServiceAction.action)
        return result
Beispiel #11
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