From: 36970 Date: Fri, 7 Jun 2024 05:44:08 +0000 (+0000) Subject: Bug 2042 fixed X-Git-Tag: release-v16.0-start~10 X-Git-Url: https://osm.etsi.org/gitweb/?a=commitdiff_plain;h=refs%2Fchanges%2F15%2F12115%2F8;p=osm%2FLCM.git Bug 2042 fixed Now, the vcaStatus is not overwritten when there are multiple KDUs inside a KNF, or when there are both KNFs and VNFs inside an NS Change-Id: I7f8f17d6cc5f5c519bc0895f23e0b8883979d33b Signed-off-by: Pedro Escaleira Signed-off-by: 36970 --- diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index 43e699f..1714985 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -265,14 +265,23 @@ class NsLcm(LcmBase): nsr = self.db.get_one(table="nsrs", q_filter=filter) current_ns_status = nsr.get("nsState") - # get vca status for NS + # First, we need to verify if the current vcaStatus is null, because if that is the case, + # MongoDB will not be able to create the fields used within the update key in the database + if not nsr.get("vcaStatus"): + # Write an empty dictionary to the vcaStatus field, it its value is null + self.update_db_2("nsrs", nsr_id, {"vcaStatus": dict()}) + + # Get vca status for NS status_dict = await self.n2vc.get_status( namespace="." + nsr_id, yaml_format=False, vca_id=vca_id ) - # vcaStatus + # Update the vcaStatus + db_key = f"vcaStatus.{nsr_id}.VNF" db_dict = dict() - db_dict["vcaStatus"] = status_dict + + db_dict[db_key] = status_dict[nsr_id] + await self.n2vc.update_vca_status(db_dict[db_key], vca_id=vca_id) # update configurationStatus for this VCA try: @@ -376,9 +385,27 @@ class NsLcm(LcmBase): vca_id=vca_id, ) - # vcaStatus + # First, we need to verify if the current vcaStatus is null, because if that is the case, + # MongoDB will not be able to create the fields used within the update key in the database + nsr = self.db.get_one(table="nsrs", q_filter=filter) + if not nsr.get("vcaStatus"): + # Write an empty dictionary to the vcaStatus field, it its value is null + self.update_db_2("nsrs", nsr_id, {"vcaStatus": dict()}) + + # Update the vcaStatus + db_key = f"vcaStatus.{nsr_id}.KNF" db_dict = dict() - db_dict["vcaStatus"] = {nsr_id: vca_status} + + db_dict[db_key] = vca_status + + if cluster_type in ("juju-bundle", "juju"): + # TODO -> this should be done in a more uniform way, I think in N2VC, in order to update the K8s VCA + # status in a similar way between Juju Bundles and Helm Charts on this side + await self.k8sclusterjuju.update_vca_status( + db_dict[db_key], + kdu_instance, + vca_id=vca_id, + ) self.logger.debug( f"Obtained VCA status for cluster type '{cluster_type}': {vca_status}" @@ -5006,7 +5033,7 @@ class NsLcm(LcmBase): vca_id=vca_id, cluster_type=cluster_type, ) - else: + if db_nsr["_admin"]["deployed"]["VCA"]: for vca_index, _ in enumerate(db_nsr["_admin"]["deployed"]["VCA"]): table, filter = "nsrs", {"_id": nsr_id} path = "_admin.deployed.VCA.{}.".format(vca_index)