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