Bug 2372 Fixed: Vnf Descriptor is getting updated without giving any value under... 97/15297/4 master
authoradurti <adurti.v@tataelxsi.co.in>
Tue, 22 Jul 2025 08:18:52 +0000 (13:48 +0530)
committergarciadeblas <gerardo.garciadeblas@telefonica.com>
Thu, 23 Oct 2025 08:36:11 +0000 (10:36 +0200)
Change-Id: I245e4c452b757e5fbe7f15d4c049460d4a7a7cec
Signed-off-by: adurti <adurti.v@tataelxsi.co.in>
osm_im/validation.py

index 561e716..7eff67e 100644 (file)
@@ -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,
+                        )
+                    )