Open-Network-Models-and-Interfaces-ONMI / onmi-iisomi-uml-common

Project EAGLE: Open Source Repository for Open Model, Profile and Tools
Other
41 stars 71 forks source link

Lists representing configuration must have a key #49

Closed rvilalta closed 8 years ago

rvilalta commented 8 years ago

According to YANG RFC https://tools.ietf.org/html/rfc6020#section-7.8.2

There are many pyang errors regarding this issue. I copy the first ones:

TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:282)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:289)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:295)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:116)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:123)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:129)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:190)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:197)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:203)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:35)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:42)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:48)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:65: error: TapiModule-ObjectClasses:Tapi_Topology in the path for _topology at TapiModule-ObjectClasses.yang:63 is not found

HuiDingCATR commented 8 years ago

Can you please check whether the object translated to list has an attribute with "isPartOfKey" set to "1" in UML? If all the list object has at least one key, there should not be errors like this. For the last error, "xx is not found" I will upload a new version to fix this bug. Now the list element starts with "L" which causes this error, we will change grouping element to resolve this. New grouping element will starts with "G".

rvilalta commented 8 years ago

I will check with Karthik later.

bzeuner commented 8 years ago

The name of the attribute property is "partOfObjectKey".

rvilalta commented 8 years ago

I have corrected in my private branch NodeEdgePoint with list name partOfObjectKey = 1, and the error persists. Moreover, I would like the tool to say error if it doesn't have a key for a configurable list (YANG mandatory).

HuiDingCATR commented 8 years ago

It's a good suggestion. We'll include this error feature in the tool and upload a new version.

HuiDingCATR commented 8 years ago

Hi Ricard, does this new version resolve the "xx is not found" problem? I tested the code and now pyang doesn't report this error.

rvilalta commented 8 years ago

Improved. Following errors:

