X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FNBI.git;a=blobdiff_plain;f=osm_nbi%2Finstance_topics.py;h=94adb7bf02420bbb9fca07b9e6fe75b4b745a9cd;hp=87b186ec8c3cfafb552f69c5ea18414c990f8166;hb=bb00602bac72bd5744e1e3ddc8e15068cb27c024;hpb=4568a372eb5a204e04d917213de03ec51f9110c1 diff --git a/osm_nbi/instance_topics.py b/osm_nbi/instance_topics.py index 87b186e..94adb7b 100644 --- a/osm_nbi/instance_topics.py +++ b/osm_nbi/instance_topics.py @@ -334,7 +334,7 @@ class NsrTopic(BaseTopic): # Create VNFRs needed_vnfds = {} # TODO: Change for multiple df support - vnf_profiles = nsd.get("df", [[]])[0].get("vnf-profile", ()) + vnf_profiles = nsd.get("df", [{}])[0].get("vnf-profile", ()) for vnfp in vnf_profiles: vnfd_id = vnfp.get("vnfd-id") vnf_index = vnfp.get("id") @@ -710,9 +710,14 @@ class NsrTopic(BaseTopic): if kdu_params and kdu_params.get("k8s-namespace"): kdu_k8s_namespace = kdu_params["k8s-namespace"] + kdu_deployment_name = "" + if kdu_params and kdu_params.get("kdu-deployment-name"): + kdu_deployment_name = kdu_params.get("kdu-deployment-name") + kdur = { "additionalParams": additional_params, "k8s-namespace": kdu_k8s_namespace, + "kdu-deployment-name": kdu_deployment_name, "kdu-name": kdu["name"], # TODO "name": "" Name of the VDU in the VIM "ip-address": None, # mgmt-interface filled by LCM @@ -933,9 +938,9 @@ class NsrTopic(BaseTopic): for index in range(0, count): vdur = deepcopy(vdur) for iface in vdur["interfaces"]: - if iface.get("ip-address"): + if iface.get("ip-address") and index != 0: iface["ip-address"] = increment_ip_mac(iface["ip-address"]) - if iface.get("mac-address"): + if iface.get("mac-address") and index != 0: iface["mac-address"] = increment_ip_mac(iface["mac-address"]) vdur["_id"] = str(uuid4()) @@ -945,6 +950,41 @@ class NsrTopic(BaseTopic): return vnfr_descriptor + def vca_status_refresh(self, session, ns_instance_content, filter_q): + """ + vcaStatus in ns_instance_content maybe stale, check if it is stale and create lcm op + to refresh vca status by sending message to LCM when it is stale. Ignore otherwise. + :param session: contains "username", "admin", "force", "public", "project_id", "set_project" + :param ns_instance_content: ns instance content + :param filter_q: dict: query parameter containing vcaStatus-refresh as true or false + :return: None + """ + time_now, time_delta = time(), time() - ns_instance_content["_admin"]["modified"] + force_refresh = isinstance(filter_q, dict) and filter_q.get('vcaStatusRefresh') == 'true' + threshold_reached = time_delta > 120 + if force_refresh or threshold_reached: + operation, _id = "vca_status_refresh", ns_instance_content["_id"] + ns_instance_content["_admin"]["modified"] = time_now + self.db.set_one(self.topic, {"_id": _id}, ns_instance_content) + nslcmop_desc = NsLcmOpTopic._create_nslcmop(_id, operation, None) + self.format_on_new(nslcmop_desc, session["project_id"], make_public=session["public"]) + nslcmop_desc["_admin"].pop("nsState") + self.msg.write("ns", operation, nslcmop_desc) + return + + def show(self, session, _id, filter_q=None, api_req=False): + """ + Get complete information on an ns instance. + :param session: contains "username", "admin", "force", "public", "project_id", "set_project" + :param _id: string, ns instance id + :param filter_q: dict: query parameter containing vcaStatusRefresh as true or false + :param api_req: True if this call is serving an external API request. False if serving internal request. + :return: dictionary, raise exception if not found. + """ + ns_instance_content = super().show(session, _id, api_req) + self.vca_status_refresh(session, ns_instance_content, filter_q) + return ns_instance_content + def edit(self, session, _id, indata=None, kwargs=None, content=None): raise EngineException( "Method edit called directly", HTTPStatus.INTERNAL_SERVER_ERROR