[VVP] Refine nested get_param test per R-10834 update 05/88505/1
authorLovett, Trevor <trevor.lovett@att.com>
Fri, 24 May 2019 23:28:36 +0000 (18:28 -0500)
committerLovett, Trevor <trevor.lovett@att.com>
Fri, 24 May 2019 23:28:36 +0000 (18:28 -0500)
R-10834 was updated via VNFRQTS-646 to better reflect SDC's level of
support

Change-Id: I5232e7dc88c8c20f076788abf368bf33f4f1e1cb
Issue-ID: VVP-219
Signed-off-by: Lovett, Trevor <trevor.lovett@att.com>
ice_validator/heat_requirements.json
ice_validator/tests/fixtures/test_nested_parameter_args/fail/fail0.yaml
ice_validator/tests/test_nested_parameter_args.py

index 735d8db..b152d77 100644 (file)
@@ -1,5 +1,5 @@
 {
-    "created": "2019-05-17T18:14:51.379866", 
+    "created": "2019-05-24T06:32:42.966223", 
     "current_version": "dublin", 
     "project": "", 
     "versions": {
             "needs_amount": 789
         }, 
         "dublin": {
-            "created": "2019-05-17T18:14:51.379790", 
+            "created": "2019-05-24T06:32:42.966152", 
             "needs": {
                 "R-00011": {
                     "description": "A VNF's Heat Orchestration Template's parameter defined\nin a nested YAML file\n**SHOULD NOT** have a parameter constraint defined.", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "none"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "hide_links": "", 
                     "id": "R-100400", 
                     "impacts": "", 
-                    "introduced": "2019-1", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "SHOULD", 
                     "hide_links": "", 
                     "id": "R-100410", 
                     "impacts": "", 
-                    "introduced": "2019-1", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "MAY", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
+                    "validated_by": "", 
+                    "validation_mode": ""
+                }, 
+                "R-106240": {
+                    "description": "The following VES Events **SHOULD** be supported by the PNF: pnfRegistration\nVES Event, HVol VES Event, and Fault VES Event. These are onboarded via\nhe SDC Design Studio.\n\nNote: these VES Events are emitted from the PNF to support PNF Plug and\nPlay, High Volume Measurements, and Fault events respectively.", 
+                    "docname": "Chapter7/PNF-Plug-and-Play", 
+                    "full_title": "", 
+                    "hide_links": "", 
+                    "id": "R-106240", 
+                    "impacts": "", 
+                    "introduced": "casablanca", 
+                    "is_need": true, 
+                    "is_part": false, 
+                    "keyword": "SHOULD", 
+                    "links": [], 
+                    "notes": "", 
+                    "parts": {}, 
+                    "section_name": "PNF Plug and Play", 
+                    "sections": [
+                        "PNF Plug and Play", 
+                        "PNF Plug and Play"
+                    ], 
+                    "status": null, 
+                    "tags": [], 
+                    "target": "PNF", 
+                    "test": "", 
+                    "test_case": "", 
+                    "test_file": "", 
+                    "title": "", 
+                    "title_from_content": "", 
+                    "type": "req", 
+                    "type_name": "Requirement", 
+                    "updated": "El Alto", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                 "R-10834": {
-                    "description": "If a VNF's Heat Orchestration Template resource attribute\n``property:`` uses a nested ``get_param``, the nested\n``get_param`` **MUST** reference an index.\n\nThat is, to obtain a property value, two ``get_param`` intrinsic\nfunctions are used.  The second ``get_param`` must be used\nto obtain an index value used to reference a parameter value in\na parameter defined as ``type: comma_delimited_list``.  For\nexample:\n\n* ``name: {get_param: [ name, get_param: index ] }``", 
+                    "description": "A VNF's Heat Orchestration Template resource attribute ``property:``\n**MUST NOT** use more than two levels of nested ``get_param`` intrinsic\nfunctions when deriving a property value.  SDC does not support nested\n``get_param`` with recursive lists (i.e., a list inside list).\nThe second ``get_param`` in a nested lookup must directly derive its value\nwithout further calls to ``get_param`` functions.\n\n* Example of valid nesting:\n\n  * ``name: {get_param: [ {vm-type}_names, {get_param : index } ] }``\n\n* Examples of invalid nesting.  SDC will not support these examples since\n  there is an array inside array.\n\n  * ``name: {get_param: [ {vm-type}_names, { get_param: [ indexlist, 0 ] } ] }``\n  * ``name: {get_param: [ {vm-type}_names, { get_param: [ indexlist1, { get_param: indexlist2 } ] } ] }``", 
                     "docname": "Chapter5/Heat/ONAP Heat Orchestration Template Format", 
                     "full_title": "", 
                     "hide_links": "", 
                     "introduced": "", 
                     "is_need": true, 
                     "is_part": false, 
-                    "keyword": "MUST", 
+                    "keyword": "MUST NOT", 
                     "links": [], 
                     "notes": "", 
                     "parts": {}, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "dublin", 
+                    "updated": "El Alto", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "hide_links": "", 
                     "id": "R-348813", 
                     "impacts": "", 
-                    "introduced": "", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "MUST", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "2019-1", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "hide_links": "", 
                     "id": "R-511776", 
                     "impacts": "", 
-                    "introduced": "", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "MUST", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "none"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "hide_links": "", 
                     "id": "R-599443", 
                     "impacts": "", 
-                    "introduced": "", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "MUST", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "none"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "2019-1", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "hide_links": "", 
                     "id": "R-681859", 
                     "impacts": "", 
-                    "introduced": "", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "MUST", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "none"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "hide_links": "", 
                     "id": "R-717227", 
                     "impacts": "", 
-                    "introduced": "", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "MUST", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "dublin", 
+                    "updated": "", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "hide_links": "", 
                     "id": "R-805572", 
                     "impacts": "", 
-                    "introduced": "", 
+                    "introduced": "dublin", 
                     "is_need": true, 
                     "is_part": false, 
                     "keyword": "MUST", 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "dublin", 
+                    "updated": "", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "in_service"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "none"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "casablanca", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": "static"
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "title_from_content": "", 
                     "type": "req", 
                     "type_name": "Requirement", 
-                    "updated": "", 
+                    "updated": "dublin", 
                     "validated_by": "", 
                     "validation_mode": ""
                 }, 
                     "validation_mode": "static"
                 }
             }, 
-            "needs_amount": 812
+            "needs_amount": 813
         }
     }
 }
