Beispiel #1
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 #2
0
    def enable(self, EnabledWebserverData):
        """Create a new Webservice.

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

        if not EnabledWebserverData.dns:
            raise exception.MissingParameterValue(
                ("dns is not specified."))
        if not EnabledWebserverData.zone:
            raise exception.MissingParameterValue(
                ("zone is not specified."))
        if not EnabledWebserverData.email:
            raise exception.MissingParameterValue(
                ("email is not specified."))

        rpc_board = api_utils.get_rpc_board(self.board_ident)

        new_EnWebservice = pecan.request.rpcapi.enable_webservice(
            pecan.request.context,
            EnabledWebserverData.dns,
            EnabledWebserverData.zone,
            EnabledWebserverData.email,
            rpc_board.uuid)

        return EnabledWebservice.convert_with_links(new_EnWebservice)
Beispiel #3
0
    def get_all(self, marker=None,
                limit=None, sort_key='id', sort_dir='asc',
                fields=None):
        """Retrieve a list of webservices.

        :param marker: pagination marker for large data sets.
        :param limit: maximum number of resources to return in a single result.
                      This value cannot be larger than the value of max_limit
                      in the [api] section of the ironic configuration, or only
                      max_limit resources will be returned.
        :param sort_key: column to sort results by. Default: id.
        :param sort_dir: direction to sort. "asc" or "desc". Default: asc.
        :param with_public: Optional boolean to get also public pluings.
        :param all_webservices: Optional boolean to get all the pluings.
                            Only for the admin
        :param fields: Optional, a list with a specified set of fields
                       of the resource to be returned.
        """

        cdict = pecan.request.context.to_policy_values()
        policy.authorize('iot:webservice:get', cdict, cdict)

        rpc_board = api_utils.get_rpc_board(self.board_ident)

        filters = {}
        filters['board_uuid'] = rpc_board.uuid

        if fields is None:
            fields = _DEFAULT_WEBSERVICE_RETURN_FIELDS
        return self._get_webservices_collection(rpc_board.uuid, marker,
                                                limit, sort_key, sort_dir,
                                                fields=fields)
Beispiel #4
0
    def put(self, Webservice):
        """Create a new Webservice.

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

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

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

        rpc_board = api_utils.get_rpc_board(self.board_ident)

        new_Webservice = objects.Webservice(pecan.request.context,
                                            **Webservice.as_dict())

        new_Webservice.board_uuid = rpc_board.uuid
        new_Webservice = pecan.request.rpcapi.create_webservice(
            pecan.request.context,
            new_Webservice)

        return Webservice.convert_with_links(new_Webservice)
Beispiel #5
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 #6
0
    def get_one(self, port_ident):
        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner
        policy.authorize('iot:port_on_board:get', cdict, cdict)

        return self.get_port_detail(rpc_board, port_ident)
Beispiel #7
0
    def get_one(self, port_ident):
        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner
        policy.authorize('iot:port_on_board:get', cdict, cdict)

        return self.get_port_detail(rpc_board, port_ident)
Beispiel #8
0
    def get_all(self):

        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner
        policy.authorize('iot:port_on_board:get', cdict, cdict)

        return self._get_ports_on_board_collection(rpc_board.uuid)
Beispiel #9
0
    def get_all(self):

        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner
        policy.authorize('iot:port_on_board:get', cdict, cdict)

        return self._get_ports_on_board_collection(rpc_board.uuid)
Beispiel #10
0
    def get_all(self):
        """Retrieve a list of plugins of a board.

        """
        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner
        policy.authorize('iot:plugin_on_board:get', cdict, cdict)

        return self._get_plugins_on_board_collection(rpc_board.uuid)
Beispiel #11
0
    def get_all(self):
        """Retrieve a list of services of a board.

        """
        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['project_id'] = rpc_board.project
        policy.authorize('iot:service_on_board:get', cdict, cdict)

        return self._get_services_on_board_collection(rpc_board.uuid)
Beispiel #12
0
    def get_all(self):
        """Retrieve a list of services of a board.

        """
        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['project_id'] = rpc_board.project
        policy.authorize('iot:service_on_board:get', cdict, cdict)

        return self._get_services_on_board_collection(rpc_board.uuid)
Beispiel #13
0
    def get_all(self):
        """Retrieve a list of plugins of a board.

        """
        rpc_board = api_utils.get_rpc_board(self.board_ident)

        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner
        policy.authorize('iot:plugin_on_board:get', cdict, cdict)

        return self._get_plugins_on_board_collection(rpc_board.uuid)
Beispiel #14
0
    def disable(self):
        """Disable webservices in a board.

        :param board_ident: UUID or logical name of a board.
        """
        # context = pecan.request.context
        # cdict = context.to_policy_values()
        # policy.authorize('iot:board:delete', cdict, cdict)

        rpc_board = api_utils.get_rpc_board(self.board_ident)
        pecan.request.rpcapi.disable_webservice(pecan.request.context,
                                                rpc_board.uuid)
