From c03e17e4bc5bb1a507127aa986000435de3b4338 Mon Sep 17 00:00:00 2001 From: garciadeblas Date: Wed, 22 May 2024 23:30:12 +0200 Subject: [PATCH 1/5] Pin pylint version to 3.1.1 in tox.ini Change-Id: I778aff9868335bcd24a294edb08d9c6b9be5f040 Signed-off-by: garciadeblas --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index d0d2da8..268ae78 100644 --- a/tox.ini +++ b/tox.ini @@ -65,7 +65,7 @@ commands = deps = {[testenv]deps} -r{toxinidir}/requirements-dev.txt -r{toxinidir}/requirements-test.txt - pylint + pylint==3.1.1 commands = pylint -E osm_lcm --extension-pkg-allow-list=pydantic # issue with pydantic (https://github.com/pydantic/pydantic/issues/1961) -- 2.25.1 From 443060724b85062cbc1f79d4264db4343953d19a Mon Sep 17 00:00:00 2001 From: "k4.rahul" Date: Fri, 5 May 2023 14:24:31 +0530 Subject: [PATCH 2/5] Coverity-CWE 22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') Coverity fix for 137960 Filesystem path, filename, or URI manipulation Change-Id: Ieaa291ced268216361d865427100fd48bd39ed5a Signed-off-by: k4.rahul --- osm_lcm/lcm.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osm_lcm/lcm.py b/osm_lcm/lcm.py index 9b62d82..f8a97ae 100644 --- a/osm_lcm/lcm.py +++ b/osm_lcm/lcm.py @@ -21,6 +21,7 @@ # DEBUG WITH PDB import pdb +import os import asyncio import yaml import logging @@ -880,6 +881,7 @@ if __name__ == "__main__": file=sys.stderr, ) exit(1) + config_file = os.path.realpath(os.path.normpath(os.path.abspath(config_file))) lcm = Lcm(config_file) asyncio.run(lcm.start()) except (LcmException, getopt.GetoptError) as e: -- 2.25.1 From 0ee777934b4c165578dd7c0ab411c710a16bb90d Mon Sep 17 00:00:00 2001 From: 36970 Date: Mon, 1 Apr 2024 11:23:08 +0000 Subject: [PATCH 3/5] Bug 2362 fixed:Operational-status is not getting updated when healing is triggered Change-Id: I81040ca80f9dba23c7fd873decde7df8cc1a0ff2 Signed-off-by: 36970 --- osm_lcm/ns.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index 25ae038..986d5de 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -7912,6 +7912,7 @@ class NsLcm(LcmBase): old_config_status = db_nsr["config-status"] db_nsr_update = { + "operational-status": "healing", "_admin.deployed.RO.operational-status": "healing", } self.update_db_2("nsrs", nsr_id, db_nsr_update) @@ -8057,7 +8058,6 @@ class NsLcm(LcmBase): task_instantiation_info=tasks_dict_info, stage=stage, ) - except ( ROclient.ROClientException, DbException, -- 2.25.1 From 544ef4444711443a9322b9eb4d69241d28b33f26 Mon Sep 17 00:00:00 2001 From: 36970 Date: Mon, 1 Apr 2024 10:58:42 +0000 Subject: [PATCH 4/5] Bug 2365 fixed: Modified time in vnfrs collection of mongo database is not updated, after healing operation Change-Id: I0e188cbb06ee67f8399f5a2d72bb29799b70eb66 Signed-off-by: 36970 --- osm_lcm/ns.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index 986d5de..43e699f 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -8079,6 +8079,15 @@ class NsLcm(LcmBase): ) finally: error_list = list() + if db_vnfrs_list and target_list: + for vnfrs in db_vnfrs_list: + for vnf_instance in target_list: + if vnfrs["_id"] == vnf_instance.get("vnfInstanceId"): + self.db.set_list( + "vnfrs", + {"_id": vnfrs["_id"]}, + {"_admin.modified": time()}, + ) if exc: error_list.append(str(exc)) try: -- 2.25.1 From 83243632ad5f5b08b6ef68bce90f80397cf96e3b Mon Sep 17 00:00:00 2001 From: 36970 Date: Fri, 7 Jun 2024 05:44:08 +0000 Subject: [PATCH 5/5] 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 --- osm_lcm/ns.py | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) 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) -- 2.25.1