X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Finstance_topics.py;h=6922112d4430ed7ef938a8842309ceefc7bbce49;hp=de77d5d0f0c0677825a5b98b74d58a1d097dd845;hb=e395aa49c788ab9c776d16b49b75cf80a54af532;hpb=98de2986a4a7d8091c5b629910a756e207d35015 diff --git a/osm_nbi/instance_topics.py b/osm_nbi/instance_topics.py index de77d5d..6922112 100644 --- a/osm_nbi/instance_topics.py +++ b/osm_nbi/instance_topics.py @@ -432,18 +432,6 @@ class NsrTopic(BaseTopic): return ns_k8s_namespace - def _get_vim_account(self, vim_id: str, session): - try: - db_filter = self._get_project_filter(session) - db_filter["_id"] = vim_id - return self.db.get_one("vim_accounts", db_filter) - except Exception: - raise EngineException( - "Invalid vimAccountId='{}' not present for the project".format( - vim_id - ) - ) - def _create_nsr_descriptor_from_nsd(self, nsd, ns_request, nsr_id, session): now = time() additional_params, _ = self._format_additional_params( @@ -490,10 +478,6 @@ class NsrTopic(BaseTopic): ns_request["nsr_id"] = nsr_id if ns_request and ns_request.get("config-units"): nsr_descriptor["config-units"] = ns_request["config-units"] - vim_account_id = nsr_descriptor["instantiate_params"].get("vimAccountId") - if vim_account_id: - vca_id = self._get_vim_account(vim_account_id, session).get("vca") - nsr_descriptor["instantiate_params"]["vcaId"] = vca_id # Create vld if nsd.get("virtual-link-desc"): nsr_vld = deepcopy(nsd.get("virtual-link-desc", [])) @@ -782,6 +766,14 @@ class NsrTopic(BaseTopic): additional_params, vdu_params = self._format_additional_params( ns_request, vnf_index, vdu_id=vdu["id"], descriptor=vnfd ) + + try: + vdu_virtual_storage_descriptors = utils.filter_in_list( + vnfd.get("virtual-storage-desc", []), + lambda stg_desc: stg_desc["id"] in vdu["virtual-storage-desc"] + ) + except Exception: + vdu_virtual_storage_descriptors = [] vdur = { "vdu-id-ref": vdu["id"], # TODO "name": "" Name of the VDU in the VIM @@ -791,6 +783,7 @@ class NsrTopic(BaseTopic): "interfaces": [], "additionalParams": additional_params, "vdu-name": vdu["name"], + "virtual-storages": vdu_virtual_storage_descriptors } if vdu_params and vdu_params.get("config-units"): vdur["config-units"] = vdu_params["config-units"] @@ -1615,6 +1608,68 @@ class NsLcmOpTopic(BaseTopic): # TODO check that this forcing is not incompatible with other forcing return ifaces_forcing_vim_network + def _update_vnfrs_from_nsd(self, nsr): + try: + nsr_id = nsr["_id"] + nsd = nsr["nsd"] + + step = "Getting vnf_profiles from nsd" + vnf_profiles = nsd.get("df", [{}])[0].get("vnf-profile", ()) + vld_fixed_ip_connection_point_data = {} + + step = "Getting ip-address info from vnf_profile if it exists" + for vnfp in vnf_profiles: + # Checking ip-address info from nsd.vnf_profile and storing + for vlc in vnfp.get("virtual-link-connectivity", ()): + for cpd in vlc.get("constituent-cpd-id", ()): + if cpd.get("ip-address"): + step = "Storing ip-address info" + vld_fixed_ip_connection_point_data.update({vlc.get("virtual-link-profile-id") + '.' + cpd.get("constituent-base-element-id"): { + "vnfd-connection-point-ref": cpd.get( + "constituent-cpd-id"), + "ip-address": cpd.get( + "ip-address")}}) + + # Inserting ip address to vnfr + if len(vld_fixed_ip_connection_point_data) > 0: + step = "Getting vnfrs" + vnfrs = self.db.get_list("vnfrs", {"nsr-id-ref": nsr_id}) + for item in vld_fixed_ip_connection_point_data.keys(): + step = "Filtering vnfrs" + vnfr = next(filter(lambda vnfr: vnfr["member-vnf-index-ref"] == item.split('.')[1], vnfrs), None) + if vnfr: + vnfr_update = {} + for vdur_index, vdur in enumerate(vnfr["vdur"]): + for iface_index, iface in enumerate(vdur["interfaces"]): + step = "Looking for matched interface" + if ( + iface.get("external-connection-point-ref") + == vld_fixed_ip_connection_point_data[item].get("vnfd-connection-point-ref") and + iface.get("ns-vld-id") == item.split('.')[0] + + ): + vnfr_update_text = "vdur.{}.interfaces.{}".format( + vdur_index, iface_index + ) + step = "Storing info in order to update vnfr" + vnfr_update[ + vnfr_update_text + ".ip-address" + ] = increment_ip_mac( + vld_fixed_ip_connection_point_data[item].get("ip-address"), + vdur.get("count-index", 0), ) + vnfr_update[vnfr_update_text + ".fixed-ip"] = True + + step = "updating vnfr at database" + self.db.set_one("vnfrs", {"_id": vnfr["_id"]}, vnfr_update) + except ( + ValidationError, + EngineException, + DbException, + MsgException, + FsException, + ) as e: + raise type(e)("{} while '{}'".format(e, step), http_code=e.http_code) + def _update_vnfrs(self, session, rollback, nsr, indata): # get vnfr nsr_id = nsr["_id"] @@ -1934,6 +1989,7 @@ class NsLcmOpTopic(BaseTopic): self._check_ns_operation(session, nsr, operation, indata) if operation == "instantiate": + self._update_vnfrs_from_nsd(nsr) self._update_vnfrs(session, rollback, nsr, indata) nslcmop_desc = self._create_nslcmop(nsInstanceId, operation, indata)