From: garciadeblas Date: Fri, 16 Jan 2026 01:51:15 +0000 (+0100) Subject: Update valid_url methods and schemas to support app instance update X-Git-Tag: v19.0.0^0 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=ed40146cb9d7e589d5b3967887d8e63e63e559be;p=osm%2FNBI.git Update valid_url methods and schemas to support app instance update Change-Id: Idf27c858f4b5dd5ee6281f541ad8d2ce89d6bff0 Signed-off-by: garciadeblas --- diff --git a/osm_nbi/engine.py b/osm_nbi/engine.py index 101167c8..129f7094 100644 --- a/osm_nbi/engine.py +++ b/osm_nbi/engine.py @@ -379,13 +379,6 @@ class Engine(object): session, _id, indata, not_send_msg=None ) - def update_appinstance(self, session, topic, _id, item, indata): - if topic not in self.map_topic: - raise EngineException( - "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR - ) - return self.map_topic[topic].update_appinstance(session, _id, item, indata) - def get_item_list(self, session, topic, filter_q=None, api_req=False): """ Get a list of items diff --git a/osm_nbi/k8s_topics.py b/osm_nbi/k8s_topics.py index 9b5b84dd..a17c2931 100644 --- a/osm_nbi/k8s_topics.py +++ b/osm_nbi/k8s_topics.py @@ -42,6 +42,8 @@ from osm_nbi.validation import ( attach_dettach_profile_schema, ksu_schema, app_instance_schema, + app_instance_edit_schema, + app_instance_update_schema, oka_schema, node_create_new_schema, node_edit_schema, @@ -1412,7 +1414,7 @@ class AppInstanceTopic(ACMTopic): okapkg_topic = "okas" topic_msg = "appinstance" schema_new = app_instance_schema - schema_edit = app_instance_schema + schema_edit = app_instance_edit_schema def __init__(self, db, fs, msg, auth): super().__init__(db, fs, msg, auth) @@ -1526,26 +1528,30 @@ class AppInstanceTopic(ACMTopic): except ValidationError as e: raise EngineException(e, HTTPStatus.UNPROCESSABLE_ENTITY) - def update_appinstance(self, session, _id, item, indata): + def update_item(self, session, _id, item, indata): if not self.multiproject: filter_db = {} else: filter_db = self._get_project_filter(session) # To allow project&user addressing by name AS WELL AS _id filter_db[BaseTopic.id_field(self.topic, _id)] = _id - validate_input(indata, app_instance_schema) + self.logger.info(f"Item: {item}") + self.logger.info(f"Indata before validation: {indata}") + validate_input(indata, app_instance_update_schema) + self.logger.info(f"Indata after validation: {indata}") data = self.db.get_one(self.topic, filter_db) operation_params = {} data["operatingState"] = "PROCESSING" data["resourceState"] = "IN_PROGRESS" operation_params = indata + self.logger.info(f"Operation params: {operation_params}") op_id = self.format_on_operation( data, - item, + "update", operation_params, ) self.db.set_one(self.topic, {"_id": _id}, data) - self._send_msg(item, {"appinstance": _id, "operation_id": op_id}) + self._send_msg("update", {"appinstance": _id, "operation_id": op_id}) return op_id def delete(self, session, _id, not_send_msg=None): diff --git a/osm_nbi/nbi.py b/osm_nbi/nbi.py index f723ff5d..22e61058 100644 --- a/osm_nbi/nbi.py +++ b/osm_nbi/nbi.py @@ -823,10 +823,10 @@ valid_url_methods = { "": { "METHODS": ("GET", "PATCH", "DELETE"), "ROLE_PERMISSION": "appinstance:id:", - }, - "update": { - "METHODS": ("POST",), - "ROLE_PERMISSION": "appinstance:", + "update": { + "METHODS": ("POST",), + "ROLE_PERMISSION": "appinstance:id:update:", + }, }, }, } @@ -2100,8 +2100,8 @@ class Server(object): ) outdata = {"op_id": op_id} elif topic == "appinstances" and item == "update": - op_id = self.engine.update_appinstance( - engine_session, engine_topic, _id, indata, kwargs + op_id = self.engine.update_item( + engine_session, engine_topic, _id, item, indata ) outdata = {"op_id": op_id} elif topic == "clusters" and item in ("upgrade", "scale"): diff --git a/osm_nbi/validation.py b/osm_nbi/validation.py index 2c2972da..1a82a1a8 100644 --- a/osm_nbi/validation.py +++ b/osm_nbi/validation.py @@ -1849,6 +1849,29 @@ app_instance_schema = { "required": ["name", "profile", "profile_type"], } +app_instance_edit_schema = { + "title": "app instance edit schema", + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "name": name_schema, + "description": string_schema, + }, + "additionalProperties": False, +} + +app_instance_update_schema = { + "title": "app instance update schema", + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "model": object_schema, + "params": object_schema, + "secret_params": object_schema, + }, + "additionalProperties": True, +} + class ValidationError(Exception): def __init__(self, message, http_code=HTTPStatus.UNPROCESSABLE_ENTITY):