From 27b8fa6f070458abf28da8f0dcf511bb1cf5b943 Mon Sep 17 00:00:00 2001 From: adurti Date: Tue, 22 Jul 2025 13:48:52 +0530 Subject: [PATCH] Bug 2372 Fixed: Vnf Descriptor is getting updated without giving any value under min and max number of instances Change-Id: I245e4c452b757e5fbe7f15d4c049460d4a7a7cec Signed-off-by: adurti --- osm_im/validation.py | 63 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) diff --git a/osm_im/validation.py b/osm_im/validation.py index 561e716..7eff67e 100644 --- a/osm_im/validation.py +++ b/osm_im/validation.py @@ -79,3 +79,66 @@ class Validation: item, data = self.yaml_validation(descriptor) self.pyangbind_validation(item, data) + def validate_instantiation_level_descriptor(self, indata): + all_vdu_ids = set() + for vdu in indata.get("vdu", ()): + all_vdu_ids.add(vdu.get("id")) + + for df in indata.get("df", ()): + for il in df.get("instantiation-level", ()): + for vl in il.get("vdu-level", ()): + vl_vdu_id = vl.get("vdu-id") + if vl_vdu_id and vl_vdu_id not in all_vdu_ids: + raise ValidationException( + "df[id='{}']:instantiation-level[id='{}']:vdu-level" + "vdu-id='{}' not defined in vdu".format( + df["id"], + il["id"], + vl_vdu_id, + ) + ) + + def validate_vdu_profile_in_descriptor(self, indata): + all_vdu_ids = set() + for df in indata.get("df", ()): + if "vdu-profile" in df: + if not df.get("vdu-profile"): + if indata.get("vdu"): + raise ValidationException( + "no profiles are defined under vdu-profile section" + ) + for vp in df["vdu-profile"]: + missing = None + if not vp.get("id"): + missing = "id" + if df.get("scaling-aspect"): + if not vp.get("min-number-of-instances"): + missing = "min-number-of-instances" + if "min-number-of-instances" in vp: + if not vp.get("min-number-of-instances"): + missing = "min-number-of-instances" + if "max-number-of-instances" in vp: + if not vp.get("max-number-of-instances"): + missing = "max-number-of-instances" + if missing: + raise ValidationException( + "{} key-value pair is missing in vdu-profile".format( + missing + ) + ) + + for df in indata.get("df", ()): + for il in df.get("instantiation-level", ()): + for vl in il.get("vdu-level", ()): + all_vdu_ids.add(vl.get("vdu-id")) + + for df in indata.get("df", ()): + for vp in df.get("vdu-profile", ()): + vp_vdu_id = vp.get("id") + if vp_vdu_id and vp_vdu_id not in all_vdu_ids: + raise ValidationException( + "df[id='{}']:vdu-profile:vdu-id='{}' not defined in vdu".format( + df["id"], + vp_vdu_id, + ) + ) -- 2.25.1