Fix Dockerfile.local
[osm/NBI.git] / osm_nbi / engine.py
index 8f70bb6..e0c25e5 100644 (file)
@@ -23,13 +23,16 @@ 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
+from osm_nbi.admin_topics import VcaTopic
 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
@@ -51,6 +54,7 @@ class Engine(object):
         "wim_accounts": WimAccountTopic,
         "sdns": SdnTopic,
         "k8sclusters": K8sClusterTopic,
+        "vca": VcaTopic,
         "k8srepos": K8sRepoTopic,
         "osmrepos": OsmRepoTopic,
         "users": UserTopicAuth,   # Valid for both internal and keystone authentication backends
@@ -59,6 +63,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 +135,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 +223,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):
         """