TapiModule-ObjectClasses.yang TapiModule-ObjectClasses.yang:7: warning: imported module TapiModule-ObjectClasses-TopologyPacs not used TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:282)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:289)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:295)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:116)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:123)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:129)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:190)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:197)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:203)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:35)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:42)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:48)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:73: error: the list needs at least one key TapiModule-ObjectClasses.yang:80: error: the list needs at least one key TapiModule-ObjectClasses.yang:86: error: the list needs at least one key TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:95): error: the key "name" does not reference an existing leaf TapiModule-ObjectClasses.yang:103: error: the path for _aggregatedNodeEdgePoint at TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:100) does not refer to a leaf TapiModule-ObjectClasses.yang:151: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferCapacityPac/" (should be path-arg) TapiModule-ObjectClasses.yang:156: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferCostPac/" (should be path-arg) TapiModule-ObjectClasses.yang:161: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferTimingPac/" (should be path-arg) TapiModule-ObjectClasses.yang:166: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferIntegrityPac/" (should be path-arg) TapiModule-ObjectClasses.yang:231: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferCapacityPac/" (should be path-arg) TapiModule-ObjectClasses.yang:236: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferCostPac/" (should be path-arg) TapiModule-ObjectClasses.yang:241: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferTimingPac/" (should be path-arg) TapiModule-ObjectClasses.yang:246: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferIntegrityPac/" (should be path-arg) TapiModule-ObjectClasses.yang:251: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_RiskParameterPac/" (should be path-arg) TapiModule-ObjectClasses.yang:256: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_ValidationPac/" (should be path-arg) TapiModule-ObjectClasses.yang:261: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_LayerProtocolTransitionPac/" (should be path-arg) TapiModule-ObjectClasses.yang:318: error: the list at "TapiModule-ObjectClasses.yang:318 (at TapiModule-ObjectClasses.yang:339)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:318: error: the list at "TapiModule-ObjectClasses.yang:318 (at TapiModule-ObjectClasses.yang:345)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:318: error: the list at "TapiModule-ObjectClasses.yang:318 (at TapiModule-ObjectClasses.yang:352)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:331: error: the path for _mappedNodeEdgePoint at TapiModule-ObjectClasses.yang:318 (at TapiModule-ObjectClasses.yang:328) does not refer to a leaf TapiModule-ObjectClasses.yang:369: error: the list at "TapiModule-ObjectClasses.yang:369 (at TapiModule-ObjectClasses.yang:400)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:369: error: the list at "TapiModule-ObjectClasses.yang:369 (at TapiModule-ObjectClasses.yang:406)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:369: error: the list at "TapiModule-ObjectClasses.yang:369 (at TapiModule-ObjectClasses.yang:413)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:382: error: the path for _clientNodeEdgePoint at TapiModule-ObjectClasses.yang:369 (at TapiModule-ObjectClasses.yang:379) does not refer to a leaf TapiModule-ObjectClasses.yang:387: error: the path for _serverNodeEdgePoint at TapiModule-ObjectClasses.yang:369 (at TapiModule-ObjectClasses.yang:385) does not refer to a leaf TapiModule-ObjectClasses.yang:430: error: the list at "TapiModule-ObjectClasses.yang:430 (at TapiModule-ObjectClasses.yang:510)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:430: error: the list at "TapiModule-ObjectClasses.yang:430 (at TapiModule-ObjectClasses.yang:517)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:430: error: the list at "TapiModule-ObjectClasses.yang:430 (at TapiModule-ObjectClasses.yang:523)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:430: error: the list at "TapiModule-ObjectClasses.yang:430 (at TapiModule-ObjectClasses.yang:451)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:430: error: the list at "TapiModule-ObjectClasses.yang:430 (at TapiModule-ObjectClasses.yang:458)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:430: error: the list at "TapiModule-ObjectClasses.yang:430 (at TapiModule-ObjectClasses.yang:464)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:559: error: the path for _nodeEdgePoint at TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:557) does not refer to a leaf TapiModule-ObjectClasses.yang:645: error: the list needs at least one key TapiModule-ObjectClasses.yang:677: error: the list needs at least one key TapiModule-ObjectClasses.yang:680: error: the list at "TapiModule-ObjectClasses.yang:680 (at TapiModule-TypeDefinitions.yang:45)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:680: error: the list at "TapiModule-ObjectClasses.yang:680 (at TapiModule-TypeDefinitions.yang:51)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:680: error: the list at "TapiModule-ObjectClasses.yang:680 (at TapiModule-TypeDefinitions.yang:57)" needs at least one key because it is used as config TapiModule-ObjectClasses.yang:686: error: bad value "/Tapi_TeLink/" (should be path-arg)

HuiDingCATR commented 8 years ago

Hi Ricard,

Can you locate the specific line in the yang file and check whether the "partOfObjectKey" is set for that object? I downloaded the onfModel from github and translated the uml to yang with our tool. You're right, the same errors are reported by pyang. However, I doublechecked the uml model and found that the keys are not set in UML.

For example, the first error is "TapiModule-ObjectClasses.yang:15: error: the list at "TapiModule-ObjectClasses.yang:15 (at TapiModule-ObjectClasses.yang:282)" needs at least one key because it is used as config". I located this line in yang, which it "list name". "name" has the type "NameAndValue" and none of the attribute of "NameAndValue" is set as key. You can set, for example, "valueName" as the key. And this error will be fix. This is not the bug in the tool.

HuiDingCATR commented 8 years ago

As for the "bad value" error, for example, "TapiModule-ObjectClasses.yang:151: error: bad value "/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferCapacityPac/" (should be path-arg)".

I located the following lines in yang file.
leaf _transferCapacity { type leafref { path '/TapiModule-ObjectClasses-TopologyPacs:Tapi_TransferCapacityPac/'; } } the "_transferCapcity" should be translated to "container" and "uses" Tapi_TransferCapacityPac. This is because the aggregation is set to "none" when it should be set to "composite" because the situation is an object class has an attribute whose type is also an object class. So in UML the aggregation should be properly set. This is not a bug in the tool.

rvilalta commented 8 years ago

Thank you for the explanation. I have been able to solve this issue in the TapiModule.