- indata_ns["nsdId"] = service["_id"]
- indata_ns["nsName"] = slice_request.get("nsiName") + "." + service["id"]
- indata_ns["vimAccountId"] = slice_request.get("vimAccountId")
- indata_ns["nsDescription"] = service["description"]
- indata_ns["key-pair-ref"] = None
- for additional_params_subnet in get_iterable(slice_request.get("additionalParamsForSubnet")):
- if additional_params_subnet["id"] == service["id"]:
- if additional_params_subnet.get("additionalParamsForNs"):
- indata_ns["additionalParamsForNs"] = additional_params_subnet["additionalParamsForNs"]
- if additional_params_subnet.get("additionalParamsForVnf"):
- indata_ns["additionalParamsForVnf"] = additional_params_subnet["additionalParamsForVnf"]
- break
-
- # NsrTopic(rollback, session, indata_ns, kwargs, headers, force)
- # Overwriting ns_params filtering by nsName == netslice-subnet.id
-
- if ns_params:
- for ns_param in ns_params:
- if ns_param.get("id") == service["id"]:
- copy_ns_param = deepcopy(ns_param)
- del copy_ns_param["id"]
- indata_ns.update(copy_ns_param)
- # TODO: Improve network selection via networkID
- # Override the instantiation parameters for netslice-vld provided by user
- if nsi_vlds:
- indata_ns_list = []
- for nsi_vld in nsi_vlds:
- nsd = self.db.get_one("nsds", {"id": nsi_vld["nsd-ref"]})
- if nsd["connection-point"]:
- for cp_item in nsd["connection-point"]:
- if cp_item["name"] == nsi_vld["nsd-connection-point-ref"]:
- vld_id_ref = cp_item["vld-id-ref"]
- # Mapping the vim-network-name or vim-network-id instantiation parameters
- if nsi_vld.get("vim-network-id"):
- vnid = nsi_vld.get("vim-network-id")
- if type(vnid) is not dict:
- vim_network_id = {slice_request.get("vimAccountId"): vnid}
- else: # is string
- vim_network_id = vnid
- indata_ns_list.append({"name": vld_id_ref, "vim-network-id": vim_network_id})
- # Case not vim-network-name instantiation parameter
- elif nsi_vld.get("vim-network-name"):
- vnm = nsi_vld.get("vim-network-name")
- if type(vnm) is not dict:
- vim_network_name = {slice_request.get("vimAccountId"): vnm}
- else: # is string
- vim_network_name = vnm
- indata_ns_list.append({"name": vld_id_ref,
- "vim-network-name": vim_network_name})
- # Case neither vim-network-name nor vim-network-id provided
- else:
- indata_ns_list.append({"name": vld_id_ref})
- if indata_ns_list:
- indata_ns["vld"] = indata_ns_list
-
- # Creates Nsr objects
- _id_nsr = self.nsrTopic.new(rollback, session, indata_ns, kwargs, headers, force)
- nsrs_item = {"nsrId": _id_nsr}
+ # Is the nss shared and instantiated?
+ _filter = {"_admin.nsrs-detailed-list.ANYINDEX.shared": True,
+ "_admin.nsrs-detailed-list.ANYINDEX.nsd-id": service["nsd-ref"]}
+ nsi = self.db.get_one("nsis", _filter, fail_on_empty=False, fail_on_more=False)
+
+ if nsi and service.get("is-shared-nss"):
+ nsrs_detailed_list = nsi["_admin"]["nsrs-detailed-list"]
+ for nsrs_detailed_item in nsrs_detailed_list:
+ if nsrs_detailed_item["nsd-id"] == service["nsd-ref"]:
+ _id_nsr = nsrs_detailed_item["nsrId"]
+ break
+ for netslice_subnet in nsi["_admin"]["netslice-subnet"]:
+ if netslice_subnet["nss-id"] == service["id"]:
+ indata_ns = netslice_subnet
+ break
+ else:
+ indata_ns = {}
+ if service.get("instantiation-parameters"):
+ indata_ns = deepcopy(service["instantiation-parameters"])
+ # del service["instantiation-parameters"]
+
+ indata_ns["nsdId"] = service["_id"]
+ indata_ns["nsName"] = slice_request.get("nsiName") + "." + service["id"]
+ indata_ns["vimAccountId"] = slice_request.get("vimAccountId")
+ indata_ns["nsDescription"] = service["description"]
+ indata_ns["key-pair-ref"] = slice_request.get("key-pair-ref")
+
+ if ns_params:
+ for ns_param in ns_params:
+ if ns_param.get("id") == service["id"]:
+ copy_ns_param = deepcopy(ns_param)
+ del copy_ns_param["id"]
+ indata_ns.update(copy_ns_param)
+ break
+
+ # Creates Nsr objects
+ _id_nsr = self.nsrTopic.new(rollback, session, indata_ns, kwargs, headers, force)
+ nsrs_item = {"nsrId": _id_nsr, "shared": service.get("is-shared-nss"), "nsd-id": service["nsd-ref"],
+ "nslcmop_instantiate": None}
+ indata_ns["nss-id"] = service["id"]