PduTopic,
NstTopic,
VnfPkgOpTopic,
+ NsConfigTemplateTopic,
)
from osm_nbi.instance_topics import (
NsrTopic,
NsiTopic,
NsiLcmOpTopic,
)
+from osm_nbi.k8s_topics import (
+ K8sTopic,
+ InfraContTopic,
+ InfraConfTopic,
+ AppTopic,
+ ResourceTopic,
+ K8saddTopic,
+ KsusTopic,
+ OkaTopic,
+)
from osm_nbi.vnf_instance_topics import VnfInstances, VnfLcmOpTopic
from osm_nbi.pmjobs_topics import PmJobsTopic
from osm_nbi.subscription_topics import NslcmSubscriptionsTopic
+from osm_nbi.osm_vnfm.vnf_subscription import VnflcmSubscriptionsTopic
from base64 import b64encode
from os import urandom # , path
from threading import Lock
"nslcm_subscriptions": NslcmSubscriptionsTopic,
"vnf_instances": VnfInstances,
"vnflcmops": VnfLcmOpTopic,
+ "vnflcm_subscriptions": VnflcmSubscriptionsTopic,
+ "nsconfigtemps": NsConfigTemplateTopic,
+ "k8s": K8sTopic,
+ "infras_cont": InfraContTopic,
+ "infras_conf": InfraConfTopic,
+ "apps": AppTopic,
+ "resources": ResourceTopic,
+ "k8sops": K8saddTopic,
+ "ksus": KsusTopic,
+ "oka_packages": OkaTopic,
# [NEW_TOPIC]: add an entry here
# "pm_jobs": PmJobsTopic will be added manually because it needs other parameters
}
# "resources_to_operations file missing")
#
# with open(resources_to_operations_file, 'r') as f:
- # resources_to_operations = yaml.load(f, Loader=yaml.Loader)
+ # resources_to_operations = yaml.safeload(f)
#
# self.operations = []
#
with self.write_lock:
return self.map_topic[topic].new(rollback, session, indata, kwargs, headers)
+ def add_item(
+ self, rollback, session, topic, indata=None, kwargs=None, headers=None
+ ):
+ """
+ register a cluster in the database.
+ :param rollback: list to append created items at database in case a rollback must to be done
+ :param session: contains the used login username and working project, force to avoid checkins, public
+ :param topic: it can be: cluster for adding cluster into database
+ :param indata: data to be inserted
+ :param kwargs: used to override the indata descriptor
+ :param headers: http request headers
+ :return: _id: identity of the inserted data.
+ """
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+ with self.write_lock:
+ return self.map_topic[topic].add(rollback, session, indata, kwargs, headers)
+
def upload_content(self, session, topic, _id, indata, kwargs, headers):
"""
Upload content for an already created entry (_id)
session, _id, indata, kwargs, headers
)
+ def clone(
+ self, rollback, session, topic, _id, indata=None, kwargs=None, headers=None
+ ):
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+ with self.write_lock:
+ return self.map_topic[topic].clone(
+ rollback, session, _id, indata, kwargs, headers
+ )
+
+ def move_ksu(self, session, topic, _id, indata=None, kwargs=None):
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+
+ with self.write_lock:
+ return self.map_topic[topic].move_ksu(session, _id, indata, kwargs)
+
+ def get_cluster_info(self, session, topic, _id, item):
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+ return self.map_topic[topic].get_cluster_info(session, _id, item)
+
+ def update_cluster(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_cluster(session, _id, item, indata)
+
+ def delete_ksu(self, session, topic, _id, indata):
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+ with self.write_lock:
+ return self.map_topic[topic].delete_ksu(
+ session, _id, indata, not_send_msg=None
+ )
+
def get_item_list(self, session, topic, filter_q=None, api_req=False):
"""
Get a list of items
: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)
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
return self.map_topic[topic].list(session, filter_q, api_req)
def get_item(self, session, topic, _id, filter_q=None, 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 topic: it can be: users, projects, vnfds, nsds, clusters,
:param _id: server id of the item
:param filter_q: other arguments
: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)
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
return self.map_topic[topic].show(session, _id, filter_q, api_req)
+ def get_one_item(self, session, topic, _id, profile, filter_q=None, 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, clusters profile,
+ :param _id: server id of the item
+ :param profile: contains the profile type
+ :param filter_q: other arguments
+ :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_one(session, _id, profile, filter_q, api_req)
+
def get_file(self, session, topic, _id, path=None, accept_header=None):
"""
Get descriptor package or artifact file content
with self.write_lock:
return self.map_topic[topic].delete(session, _id, not_send_msg=not_send_msg)
+ def remove(self, session, topic, _id, not_send_msg=None):
+ """
+ Delete item by its internal id
+ :param session: contains the used login username and working project
+ :param topic: it can be: users, projects, vnfds, nsds, clusters,
+ :param _id: server id of the item
+ :param not_send_msg: If False, message will not be sent to kafka.
+ If a list, message is not sent, but content is stored in this variable so that the caller can send this
+ message using its own loop. If None, message is sent
+ :return: dictionary with deleted item _id. It raises exception if not found.
+ """
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+ with self.write_lock:
+ return self.map_topic[topic].remove(session, _id, not_send_msg=not_send_msg)
+
def edit_item(self, session, topic, _id, indata=None, kwargs=None):
"""
Update an existing entry at database
with self.write_lock:
return self.map_topic[topic].edit(session, _id, indata, kwargs)
+ def edit(self, session, topic, _id, item, indata=None, kwargs=None):
+ """
+ Update an existing entry at database
+ :param session: contains the used login username and working project
+ :param topic: it can be: users, projects, vnfds, nsds, ...
+ :param _id: identifier to be updated
+ :param item: it shows the type of profiles
+ :param indata: data to be inserted
+ :param kwargs: used to override the indata descriptor
+ :return: dictionary with edited item _id, raise exception if not found.
+ """
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+ with self.write_lock:
+ return self.map_topic[topic].edit(session, _id, item, indata, kwargs)
+
+ def cancel_item(
+ self, rollback, session, topic, indata=None, kwargs=None, headers=None
+ ):
+ """
+ Cancels an item
+ :param rollback: list to append created items at database in case a rollback must to be done
+ :param session: contains the used login username and working project, force to avoid checkins, public
+ :param topic: it can be: users, projects, vim_accounts, sdns, nsrs, nsds, vnfds
+ :param indata: data to be inserted
+ :param kwargs: used to override the indata descriptor
+ :param headers: http request headers
+ :return: _id: identity of the inserted data.
+ """
+ if topic not in self.map_topic:
+ raise EngineException(
+ "Unknown topic {}!!!".format(topic), HTTPStatus.INTERNAL_SERVER_ERROR
+ )
+ with self.write_lock:
+ self.map_topic[topic].cancel(rollback, session, indata, kwargs, headers)
+
def upgrade_db(self, current_version, target_version):
if target_version not in self.map_target_version_to_int.keys():
raise EngineException(