# 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 __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: int):
+ 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": str(member_index)})
+ {"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",
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)