X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_policy_module%2Fcommon%2Fcommon_db_client.py;h=1bd4e76a63a5b90fc74e4618d890cd1e223fbc3c;hb=8537aea539c90c284f2d9a303533950e3853d1da;hp=41ce97566263ac80f2387c5cad8150b823666c5a;hpb=ec566a093b1d4023e675426ecf9ae3d4768b2436;p=osm%2FPOL.git diff --git a/osm_policy_module/common/common_db_client.py b/osm_policy_module/common/common_db_client.py index 41ce975..1bd4e76 100644 --- a/osm_policy_module/common/common_db_client.py +++ b/osm_policy_module/common/common_db_client.py @@ -21,38 +21,64 @@ # 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)