Fix age key generation to convert pubkey to string
[osm/NBI.git] / osm_nbi / engine.py
index 7afaa22..bac0802 100644 (file)
@@ -44,6 +44,7 @@ from osm_nbi.descriptor_topics import (
     PduTopic,
     NstTopic,
     VnfPkgOpTopic,
+    NsConfigTemplateTopic,
 )
 from osm_nbi.instance_topics import (
     NsrTopic,
@@ -52,9 +53,20 @@ from osm_nbi.instance_topics import (
     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
@@ -88,6 +100,16 @@ class Engine(object):
         "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
     }
@@ -203,7 +225,7 @@ class Engine(object):
             #                 "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 = []
             #
@@ -261,6 +283,26 @@ class Engine(object):
         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)
@@ -281,6 +323,51 @@ class Engine(object):
                 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
@@ -291,23 +378,44 @@ class Engine(object):
         :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
@@ -357,6 +465,24 @@ class Engine(object):
         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
@@ -374,6 +500,44 @@ class Engine(object):
         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(