import logging
import yaml
-from osm_common import dbmongo, dbmemory, fslocal, msglocal, msgkafka, version as common_version
+from osm_common import dbmongo, dbmemory, fslocal, fsmongo, msglocal, msgkafka, version as common_version
from osm_common.dbbase import DbException
from osm_common.fsbase import FsException
from osm_common.msgbase import MsgException
from http import HTTPStatus
-from authconn_keystone import AuthconnKeystone
-from authconn_internal import AuthconnInternal
-from base_topic import EngineException, versiontuple
-from admin_topics import VimAccountTopic, WimAccountTopic, SdnTopic
-from admin_topics import UserTopicAuth, ProjectTopicAuth, RoleTopicAuth
-from descriptor_topics import VnfdTopic, NsdTopic, PduTopic, NstTopic
-from instance_topics import NsrTopic, VnfrTopic, NsLcmOpTopic, NsiTopic, NsiLcmOpTopic
-from pmjobs_topics import PmJobsTopic
+from osm_nbi.authconn_keystone import AuthconnKeystone
+from osm_nbi.authconn_internal import AuthconnInternal
+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
+from osm_nbi.admin_topics import UserTopicAuth, ProjectTopicAuth, RoleTopicAuth
+from osm_nbi.descriptor_topics import VnfdTopic, NsdTopic, PduTopic, NstTopic
+from osm_nbi.instance_topics import NsrTopic, VnfrTopic, NsLcmOpTopic, NsiTopic, NsiLcmOpTopic
+from osm_nbi.pmjobs_topics import PmJobsTopic
from base64 import b64encode
from os import urandom, path
from threading import Lock
"vim_accounts": VimAccountTopic,
"wim_accounts": WimAccountTopic,
"sdns": SdnTopic,
+ "k8sclusters": K8sClusterTopic,
+ "k8srepos": K8sRepoTopic,
"users": UserTopicAuth, # Valid for both internal and keystone authentication backends
"projects": ProjectTopicAuth, # Valid for both internal and keystone authentication backends
"roles": RoleTopicAuth, # Valid for both internal and keystone authentication backends
# Add new versions here
}
- def __init__(self):
+ def __init__(self, token_cache):
self.db = None
self.fs = None
self.msg = None
self.logger = logging.getLogger("nbi.engine")
self.map_topic = {}
self.write_lock = None
+ self.token_cache = token_cache
def start(self, config):
"""
if config["storage"]["driver"] == "local":
self.fs = fslocal.FsLocal()
self.fs.fs_connect(config["storage"])
+ elif config["storage"]["driver"] == "mongo":
+ self.fs = fsmongo.FsMongo()
+ self.fs.fs_connect(config["storage"])
else:
raise EngineException("Invalid configuration param '{}' at '[storage]':'driver'".format(
config["storage"]["driver"]))
if config["authentication"]["backend"] == "keystone":
self.auth = AuthconnKeystone(config["authentication"], self.db, None)
else:
- self.auth = AuthconnInternal(config["authentication"], self.db, dict())
+ self.auth = AuthconnInternal(config["authentication"], self.db, self.token_cache)
if not self.operations:
if "resources_to_operations" in config["rbac"]:
resources_to_operations_file = config["rbac"]["resources_to_operations"]
raise EngineException("Invalid permission configuration: resources_to_operations file missing")
with open(resources_to_operations_file, 'r') as f:
- resources_to_operations = yaml.load(f)
+ resources_to_operations = yaml.load(f, Loader=yaml.Loader)
self.operations = []
self.write_lock = Lock()
# create one class per topic
for topic, topic_class in self.map_from_topic_to_class.items():
- if self.auth and topic_class in (UserTopicAuth, ProjectTopicAuth):
- self.map_topic[topic] = topic_class(self.db, self.fs, self.msg, self.auth)
- elif self.auth and topic_class == RoleTopicAuth:
+ # if self.auth and topic_class in (UserTopicAuth, ProjectTopicAuth):
+ # self.map_topic[topic] = topic_class(self.db, self.fs, self.msg, self.auth)
+ if self.auth and topic_class == RoleTopicAuth:
self.map_topic[topic] = topic_class(self.db, self.fs, self.msg, self.auth,
self.operations)
else:
- self.map_topic[topic] = topic_class(self.db, self.fs, self.msg)
+ self.map_topic[topic] = topic_class(self.db, self.fs, self.msg, self.auth)
- self.map_topic["pm_jobs"] = PmJobsTopic(config["prometheus"].get("host"), config["prometheus"].get("port"))
+ self.map_topic["pm_jobs"] = PmJobsTopic(self.db, config["prometheus"].get("host"),
+ config["prometheus"].get("port"))
except (DbException, FsException, MsgException) as e:
raise EngineException(str(e), http_code=e.http_code)