Reformat POL to standardized format
[osm/POL.git] / osm_policy_module / common / common_db_client.py
index 41ce975..1bd4e76 100644 (file)
 # For those usages not covered by the Apache License, Version 2.0 please
 # contact: bdiaz@whitestack.com or glavado@whitestack.com
 ##
-from osm_common import dbmongo
+from osm_common import dbmongo, dbmemory
 
 from osm_policy_module.core.config import Config
+from osm_policy_module.core.exceptions import VdurNotFound
 
 
 class CommonDbClient:
-    def __init__(self):
-        cfg = Config.instance()
-        self.common_db = dbmongo.DbMongo()
-        self.common_db.db_connect({'uri': cfg.OSMPOL_DATABASE_URI,
-                                   'name': 'osm'})
-
-    def get_vnfr(self, nsr_id: str, member_index: int):
-        vnfr = self.common_db.get_one("vnfrs",
-                                      {"nsr-id-ref": nsr_id, "member-vnf-index-ref": str(member_index)})
+    def __init__(self, config: Config):
+        if config.get("database", "driver") == "mongo":
+            self.common_db = dbmongo.DbMongo()
+        elif config.get("database", "driver") == "memory":
+            self.common_db = dbmemory.DbMemory()
+        else:
+            raise Exception(
+                "Unknown database driver {}".format(config.get("section", "driver"))
+            )
+        self.common_db.db_connect(config.get("database"))
+
+    def get_vnfr(self, nsr_id: str, member_index: str):
+        vnfr = self.common_db.get_one(
+            "vnfrs", {"nsr-id-ref": nsr_id, "member-vnf-index-ref": member_index}
+        )
         return vnfr
 
     def get_vnfrs(self, nsr_id: str):
-        return [self.get_vnfr(nsr_id, member['member-vnf-index']) for member in
-                self.get_nsr(nsr_id)['nsd']['constituent-vnfd']]
+        # TODO: Change for multiple DF support
+        nsr_nsd_df = self.get_nsr(nsr_id)["nsd"].get("df", [{}])[0]
+        all_nsd_member_vnf_index = [
+            vnf.get("id") for vnf in nsr_nsd_df.get("vnf-profile", [])
+        ]
+        return [
+            self.get_vnfr(nsr_id, member_index)
+            for member_index in all_nsd_member_vnf_index
+        ]
 
     def get_vnfd(self, vnfd_id: str):
-        vnfr = self.common_db.get_one("vnfds",
-                                      {"_id": vnfd_id})
+        vnfr = self.common_db.get_one("vnfds", {"_id": vnfd_id})
         return vnfr
 
     def get_nsr(self, nsr_id: str):
-        nsr = self.common_db.get_one("nsrs",
-                                     {"id": nsr_id})
+        nsr = self.common_db.get_one("nsrs", {"id": nsr_id})
         return nsr
 
     def get_nslcmop(self, nslcmop_id):
-        nslcmop = self.common_db.get_one("nslcmops",
-                                         {"_id": nslcmop_id})
+        nslcmop = self.common_db.get_one("nslcmops", {"_id": nslcmop_id})
         return nslcmop
+
+    def get_vdur(self, nsr_id, member_index, vdur_name):
+        vnfr = self.get_vnfr(nsr_id, member_index)
+        for vdur in vnfr["vdur"]:
+            if vdur["name"] == vdur_name:
+                return vdur
+        raise VdurNotFound(
+            "vdur not found for nsr-id %s, member_index %s and vdur_name %s",
+            nsr_id,
+            member_index,
+            vdur_name,
+        )
+
+    def create_nslcmop(self, nslcmop):
+        self.common_db.create("nslcmops", nslcmop)