1 # -*- coding: utf-8 -*-
3 # Copyright 2018 Whitestack, LLC
4 # *************************************************************
6 # This file is part of OSM Monitoring module
7 # All Rights Reserved to Whitestack, LLC
9 # Licensed under the Apache License, Version 2.0 (the "License"); you may
10 # not use this file except in compliance with the License. You may obtain
11 # a copy of the License at
13 # http://www.apache.org/licenses/LICENSE-2.0
15 # Unless required by applicable law or agreed to in writing, software
16 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
18 # License for the specific language governing permissions and limitations
20 # For those usages not covered by the Apache License, Version 2.0 please
21 # contact: bdiaz@whitestack.com or glavado@whitestack.com
23 from typing
import List
25 from osm_common
import dbmongo
, dbmemory
27 from osm_mon
.core
.config
import Config
28 from osm_mon
.core
.models
import Alarm
32 def __init__(self
, config
: Config
):
33 if config
.get("database", "driver") == "mongo":
34 self
.common_db
= dbmongo
.DbMongo()
35 elif config
.get("database", "driver") == "memory":
36 self
.common_db
= dbmemory
.DbMemory()
39 "Unknown database driver {}".format(config
.get("section", "driver"))
41 self
.common_db
.db_connect(config
.get("database"))
43 def get_vnfr(self
, nsr_id
: str, member_index
: int):
44 vnfr
= self
.common_db
.get_one(
45 "vnfrs", {"nsr-id-ref": nsr_id
, "member-vnf-index-ref": str(member_index
)}
49 def get_vnfrs(self
, nsr_id
: str = None, vim_account_id
: str = None):
50 if nsr_id
and vim_account_id
:
51 raise NotImplementedError("Only one filter is currently supported")
54 self
.get_vnfr(nsr_id
, member
["member-vnf-index"])
55 for member
in self
.get_nsr(nsr_id
)["nsd"]["constituent-vnfd"]
58 vnfrs
= self
.common_db
.get_list("vnfrs", {"vim-account-id": vim_account_id
})
60 vnfrs
= self
.common_db
.get_list("vnfrs")
63 def get_vnfd(self
, vnfd_id
: str):
64 vnfd
= self
.common_db
.get_one("vnfds", {"_id": vnfd_id
})
67 def get_vnfd_by_id(self
, vnfd_id
: str, filter: dict = {}):
68 filter["id"] = vnfd_id
69 vnfd
= self
.common_db
.get_one("vnfds", filter)
72 def get_vnfd_by_name(self
, vnfd_name
: str):
73 # TODO: optimize way of getting single VNFD in shared enviroments (RBAC)
74 if self
.common_db
.get_list("vnfds", {"name": vnfd_name
}):
75 vnfd
= self
.common_db
.get_list("vnfds", {"name": vnfd_name
})[0]
81 return self
.common_db
.get_list("nsrs")
83 def get_nsr(self
, nsr_id
: str):
84 nsr
= self
.common_db
.get_one("nsrs", {"id": nsr_id
})
87 def get_nslcmop(self
, nslcmop_id
):
88 nslcmop
= self
.common_db
.get_one("nslcmops", {"_id": nslcmop_id
})
91 def get_vdur(self
, nsr_id
, member_index
, vdur_name
):
92 vnfr
= self
.get_vnfr(nsr_id
, member_index
)
93 for vdur
in vnfr
["vdur"]:
94 if vdur
["name"] == vdur_name
:
97 "vdur not found for nsr-id {}, member_index {} and vdur_name {}".format(
98 nsr_id
, member_index
, vdur_name
102 def decrypt_vim_password(self
, vim_password
: str, schema_version
: str, vim_id
: str):
103 return self
.common_db
.decrypt(vim_password
, schema_version
, vim_id
)
105 def decrypt_sdnc_password(
106 self
, sdnc_password
: str, schema_version
: str, sdnc_id
: str
108 return self
.common_db
.decrypt(sdnc_password
, schema_version
, sdnc_id
)
110 def get_vim_account_id(self
, nsr_id
: str, vnf_member_index
: int) -> str:
111 vnfr
= self
.get_vnfr(nsr_id
, vnf_member_index
)
112 return vnfr
["vim-account-id"]
114 def get_vim_accounts(self
):
115 return self
.common_db
.get_list("vim_accounts")
117 def get_vim_account(self
, vim_account_id
: str) -> dict:
118 vim_account
= self
.common_db
.get_one("vim_accounts", {"_id": vim_account_id
})
119 vim_account
["vim_password"] = self
.decrypt_vim_password(
120 vim_account
["vim_password"], vim_account
["schema_version"], vim_account_id
122 vim_config_encrypted_dict
= {
123 "1.1": ("admin_password", "nsx_password", "vcenter_password"),
131 vim_config_encrypted
= vim_config_encrypted_dict
["default"]
132 if vim_account
["schema_version"] in vim_config_encrypted_dict
.keys():
133 vim_config_encrypted
= vim_config_encrypted_dict
[
134 vim_account
["schema_version"]
136 if "config" in vim_account
:
137 for key
in vim_account
["config"]:
138 if key
in vim_config_encrypted
:
139 vim_account
["config"][key
] = self
.decrypt_vim_password(
140 vim_account
["config"][key
],
141 vim_account
["schema_version"],
146 def set_vim_account(self
, vim_account_id
: str, update_dict
: dict) -> bool:
148 # Set vim_account resources in mongo
149 self
.common_db
.set_one("vim_accounts", {"_id": vim_account_id
}, update_dict
)
150 # self.common_db.set_one('vim_accounts', {"name": "test-vim"}, update_dict)
156 return self
.common_db
.get_list("sdns")
158 def get_sdnc(self
, sdnc_id
: str):
159 return self
.common_db
.get_one("sdns", {"_id": sdnc_id
})
161 def get_projects(self
):
162 return self
.common_db
.get_list("projects")
164 def get_project(self
, project_id
: str):
165 return self
.common_db
.get_one("projects", {"_id": project_id
})
167 def get_k8sclusters(self
):
168 return self
.common_db
.get_list("k8sclusters")
170 def create_alarm(self
, alarm
: Alarm
):
171 action_data
= {"uuid": alarm
.uuid
, "action": alarm
.action
}
172 self
.common_db
.create("alarms_action", action_data
)
173 return self
.common_db
.create("alarms", alarm
.to_dict())
175 def delete_alarm(self
, alarm_uuid
: str):
176 self
.common_db
.del_one("alarms_action", {"uuid": alarm_uuid
})
177 return self
.common_db
.del_one("alarms", {"uuid": alarm_uuid
})
179 def get_alarms(self
) -> List
[Alarm
]:
181 alarm_dicts
= self
.common_db
.get_list("alarms")
182 for alarm_dict
in alarm_dicts
:
183 alarms
.append(Alarm
.from_dict(alarm_dict
))
186 def update_alarm_status(self
, alarm_state
: str, uuid
):
187 modified_count
= self
.common_db
.set_one(
188 "alarms", {"uuid": uuid
}, {"alarm_status": alarm_state
}
190 return modified_count
192 def update_alarm_extra_labels(self
, alarm_labels
: dict, uuid
):
193 modified_count
= self
.common_db
.set_one(
194 "alarms", {"uuid": uuid
}, {"extra_labels": alarm_labels
}
196 return modified_count
198 def get_alarm_by_uuid(self
, uuid
: str):
199 return self
.common_db
.get_one("alarms", {"uuid": uuid
})
201 def get_user(self
, username
: str):
202 return self
.common_db
.get_one("users", {"username": username
})
204 def get_user_by_id(self
, userid
: str):
205 return self
.common_db
.get_one("users", {"_id": userid
})
207 def get_role_by_name(self
, name
: str):
208 return self
.common_db
.get_one("roles", {"name": name
})
210 def get_role_by_id(self
, role_id
: str):
211 return self
.common_db
.get_one("roles", {"_id": role_id
})