Beispiel #15
0
    def delete(self, board_ident):
        """Delete a board.

        :param board_ident: UUID or logical name of a board.
        """
        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:board:delete', cdict, cdict)

        rpc_board = api_utils.get_rpc_board(board_ident)
        pecan.request.rpcapi.destroy_board(pecan.request.context,
                                           rpc_board.uuid)
Beispiel #16
0
    def delete(self, board_ident):
        """Delete a board.

        :param board_ident: UUID or logical name of a board.
        """
        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:board:delete', cdict, cdict)

        rpc_board = api_utils.get_rpc_board(board_ident)
        pecan.request.rpcapi.destroy_board(pecan.request.context,
                                           rpc_board.uuid)
Beispiel #17
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 #18
0
    def get_one(self, board_ident, fields=None):
        """Retrieve information about the given board.

        :param board_ident: UUID or logical name of a board.
        :param fields: Optional, a list with a specified set of fields
            of the resource to be returned.
        """

        cdict = pecan.request.context.to_policy_values()
        policy.authorize('iot:board:get', cdict, cdict)

        rpc_board = api_utils.get_rpc_board(board_ident)

        return Board.convert_with_links(rpc_board, fields=fields)
Beispiel #19
0
    def get_one(self, board_ident, fields=None):
        """Retrieve information about the given board.

        :param board_ident: UUID or logical name of a board.
        :param fields: Optional, a list with a specified set of fields
            of the resource to be returned.
        """

        cdict = pecan.request.context.to_policy_values()
        policy.authorize('iot:board:get', cdict, cdict)

        rpc_board = api_utils.get_rpc_board(board_ident)

        return Board.convert_with_links(rpc_board, fields=fields)
Beispiel #20
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 #21
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 #22
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 #23
0
    def restore(self):
        rpc_board = api_utils.get_rpc_board(self.board_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()

        pecan.request.rpcapi.restore_services_on_board(pecan.request.context,
                                                       rpc_board.uuid)

        return self._get_services_on_board_collection(rpc_board.uuid)
Beispiel #24
0
    def delete(self, plugin_uuid):
        """Remove a plugin from a board.

        :param plugin_ident: UUID or logical name of a plugin.
        :param board_ident: UUID or logical name of a board.
        """
        rpc_board = api_utils.get_rpc_board(self.board_ident)
        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner

        policy.authorize('iot:plugin_remove:delete', cdict, cdict)

        rpc_board.check_if_online()
        rpc_plugin = api_utils.get_rpc_plugin(plugin_uuid)
        return pecan.request.rpcapi.remove_plugin(pecan.request.context,
                                                  rpc_plugin.uuid,
                                                  rpc_board.uuid)
Beispiel #25
0
    def delete(self, plugin_uuid):
        """Remove a plugin from a board.

        :param plugin_ident: UUID or logical name of a plugin.
        :param board_ident: UUID or logical name of a board.
        """
        rpc_board = api_utils.get_rpc_board(self.board_ident)
        cdict = pecan.request.context.to_policy_values()
        cdict['owner'] = rpc_board.owner

        policy.authorize('iot:plugin_remove:delete', cdict, cdict)

        rpc_board.check_if_online()
        rpc_plugin = api_utils.get_rpc_plugin(plugin_uuid)
        return pecan.request.rpcapi.remove_plugin(pecan.request.context,
                                                  rpc_plugin.uuid,
                                                  rpc_board.uuid)
Beispiel #26
0
    def restore(self):
        rpc_board = api_utils.get_rpc_board(self.board_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()

        pecan.request.rpcapi.restore_services_on_board(
            pecan.request.context,
            rpc_board.uuid)

        return self._get_services_on_board_collection(rpc_board.uuid)
Beispiel #27
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
Beispiel #28
0
    def patch(self, board_ident, val_Board):
        """Update a board.

        :param board_ident: UUID or logical name of a board.
        :param Board: values to be changed
        :return updated_board: updated_board
        """

        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:board:update', cdict, cdict)

        board = api_utils.get_rpc_board(board_ident)
        val_Board = val_Board.as_dict()
        for key in val_Board:
            try:
                board[key] = val_Board[key]
            except Exception:
                pass

        updated_board = pecan.request.rpcapi.update_board(
            pecan.request.context, board)
        return Board.convert_with_links(updated_board)
Beispiel #29
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 #30
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
Beispiel #31
0
    def patch(self, board_ident, val_Board):
        """Update a board.

        :param board_ident: UUID or logical name of a board.
        :param Board: values to be changed
        :return updated_board: updated_board
        """

        context = pecan.request.context
        cdict = context.to_policy_values()
        policy.authorize('iot:board:update', cdict, cdict)

        board = api_utils.get_rpc_board(board_ident)
        val_Board = val_Board.as_dict()
        for key in val_Board:
            try:
                board[key] = val_Board[key]
            except Exception:
                pass

        updated_board = pecan.request.rpcapi.update_board(
            pecan.request.context,
            board)
        return Board.convert_with_links(updated_board)
Beispiel #32
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