X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Fengine.py;h=a647784ec17ff97dae5d8a9eb14332ed8aa21401;hp=8f70bb696161217167675a02832467b4de718b23;hb=61e0c52d4715b5726a369959d69a1305d6790ae2;hpb=b66b041b8a3669ef44d9a94643cfa4add94d7f9b diff --git a/osm_nbi/engine.py b/osm_nbi/engine.py index 8f70bb6..a647784 100644 --- a/osm_nbi/engine.py +++ b/osm_nbi/engine.py @@ -23,6 +23,7 @@ from http import HTTPStatus from osm_nbi.authconn_keystone import AuthconnKeystone from osm_nbi.authconn_internal import AuthconnInternal +from osm_nbi.authconn_tacacs import AuthconnTacacs from osm_nbi.base_topic import EngineException, versiontuple from osm_nbi.admin_topics import VimAccountTopic, WimAccountTopic, SdnTopic from osm_nbi.admin_topics import K8sClusterTopic, K8sRepoTopic, OsmRepoTopic @@ -30,6 +31,7 @@ from osm_nbi.admin_topics import UserTopicAuth, ProjectTopicAuth, RoleTopicAuth from osm_nbi.descriptor_topics import VnfdTopic, NsdTopic, PduTopic, NstTopic, VnfPkgOpTopic from osm_nbi.instance_topics import NsrTopic, VnfrTopic, NsLcmOpTopic, NsiTopic, NsiLcmOpTopic from osm_nbi.pmjobs_topics import PmJobsTopic +from osm_nbi.subscription_topics import NslcmSubscriptionsTopic from base64 import b64encode from os import urandom # , path from threading import Lock @@ -59,6 +61,7 @@ class Engine(object): "nsis": NsiTopic, "nsilcmops": NsiLcmOpTopic, "vnfpkgops": VnfPkgOpTopic, + "nslcm_subscriptions": NslcmSubscriptionsTopic, # [NEW_TOPIC]: add an entry here # "pm_jobs": PmJobsTopic will be added manually because it needs other parameters } @@ -130,6 +133,9 @@ class Engine(object): if config["authentication"]["backend"] == "keystone": self.authconn = AuthconnKeystone(config["authentication"], self.db, self.authenticator.role_permissions) + elif config["authentication"]["backend"] == "tacacs": + self.authconn = AuthconnTacacs(config["authentication"], self.db, + self.authenticator.role_permissions) else: self.authconn = AuthconnInternal(config["authentication"], self.db, self.authenticator.role_permissions) @@ -215,29 +221,31 @@ class Engine(object): with self.write_lock: return self.map_topic[topic].upload_content(session, _id, indata, kwargs, headers) - def get_item_list(self, session, topic, filter_q=None): + def get_item_list(self, session, topic, filter_q=None, api_req=False): """ Get a list of items :param session: contains the used login username and working project :param topic: it can be: users, projects, vnfds, nsds, ... :param filter_q: filter of data to be applied + :param api_req: True if this call is serving an external API request. False if serving internal request. :return: The list, it can be empty if no one match the filter_q. """ if topic not in self.map_topic: raise EngineException("Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR) - return self.map_topic[topic].list(session, filter_q) + return self.map_topic[topic].list(session, filter_q, api_req) - def get_item(self, session, topic, _id): + def get_item(self, session, topic, _id, api_req=False): """ Get complete information on an item :param session: contains the used login username and working project :param topic: it can be: users, projects, vnfds, nsds, :param _id: server id of the item + :param api_req: True if this call is serving an external API request. False if serving internal request. :return: dictionary, raise exception if not found. """ if topic not in self.map_topic: raise EngineException("Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR) - return self.map_topic[topic].show(session, _id) + return self.map_topic[topic].show(session, _id, api_req) def get_file(self, session, topic, _id, path=None, accept_header=None): """