\ No newline at end of file
index 0d25822..7da9b03 100644 (file)
 
 ---
 parameters:
-    cdl:
+    list_one:
         type: comma_delimited_list
-    num:
+    list_two:
+        type: comma_delimited_list
+    index_one:
+        type: number
+    index_two:
         type: number
 resources:
-    ex1_nova_server_0:
-        type: OS::Nova::Server
+    resource:
         properties:
-            name: { get_param: [ ex1_vm_names, 0 ] }
-            metadata:
-                vnf_id: { get_param: vnf_id }
-                vf_module_id1:
-                    get_param: [ cdl, { get_param: xnum }]
-                vf_module_id2:
-                    get_param: [ xcdl, { get_param: num }]
-
+            prop: {get_param: [list_one, {get_param: [list_two, {get_param: index_two}]}]}
+            prop_two: {get_param: [list_one, {get_param: [list_two, 0]}]}
index 62c22d7..9f5e0bb 100644 (file)
 # ============LICENSE_END============================================
 #
 #
+import os
 
-"""heat parameters
-"""
+from tests.helpers import validates, traverse, load_yaml
 
-import collections
 
-import pytest
+def is_get_param(arg):
+    return isinstance(arg, dict) and "get_param" in arg
 
-from .structures import Heat
-from .helpers import validates
 
-VERSION = "1.0.0"
+class GetParamChecker:
+    def __init__(self, yaml_file):
+        self.errors = []
+        self.filename = os.path.basename(yaml_file)
+
+    def __call__(self, keys, param_value, *args, **kwargs):
+        if isinstance(param_value, str):
+            return  # refers to a string or parameter - this is OK
+        if isinstance(param_value, list):
+            nested_get_params = (arg for arg in param_value if is_get_param(arg))
+            args = (call["get_param"] for call in nested_get_params)
+            invalid_args = (arg for arg in args if not isinstance(arg, str))
+            # We don't check if the args really point to parameters, because that
+            # check is already covered by test_05_all_get_param_have_defined_parameter
+            # in test_initial_configuration.py
+            if any(invalid_args):
+                self.errors.append(
+                    (
+                        "Invalid nesting of get_param detected in {} at {}. Calls to "
+                        "get_param can only be nested two deep, and the argument to "
+                        "the second get_param must only be a parameter name: {}"
+                    ).format(
+                        self.filename, " > ".join(keys), {"get_param": param_value}
+                    )
+                )
 
 
 @validates("R-10834")
 def test_nested_parameter_args(yaml_file):
-    """
-    If a VNF’s Heat Orchestration Template resource attribute
-    property metadata uses a nested get_param, then the "outer"
-    get_param must take 2 arguments.  The first argument must be
-    a parameter of type "comma_delimited_list", and the second
-    argument must be the "inner" get_param whose value must be a
-    parameter of type "number".
-
-    parameters:
-        cdl:
-            type: comma_delimited_list
-        num:
-            type: number
-    resources:
-        ex1_nova_server_0:
-            type: OS::Nova::Server
-            properties:
-                name: { get_param: [ ex1_vm_names, 0 ] }
-                metadata:
-                    vnf_id: { get_param: vnf_id }
-                    vf_module_id:
-                        get_param: [ cdl, { get_param: num }]
-    """
-    heat = Heat(filepath=yaml_file)
-    if not heat.resources:
-        pytest.skip("No resources found")
-    has_nested_parameters = False
-    bad = collections.defaultdict(list)
-    for rid, r in heat.resources.items():
-        metadata = heat.nested_get(r, "properties", "metadata", default={})
-        for key, value in metadata.items():
-            param = heat.nested_get(value, "get_param")
-            if isinstance(param, list) and len(param) == 2:
-                nested_param = heat.nested_get(param[1], "get_param")
-                if nested_param:
-                    has_nested_parameters = True
-                    if (
-                        heat.nested_get(heat.parameters, param[0], "type")
-                        != Heat.type_cdl
-                    ):
-                        bad[rid].append(
-                            "%s %s parameter type not %s"
-                            % (key, param[0], Heat.type_cdl)
-                        )
-                    if (
-                        heat.nested_get(heat.parameters, nested_param, "type")
-                        != Heat.type_num
-                    ):
-                        bad[rid].append(
-                            "%s %s nested parameter type not %s"
-                            % (key, nested_param, Heat.type_num)
-                        )
-    assert not bad, "resource ids with invalid nested parameter arguments\n    %s" % (
-        "\n    ".join("%s %s" % (k, ", ".join(v)) for k, v in bad.items())
-    )
-    if has_nested_parameters is False:
-        pytest.skip("No nested parameters found")
+    heat = load_yaml(yaml_file)
+    checker = GetParamChecker(yaml_file)
+    traverse(heat, "get_param", checker)
+    assert not checker.errors, ". ".join(checker.errors)