X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fnbi.py;h=31728463353b789fe997715a136a7367760274a1;hp=2d2d6355ac77764275b3b7b6647f7c8f40512466;hb=refs%2Fchanges%2F30%2F9030%2F2;hpb=1c38f2f3d8d54bd49fcfa8154d8a614da90293b1 diff --git a/osm_nbi/nbi.py b/osm_nbi/nbi.py index 2d2d635..3172846 100644 --- a/osm_nbi/nbi.py +++ b/osm_nbi/nbi.py @@ -115,6 +115,8 @@ URL: /osm GET POST / O O O /k8srepos O O / O O + /osmrepos O O + / O O /nst/v1 O O /netslice_templates_content O O @@ -266,7 +268,15 @@ valid_url_methods = { "ROLE_PERMISSION": "k8srepos:id:" } }, - + "osmrepos": {"METHODS": ("GET", "POST"), + "ROLE_PERMISSION": "osmrepos:", + "": {"METHODS": ("GET", "DELETE", "PATCH"), + "ROLE_PERMISSION": "osmrepos:id:" + } + }, + "domains": {"METHODS": ("GET", ), + "ROLE_PERMISSION": "domains:", + }, } }, "pdu": { @@ -657,6 +667,21 @@ class Server(object): } return self._format_out(problem_details, None) + def domain(self): + try: + domains = { + "user_domain_name": cherrypy.tree.apps['/osm'].config["authentication"].get("user_domain_name"), + "project_domain_name": cherrypy.tree.apps['/osm'].config["authentication"].get("project_domain_name")} + return self._format_out(domains) + except NbiException as e: + cherrypy.response.status = e.http_code.value + problem_details = { + "code": e.http_code.name, + "status": e.http_code.value, + "detail": str(e), + } + return self._format_out(problem_details, None) + @staticmethod def _format_login(token_info): """ @@ -790,8 +815,9 @@ class Server(object): return_text += " {}: {}\n".format(k, v) elif cherrypy.request.method == 'GET': for k, v in kwargs.items(): - self.engine.msg.write(main_topic, k, yaml.load(v), Loader=yaml.SafeLoader) - return_text += " {}: {}\n".format(k, yaml.load(v), Loader=yaml.SafeLoader) + v_dict = yaml.load(v, Loader=yaml.SafeLoader) + self.engine.msg.write(main_topic, k, v_dict) + return_text += " {}: {}\n".format(k, v_dict) except Exception as e: return_text += "Error: " + str(e) return_text += "\n" @@ -975,6 +1001,8 @@ class Server(object): if main_topic == "admin" and topic == "tokens": return self.token(method, _id, kwargs) token_info = self.authenticator.authorize(role_permission, query_string_operations, _id) + if main_topic == "admin" and topic == "domains": + return self.domain() engine_session = self._manage_admin_query(token_info, kwargs, method, _id) indata = self._format_in(kwargs) engine_topic = topic @@ -1096,34 +1124,32 @@ class Server(object): outdata = self.engine.del_item_list(engine_session, engine_topic, kwargs) cherrypy.response.status = HTTPStatus.OK.value else: # len(args) > 1 - delete_in_process = False + # for NS NSI generate an operation + op_id = None if topic == "ns_instances_content" and not engine_session["force"]: nslcmop_desc = { "lcmOperationType": "terminate", "nsInstanceId": _id, "autoremove": True } - opp_id, _ = self.engine.new_item(rollback, engine_session, "nslcmops", nslcmop_desc, kwargs) - if opp_id: - delete_in_process = True - outdata = {"_id": opp_id} - cherrypy.response.status = HTTPStatus.ACCEPTED.value + op_id, _ = self.engine.new_item(rollback, engine_session, "nslcmops", nslcmop_desc, kwargs) + if op_id: + outdata = {"_id": op_id} elif topic == "netslice_instances_content" and not engine_session["force"]: nsilcmop_desc = { "lcmOperationType": "terminate", "netsliceInstanceId": _id, "autoremove": True } - opp_id, _ = self.engine.new_item(rollback, engine_session, "nsilcmops", nsilcmop_desc, None) - if opp_id: - delete_in_process = True - outdata = {"_id": opp_id} - cherrypy.response.status = HTTPStatus.ACCEPTED.value - if not delete_in_process: - self.engine.del_item(engine_session, engine_topic, _id) - cherrypy.response.status = HTTPStatus.NO_CONTENT.value - if engine_topic in ("vim_accounts", "wim_accounts", "sdns", "k8sclusters", "k8srepos"): - cherrypy.response.status = HTTPStatus.ACCEPTED.value + op_id, _ = self.engine.new_item(rollback, engine_session, "nsilcmops", nsilcmop_desc, None) + if op_id: + outdata = {"_id": op_id} + # if there is not any deletion in process, delete + if not op_id: + op_id = self.engine.del_item(engine_session, engine_topic, _id) + if op_id: + outdata = {"op_id": op_id} + cherrypy.response.status = HTTPStatus.ACCEPTED.value if op_id else HTTPStatus.NO_CONTENT.value elif method in ("PUT", "PATCH"): op_id = None