X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_mon%2Fcore%2Fcommon_db.py;h=8f2f552c6efef80eb429c1f69682e961f0b49f83;hb=628df021896fa8775f9743af62a4267b617cc35c;hp=9cc9c06b85759c7f3b8e8acf712b23c65db9c653;hpb=b525e6c8619d494d4e254def394cf5b62de4df4a;p=osm%2FMON.git diff --git a/osm_mon/core/common_db.py b/osm_mon/core/common_db.py index 9cc9c06..8f2f552 100644 --- a/osm_mon/core/common_db.py +++ b/osm_mon/core/common_db.py @@ -21,35 +21,54 @@ # 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_mon.core.settings import Config +from osm_mon.core.config import Config class CommonDbClient: - def __init__(self): - cfg = Config.instance() - self.common_db = dbmongo.DbMongo() - self.common_db.db_connect({'uri': cfg.MONGO_URI, - 'name': 'osm', - 'commonkey': cfg.OSMMON_DATABASE_COMMONKEY}) + 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): vnfr = self.common_db.get_one("vnfrs", {"nsr-id-ref": nsr_id, "member-vnf-index-ref": str(member_index)}) return vnfr - def get_vnfrs(self, nsr_id: str = None): + def get_vnfrs(self, nsr_id: str = None, vim_account_id: str = None): + if nsr_id and vim_account_id: + raise NotImplementedError("Only one filter is currently supported") if nsr_id: - return [self.get_vnfr(nsr_id, member['member-vnf-index']) for member in - self.get_nsr(nsr_id)['nsd']['constituent-vnfd']] + vnfrs = [self.get_vnfr(nsr_id, member['member-vnf-index']) for member in + self.get_nsr(nsr_id)['nsd']['constituent-vnfd']] + elif vim_account_id: + vnfrs = self.common_db.get_list("vnfrs", + {"vim-account-id": vim_account_id}) else: - return self.common_db.get_list('vnfrs') + vnfrs = self.common_db.get_list('vnfrs') + return vnfrs def get_vnfd(self, vnfd_id: str): - vnfr = self.common_db.get_one("vnfds", + vnfd = self.common_db.get_one("vnfds", {"_id": vnfd_id}) - return vnfr + return vnfd + + def get_vnfd_by_name(self, vnfd_name: str): + # TODO: optimize way of getting single VNFD in shared enviroments (RBAC) + if self.common_db.get_list("vnfds", {"name": vnfd_name}): + vnfd = self.common_db.get_list("vnfds", {"name": vnfd_name})[0] + return vnfd + else: + return None + + def get_nsrs(self): + return self.common_db.get_list('nsrs') def get_nsr(self, nsr_id: str): nsr = self.common_db.get_one("nsrs", @@ -66,15 +85,50 @@ class CommonDbClient: for vdur in vnfr['vdur']: if vdur['name'] == vdur_name: return vdur - raise ValueError('vdur not found for nsr-id %s, member_index %s and vdur_name %s', nsr_id, member_index, - vdur_name) + raise ValueError('vdur not found for nsr-id {}, member_index {} and vdur_name {}'.format(nsr_id, member_index, + vdur_name)) def decrypt_vim_password(self, vim_password: str, schema_version: str, vim_id: str): return self.common_db.decrypt(vim_password, schema_version, vim_id) + def decrypt_sdnc_password(self, sdnc_password: str, schema_version: str, sdnc_id: str): + return self.common_db.decrypt(sdnc_password, schema_version, sdnc_id) + def get_vim_account_id(self, nsr_id: str, vnf_member_index: int) -> str: vnfr = self.get_vnfr(nsr_id, vnf_member_index) return vnfr['vim-account-id'] def get_vim_accounts(self): return self.common_db.get_list('vim_accounts') + + def get_vim_account(self, vim_account_id: str) -> dict: + vim_account = self.common_db.get_one('vim_accounts', {"_id": vim_account_id}) + vim_account['vim_password'] = self.decrypt_vim_password(vim_account['vim_password'], + vim_account['schema_version'], + vim_account_id) + vim_config_encrypted_dict = { + "1.1": ("admin_password", "nsx_password", "vcenter_password"), + "default": ("admin_password", "nsx_password", "vcenter_password", "vrops_password") + } + vim_config_encrypted = vim_config_encrypted_dict['default'] + if vim_account['schema_version'] in vim_config_encrypted_dict.keys(): + vim_config_encrypted = vim_config_encrypted_dict[vim_account['schema_version']] + if 'config' in vim_account: + for key in vim_account['config']: + if key in vim_config_encrypted: + vim_account['config'][key] = self.decrypt_vim_password(vim_account['config'][key], + vim_account['schema_version'], + vim_account_id) + return vim_account + + def get_sdncs(self): + return self.common_db.get_list('sdns') + + def get_sdnc(self, sdnc_id: str): + return self.common_db.get_one('sdns', {'_id': sdnc_id}) + + def get_projects(self): + return self.common_db.get_list('projects') + + def get_project(self, project_id: str): + return self.common_db.get_one('projects', {'_id': project_id})